Ja soweit dacht ich acuh schon nur hab ich keine Ahnung wo das im Clienten definiert wird
Beiträge von Ocelot2606
-
-
1.) Richtiger Bereich wäre von Vorteil lesen ist halt eine Kunst
2.) Die Quest für die Pets in den Fliege Files ist ganz normal im Quest Ordner unter Pferd,Pet/Mount und die nennt sich Pets.quest
3.) Boni kannst über DB einstellen oder über die special_item_group.txt
-
Hey Leute ich hab hier mal ne Frage an euch! Ich hab einen sehr komischen Bug überhaupt noch nie gesehen geschweige den davon gehört
Es ist so wenn ich nun einen Stein in die Rüstung einfügen will klappt alles wunderbar aber wenn ich nun einen Stein in die Wafffe einfügen will kommt folgendes Fenster
Bitte melden Sie sich an, um diesen Link zu sehen.
Wie man hier unschwer erkennen kann Zeigt er mir die Stein Slots doppelt an! Es kommt leider keine Syserr dazu weder Client noch Server alles durch gesehen extra auch die Syserrs alle gelöscht um sicher zu gehen
Einfügen funktioniert aber einwandfrei es ist nur der Bug das es mir doppelt angezeigt wird!
Ich hab auch kein einziges System im Server das entferntesten was mit Waffen zu tun hat also wenn von euch irgendwer eine Idee hat wo ich den Fehler suchen könnte wäre ich dankbar
Edit:
Falls nochmal wer so einen Fehler hat bei mir lag es an der uitooltip.py das die Zeilen
AppendWearableInformation
__AppendMetinSlotInfodoppelt ausgeführt wurden! Diese einfach auskommentiert und dann ging es grosses danke geht an einen User aus einem anderen Forum
-
Das habe ich schon nachgeguckt, ist gesetzt.
Hast du sysinstall ausgeführt?
-
Entweder du erstellst dir einen Hamachi Server oder Lokal Server mit der Festplatte anders kommst du da nicht ran
-
Wenn das so ist dürfte auch der Tau Bug nicht mehr funktionieren tut er aber dennoch und der nutzt das Selbe Prinzip
-
Guter erster Eindruck wenn man als übersetzer sich anbieten will aber gleich mal in der Überschrift Übersetzug stehen hat und nicht Übersetzung
-
Ja aber das geht dann ja easy per Quest. Machte man doch damals als man das Original Pet System noch nicht hatte auch nicht anders! Siegel wird aktiviert Pferdelevel wird gesetzt! Mount wird zurück geschickt Pferdelevel wird wieder auf Standart gesetzt (oder was man halt hatte)
-
Müsste es nicht auch gehen wenn man die Reittiere nun einträgt wie ein Pferd? Also auch das Pferdelevel erweitert etc und das man halt nur die Animation fürs nachlaufen sich erstellen muss?
-
In Version 1 war es part_acce in Version 2 ka aber in Version 3 ist es part_sash also dieses sash_acce kommt mir auch sehr Suspekt vor welche Version nutzt du den?
-
Ah gut dann hab ich doch keine Blödsinn verzapft
-
Glaub ich eher nicht.. da leUte im notfall ja für ein guten Server extra m2bob holen..Außer du zahlst den 10k oder so xD
War der Meinung hätte sowas irgendwo mal gelesen/gehört gehabt. Kann aber eh sein das ich mich in dem Punkt irre wenn es so ist meine Aussage einfach nicht beachten
-
Ist es nicht so das du einmalig was beim Ersteller von M2BoB zahlen kannst und der dann für deinen Server keinen M2Bob mehr rausbringt? Oder irre ich mich da?
-
Server Source
Client Source
Client
Server Datein
Mysql
-
Was mit dem Pet System das released ist? Ob das Bugs hat weiss ich nicht nur das es sich mit dem Sash system was mit Scale arbeitet nicht verträgt aber das es irgendwie fixxbar ist
-
Hey alle zusammen hab da mal ne Frage un zwar bekomme ich beim Einfügen von Meyles Hort im SRC nen Fehler.
MeleyLair_manager was not declared in this scope
main.cpp 581 und 670
Hab nachdem Fehler gesucht weil ich mir sicher war das ich das doch schon irgendwo mal gelesen hatte und siehe da ich habe es gefunden.
Bitte melden Sie sich an, um diesen Link zu sehen.
Allerdings wirkt diese Lösung nicht bei mir auch nach mehrmaligem Einrücken etc immer noch der gleiche Fehler.
Mein main.cpp Sieht so aus
Code- #include "stdafx.h"
- #include "constants.h"
- #include "config.h"
- #include "event.h"
- #include "minilzo.h"
- #include "packet.h"
- #include "desc_manager.h"
- #include "item_manager.h"
- #include "char.h"
- #include "char_manager.h"
- #include "mob_manager.h"
- #include "motion.h"
- #include "sectree_manager.h"
- #include "shop_manager.h"
- #include "regen.h"
- #include "text_file_loader.h"
- #include "skill.h"
- #include "pvp.h"
- #include "party.h"
- #include "questmanager.h"
- #include "profiler.h"
- #include "lzo_manager.h"
- #include "messenger_manager.h"
- #include "db.h"
- #include "log.h"
- #include "p2p.h"
- #include "guild_manager.h"
- #include "dungeon.h"
- #include "cmd.h"
- #include "refine.h"
- #include "banword.h"
- #include "priv_manager.h"
- #include "war_map.h"
- #include "building.h"
- #include "login_sim.h"
- #include "target.h"
- #include "marriage.h"
- #include "wedding.h"
- #include "fishing.h"
- #include "item_addon.h"
- #include "TrafficProfiler.h"
- #include "locale_service.h"
- #include "arena.h"
- #include "OXEvent.h"
- #include "monarch.h"
- #include "polymorph.h"
- #include "blend_item.h"
- #include "castle.h"
- #include "passpod.h"
- #include "ani.h"
- #include "BattleArena.h"
- #include "over9refine.h"
- #include "horsename_manager.h"
- #include "pcbang.h"
- #include "MarkManager.h"
- #include "spam.h"
- #include "panama.h"
- #include "threeway_war.h"
- #include "auth_brazil.h"
- #include "DragonLair.h"
- #include "HackShield.h"
- #include "skill_power.h"
- #include "SpeedServer.h"
- #include "XTrapManager.h"
- #include "DragonSoul.h"
- #include "MeleyLair.h"
- #include <boost/bind.hpp>
- #ifndef __WIN32__
- #include "limit_time.h"
- #endif
- //#define __FILEMONITOR__
- #if defined (__FreeBSD__) && defined(__FILEMONITOR__)
- #include "FileMonitor_FreeBSD.h"
- #endif
- #ifdef __AUCTION__
- #include "auction_manager.h"
- #endif
- #ifndef __WIN32__
- #include <gtest/gtest.h>
- #endif
- #ifdef USE_STACKTRACE
- #include <execinfo.h>
- #endif
- // 윈도우에서 테스트할 때는 항상 서버키 체크
- #ifdef _WIN32
- //#define _USE_SERVER_KEY_
- #endif
- extern void WriteVersion();
- //extern const char * _malloc_options;
- #if defined(__FreeBSD__) && defined(DEBUG_ALLOC)
- extern void (*_malloc_message)(const char* p1, const char* p2, const char* p3, const char* p4);
- // FreeBSD _malloc_message replacement
- void WriteMallocMessage(const char* p1, const char* p2, const char* p3, const char* p4) {
- FILE* fp = ::fopen(DBGALLOC_LOG_FILENAME, "a");
- if (fp == NULL) {
- return;
- }
- ::fprintf(fp, "%s %s %s %s\n", p1, p2, p3, p4);
- ::fclose(fp);
- }
- #endif
- // TRAFFIC_PROFILER
- static const DWORD TRAFFIC_PROFILE_FLUSH_CYCLE = 3600; ///< TrafficProfiler 의 Flush cycle. 1시간 간격
- // END_OF_TRAFFIC_PROFILER
- // 게임과 연결되는 소켓
- volatile int num_events_called = 0;
- int max_bytes_written = 0;
- int current_bytes_written = 0;
- int total_bytes_written = 0;
- BYTE g_bLogLevel = 0;
- socket_t tcp_socket = 0;
- socket_t udp_socket = 0;
- socket_t p2p_socket = 0;
- LPFDWATCH main_fdw = NULL;
- int io_loop(LPFDWATCH fdw);
- int start(int argc, char **argv);
- int idle();
- void destroy();
- void test();
- enum EProfile
- {
- PROF_EVENT,
- PROF_CHR_UPDATE,
- PROF_IO,
- PROF_HEARTBEAT,
- PROF_MAX_NUM
- };
- static DWORD s_dwProfiler[PROF_MAX_NUM];
- int g_shutdown_disconnect_pulse;
- int g_shutdown_disconnect_force_pulse;
- int g_shutdown_core_pulse;
- bool g_bShutdown=false;
- extern int speed_server;
- #ifdef __AUCTION__
- extern int auction_server;
- #endif
- extern void CancelReloadSpamEvent();
- void ContinueOnFatalError()
- {
- #ifdef USE_STACKTRACE
- void* array[200];
- std::size_t size;
- char** symbols;
- size = backtrace(array, 200);
- symbols = backtrace_symbols(array, size);
- std::ostringstream oss;
- oss << std::endl;
- for (std::size_t i = 0; i < size; ++i) {
- oss << " Stack> " << symbols[i] << std::endl;
- }
- free(symbols);
- sys_err("FatalError on %s", oss.str().c_str());
- #else
- sys_err("FatalError");
- #endif
- }
- void ShutdownOnFatalError()
- {
- if (!g_bShutdown)
- {
- sys_err("ShutdownOnFatalError!!!!!!!!!!");
- {
- char buf[256];
- strlcpy(buf, LC_TEXT("서버에 치명적인 오류가 발생하여 자동으로 재부팅됩니다."), sizeof(buf));
- SendNotice(buf);
- strlcpy(buf, LC_TEXT("10초후 자동으로 접속이 종료되며,"), sizeof(buf));
- SendNotice(buf);
- strlcpy(buf, LC_TEXT("5분 후에 정상적으로 접속하실수 있습니다."), sizeof(buf));
- SendNotice(buf);
- }
- g_bShutdown = true;
- g_bNoMoreClient = true;
- g_shutdown_disconnect_pulse = thecore_pulse() + PASSES_PER_SEC(10);
- g_shutdown_disconnect_force_pulse = thecore_pulse() + PASSES_PER_SEC(20);
- g_shutdown_core_pulse = thecore_pulse() + PASSES_PER_SEC(30);
- }
- }
- namespace
- {
- struct SendDisconnectFunc
- {
- void operator () (LPDESC d)
- {
- if (d->GetCharacter())
- {
- if (d->GetCharacter()->GetGMLevel() == GM_PLAYER)
- d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "quit Shutdown(SendDisconnectFunc)");
- }
- }
- };
- struct DisconnectFunc
- {
- void operator () (LPDESC d)
- {
- if (d->GetType() == DESC_TYPE_CONNECTOR)
- return;
- if (d->IsPhase(PHASE_P2P))
- return;
- d->SetPhase(PHASE_CLOSE);
- }
- };
- }
- extern std::map<DWORD, CLoginSim *> g_sim; // first: AID
- extern std::map<DWORD, CLoginSim *> g_simByPID;
- extern std::vector<TPlayerTable> g_vec_save;
- unsigned int save_idx = 0;
- void heartbeat(LPHEART ht, int pulse)
- {
- DWORD t;
- t = get_dword_time();
- num_events_called += event_process(pulse);
- s_dwProfiler[PROF_EVENT] += (get_dword_time() - t);
- t = get_dword_time();
- // 1초마다
- if (!(pulse % ht->passes_per_sec))
- {
- #ifdef ENABLE_LIMIT_TIME
- if ((unsigned)get_global_time() >= GLOBAL_LIMIT_TIME)
- {
- g_bShutdown = true;
- }
- #endif
- if (g_bAuthServer && LC_IsBrazil() && !test_server)
- auth_brazil_log();
- if (!g_bAuthServer)
- {
- TPlayerCountPacket pack;
- pack.dwCount = DESC_MANAGER::instance().GetLocalUserCount();
- db_clientdesc->DBPacket(HEADER_GD_PLAYER_COUNT, 0, &pack, sizeof(TPlayerCountPacket));
- }
- else
- {
- DESC_MANAGER::instance().ProcessExpiredLoginKey();
- DBManager::instance().FlushBilling();
- /*
- if (!(pulse % (ht->passes_per_sec * 600)))
- DBManager::instance().CheckBilling();
- */
- }
- {
- int count = 0;
- itertype(g_sim) it = g_sim.begin();
- while (it != g_sim.end())
- {
- if (!it->second->IsCheck())
- {
- it->second->SendLogin();
- if (++count > 50)
- {
- sys_log(0, "FLUSH_SENT");
- break;
- }
- }
- it++;
- }
- if (save_idx < g_vec_save.size())
- {
- count = MIN(100, g_vec_save.size() - save_idx);
- for (int i = 0; i < count; ++i, ++save_idx)
- db_clientdesc->DBPacket(HEADER_GD_PLAYER_SAVE, 0, &g_vec_save[save_idx], sizeof(TPlayerTable));
- sys_log(0, "SAVE_FLUSH %d", count);
- }
- }
- }
- //
- // 25 PPS(Pulse per second) 라고 가정할 때
- //
- // 약 1.16초마다
- if (!(pulse % (passes_per_sec + 4)))
- CHARACTER_MANAGER::instance().ProcessDelayedSave();
- //4초 마다
- #if defined (__FreeBSD__) && defined(__FILEMONITOR__)
- if (!(pulse % (passes_per_sec * 5)))
- {
- FileMonitorFreeBSD::Instance().Update(pulse);
- }
- #endif
- // 약 5.08초마다
- if (!(pulse % (passes_per_sec * 5 + 2)))
- {
- ITEM_MANAGER::instance().Update();
- DESC_MANAGER::instance().UpdateLocalUserCount();
- }
- s_dwProfiler[PROF_HEARTBEAT] += (get_dword_time() - t);
- DBManager::instance().Process();
- AccountDB::instance().Process();
- CPVPManager::instance().Process();
- if (g_bShutdown)
- {
- if (thecore_pulse() > g_shutdown_disconnect_pulse)
- {
- const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
- std::for_each(c_set_desc.begin(), c_set_desc.end(), ::SendDisconnectFunc());
- g_shutdown_disconnect_pulse = INT_MAX;
- }
- else if (thecore_pulse() > g_shutdown_disconnect_force_pulse)
- {
- const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
- std::for_each(c_set_desc.begin(), c_set_desc.end(), ::DisconnectFunc());
- }
- else if (thecore_pulse() > g_shutdown_disconnect_force_pulse + PASSES_PER_SEC(5))
- {
- thecore_shutdown();
- }
- }
- }
- #ifdef _SERVER_CHECK_
- #ifdef _USE_SERVER_KEY_
- if (false == CheckServer::CheckIp(g_szPublicIP))
- {
- #ifdef _WIN32
- fprintf(stderr, "check ip failed\n");
- #endif
- g_isInvalidServer = true;
- }
- return;
- #endif
- if (LC_IsEurope() || test_server)
- return;
- // 브라질 ip
- if (strncmp (g_szPublicIP, "189.112.1", 9) == 0)
- {
- return;
- }
- // 캐나다 ip
- if (strncmp (g_szPublicIP, "74.200.6", 8) == 0)
- {
- return;
- }
- return;
- static const size_t CheckServerListSize = 1;
- static const char* CheckServerList[] = { "202.31.178.251"};
- static const int CheckServerPort = 7120;
- socket_t sockConnector = INVALID_SOCKET;
- for (size_t i = 0 ; i < CheckServerListSize ; i++)
- {
- sockConnector = socket_connect( CheckServerList[i], CheckServerPort );
- if (0 < sockConnector)
- break;
- }
- if (0 > sockConnector)
- {
- if (true != LC_IsEurope()) // 유럽은 접속을 하지 못하면 인증된 것으로 간주
- g_isInvalidServer = true;
- return;
- }
- char buf[256] = { 0, };
- socket_read(sockConnector, buf, sizeof(buf) - 1);
- sys_log(0, "recv[%s]", buf);
- if (strncmp(buf, "OK", 2) == 0)
- g_isInvalidServer = false;
- else if (strncmp(buf, "CK", 2) == 0)
- g_isInvalidServer = true;
- socket_close(sockConnector);
- #else
- #endif
- static void CleanUpForEarlyExit() {
- CancelReloadSpamEvent();
- }
- int main(int argc, char **argv)
- {
- #ifdef DEBUG_ALLOC
- DebugAllocator::StaticSetUp();
- #endif
- #ifndef __WIN32__
- // <Factor> start unit tests if option is set
- if ( argc > 1 )
- {
- if ( strcmp( argv[1], "unittest" ) == 0 )
- {
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
- }
- }
- #endif
- ilInit(); // DevIL Initialize
- WriteVersion();
- SECTREE_MANAGER sectree_manager;
- CHARACTER_MANAGER char_manager;
- ITEM_MANAGER item_manager;
- CShopManager shop_manager;
- CMobManager mob_manager;
- CMotionManager motion_manager;
- CPartyManager party_manager;
- CSkillManager skill_manager;
- CPVPManager pvp_manager;
- LZOManager lzo_manager;
- DBManager db_manager;
- AccountDB account_db;
- LogManager log_manager;
- MessengerManager messenger_manager;
- P2P_MANAGER p2p_manager;
- CGuildManager guild_manager;
- CGuildMarkManager mark_manager;
- CDungeonManager dungeon_manager;
- CRefineManager refine_manager;
- CBanwordManager banword_manager;
- CPrivManager priv_manager;
- CWarMapManager war_map_manager;
- building::CManager building_manager;
- CTargetManager target_manager;
- marriage::CManager marriage_manager;
- marriage::WeddingManager wedding_manager;
- CItemAddonManager item_addon_manager;
- CArenaManager arena_manager;
- COXEventManager OXEvent_manager;
- CMonarch Monarch;
- CHorseNameManager horsename_manager;
- CPCBangManager pcbang_manager;
- DESC_MANAGER desc_manager;
- TrafficProfiler trafficProfiler;
- CTableBySkill SkillPowerByLevel;
- CPolymorphUtils polymorph_utils;
- CProfiler profiler;
- CPasspod passpod;
- CBattleArena ba;
- COver9RefineManager o9r;
- SpamManager spam_mgr;
- CThreeWayWar threeway_war;
- CDragonLairManager dl_manager;
- CHackShieldManager HSManager;
- CXTrapManager XTManager;
- CSpeedServerManager SSManager;
- DSManager dsManager;
- #ifdef __AUCTION__
- AuctionManager auctionManager;
- #endif
- if (!start(argc, argv)) {
- #ifdef __MELEY_LAIR_DUNGEON__
- MeleyLair::CMgr MeleyLair_manager;
- #endif
- CleanUpForEarlyExit();
- return 0;
- }
- quest::CQuestManager quest_manager;
- if (!quest_manager.Initialize()) {
- CleanUpForEarlyExit();
- return 0;
- }
- MessengerManager::instance().Initialize();
- CGuildManager::instance().Initialize();
- fishing::Initialize();
- OXEvent_manager.Initialize();
- if (speed_server)
- CSpeedServerManager::instance().Initialize();
- Cube_init();
- Blend_Item_init();
- ani_init();
- PanamaLoad();
- #if defined(_WIN32) && defined(_USE_SERVER_KEY_)
- if (CheckServer::IsFail())
- {
- return 1;
- }
- #endif
- if ( g_bTrafficProfileOn )
- TrafficProfiler::instance().Initialize( TRAFFIC_PROFILE_FLUSH_CYCLE, "ProfileLog" );
- //if game server
- if (!g_bAuthServer)
- {
- //hackshield
- if (isHackShieldEnable)
- {
- if (!HSManager.Initialize())
- {
- fprintf(stderr, "Failed To Initialize HS");
- CleanUpForEarlyExit();
- return 0;
- }
- }
- //xtrap
- if(bXTrapEnabled)
- {
- if (!XTManager.LoadXTrapModule())
- {
- CleanUpForEarlyExit();
- return 0;
- }
- #if defined (__FreeBSD__) && defined(__FILEMONITOR__)
- //PFN_FileChangeListener pNotifyFunc = boost::bind( &CXTrapManager::NotifyMapFileChanged, CXTrapManager::instance(), _1 );
- PFN_FileChangeListener pNotifyFunc = &(CXTrapManager::NotifyMapFileChanged);
- const std::string strMap1Name = "map1.CS3";
- const std::string strMap2Name = "map2.CS3";
- FileMonitorFreeBSD::Instance().AddWatch( strMap1Name, pNotifyFunc );
- FileMonitorFreeBSD::Instance().AddWatch( strMap2Name, pNotifyFunc );
- #endif
- }
- #ifdef __MELEY_LAIR_DUNGEON__
- MeleyLair_manager.Initialize();
- #endif
- }
- // Client PackageCrypt
- //TODO : make it config
- const std::string strPackageCryptInfoDir = "package/";
- if( !desc_manager.LoadClientPackageCryptInfo( strPackageCryptInfoDir.c_str() ) )
- {
- sys_err("Failed to Load ClientPackageCryptInfo File(%s)", strPackageCryptInfoDir.c_str());
- }
- #if defined (__FreeBSD__) && defined(__FILEMONITOR__)
- PFN_FileChangeListener pPackageNotifyFunc = &(DESC_MANAGER::NotifyClientPackageFileChanged);
- //FileMonitorFreeBSD::Instance().AddWatch( strPackageCryptInfoName, pPackageNotifyFunc );
- #endif
- while (idle());
- sys_log(0, "<shutdown> Starting...");
- g_bShutdown = true;
- g_bNoMoreClient = true;
- if (g_bAuthServer)
- {
- DBManager::instance().FlushBilling(true);
- int iLimit = DBManager::instance().CountQuery() / 50;
- int i = 0;
- do
- {
- DWORD dwCount = DBManager::instance().CountQuery();
- sys_log(0, "Queries %u", dwCount);
- if (dwCount == 0)
- break;
- usleep(500000);
- if (++i >= iLimit)
- if (dwCount == DBManager::instance().CountQuery())
- break;
- } while (1);
- }
- sys_log(0, "<shutdown> Destroying CArenaManager...");
- arena_manager.Destroy();
- sys_log(0, "<shutdown> Destroying COXEventManager...");
- OXEvent_manager.Destroy();
- sys_log(0, "<shutdown> Disabling signal timer...");
- signal_timer_disable();
- sys_log(0, "<shutdown> Shutting down CHARACTER_MANAGER...");
- char_manager.GracefulShutdown();
- sys_log(0, "<shutdown> Shutting down ITEM_MANAGER...");
- item_manager.GracefulShutdown();
- sys_log(0, "<shutdown> Flushing db_clientdesc...");
- db_clientdesc->FlushOutput();
- sys_log(0, "<shutdown> Flushing p2p_manager...");
- p2p_manager.FlushOutput();
- sys_log(0, "<shutdown> Destroying CShopManager...");
- shop_manager.Destroy();
- sys_log(0, "<shutdown> Destroying CHARACTER_MANAGER...");
- char_manager.Destroy();
- sys_log(0, "<shutdown> Destroying ITEM_MANAGER...");
- item_manager.Destroy();
- sys_log(0, "<shutdown> Destroying DESC_MANAGER...");
- desc_manager.Destroy();
- sys_log(0, "<shutdown> Destroying quest::CQuestManager...");
- quest_manager.Destroy();
- sys_log(0, "<shutdown> Destroying building::CManager...");
- building_manager.Destroy();
- if (!g_bAuthServer)
- {
- if (isHackShieldEnable)
- {
- sys_log(0, "<shutdown> Releasing HackShield manager...");
- HSManager.Release();
- }
- }
- #ifdef __MELEY_LAIR_DUNGEON__
- sys_log(0, "<shutdown> Destroying MeleyLair_manager.");
- MeleyLair_manager.Destroy();
- #endif
- sys_log(0, "<shutdown> Flushing TrafficProfiler...");
- trafficProfiler.Flush();
- destroy();
- #ifdef DEBUG_ALLOC
- DebugAllocator::StaticTearDown();
- #endif
- return 1;
- }
- void usage()
- {
- printf("Option list\n"
- "-p <port> : bind port number (port must be over 1024)\n"
- "-l <level> : sets log level\n"
- "-v : log to stdout\n"
- "-r : do not load regen tables\n"
- "-t : traffic proflie on\n");
- }
- int start(int argc, char **argv)
- {
- std::string st_localeServiceName;
- bool bVerbose = false;
- char ch;
- //_malloc_options = "A";
- #if defined(__FreeBSD__) && defined(DEBUG_ALLOC)
- _malloc_message = WriteMallocMessage;
- #endif
- #ifdef ENABLE_LIMIT_TIME
- if ((unsigned)get_global_time() >= GLOBAL_LIMIT_TIME)
- {
- return 0;
- }
- #endif
- while ((ch = getopt(argc, argv, "npverltI")) != -1)
- {
- char* ep = NULL;
- switch (ch)
- {
- case 'I': // IP
- strlcpy(g_szPublicIP, argv[optind], sizeof(g_szPublicIP));
- printf("IP %s\n", g_szPublicIP);
- optind++;
- optreset = 1;
- break;
- case 'p': // port
- mother_port = strtol(argv[optind], &ep, 10);
- if (mother_port <= 1024)
- {
- usage();
- return 0;
- }
- printf("port %d\n", mother_port);
- optind++;
- optreset = 1;
- break;
- case 'l':
- {
- long l = strtol(argv[optind], &ep, 10);
- log_set_level(l);
- optind++;
- optreset = 1;
- }
- break;
- // LOCALE_SERVICE
- case 'n':
- {
- if (optind < argc)
- {
- st_localeServiceName = argv[optind++];
- optreset = 1;
- }
- }
- break;
- // END_OF_LOCALE_SERVICE
- case 'v': // verbose
- bVerbose = true;
- break;
- case 'r':
- g_bNoRegen = true;
- break;
- // TRAFFIC_PROFILER
- case 't':
- g_bTrafficProfileOn = true;
- break;
- // END_OF_TRAFFIC_PROFILER
- }
- }
- // LOCALE_SERVICE
- config_init(st_localeServiceName);
- // END_OF_LOCALE_SERVICE
- #ifdef __WIN32__
- // In Windows dev mode, "verbose" option is [on] by default.
- bVerbose = true;
- #endif
- if (!bVerbose)
- freopen("stdout", "a", stdout);
- bool is_thecore_initialized = thecore_init(25, heartbeat);
- if (!is_thecore_initialized)
- {
- fprintf(stderr, "Could not initialize thecore, check owner of pid, syslog\n");
- exit(0);
- }
- if (false == CThreeWayWar::instance().LoadSetting("forkedmapindex.txt"))
- {
- if (false == g_bAuthServer)
- {
- fprintf(stderr, "Could not Load ThreeWayWar Setting file");
- exit(0);
- }
- }
- signal_timer_disable();
- main_fdw = fdwatch_new(4096);
- if ((tcp_socket = socket_tcp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET)
- {
- perror("socket_tcp_bind: tcp_socket");
- return 0;
- }
- #ifndef __UDP_BLOCK__
- if ((udp_socket = socket_udp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET)
- {
- perror("socket_udp_bind: udp_socket");
- return 0;
- }
- #endif
- // if internal ip exists, p2p socket uses internal ip, if not use public ip
- //if ((p2p_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, p2p_port)) == INVALID_SOCKET)
- if ((p2p_socket = socket_tcp_bind(g_szPublicIP, p2p_port)) == INVALID_SOCKET)
- {
- perror("socket_tcp_bind: p2p_socket");
- return 0;
- }
- fdwatch_add_fd(main_fdw, tcp_socket, NULL, FDW_READ, false);
- #ifndef __UDP_BLOCK__
- fdwatch_add_fd(main_fdw, udp_socket, NULL, FDW_READ, false);
- #endif
- fdwatch_add_fd(main_fdw, p2p_socket, NULL, FDW_READ, false);
- db_clientdesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, db_addr, db_port, PHASE_DBCLIENT, true);
- if (!g_bAuthServer) {
- db_clientdesc->UpdateChannelStatus(0, true);
- }
- if (g_bAuthServer)
- {
- if (g_stAuthMasterIP.length() != 0)
- {
- fprintf(stderr, "SlaveAuth");
- g_pkAuthMasterDesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, g_stAuthMasterIP.c_str(), g_wAuthMasterPort, PHASE_P2P, true);
- P2P_MANAGER::instance().RegisterConnector(g_pkAuthMasterDesc);
- g_pkAuthMasterDesc->SetP2P(g_stAuthMasterIP.c_str(), g_wAuthMasterPort, g_bChannel);
- }
- else
- {
- fprintf(stderr, "MasterAuth %d", LC_GetLocalType());
- }
- }
- /* game server to teen server */
- else
- {
- if (teen_addr[0] && teen_port)
- g_TeenDesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, teen_addr, teen_port, PHASE_TEEN, true);
- extern unsigned int g_uiSpamBlockDuration;
- extern unsigned int g_uiSpamBlockScore;
- extern unsigned int g_uiSpamReloadCycle;
- sys_log(0, "SPAM_CONFIG: duration %u score %u reload cycle %u\n",
- g_uiSpamBlockDuration, g_uiSpamBlockScore, g_uiSpamReloadCycle);
- extern void LoadSpamDB();
- LoadSpamDB();
- }
- signal_timer_enable(30);
- return 1;
- }
- void destroy()
- {
- sys_log(0, "<shutdown> Canceling ReloadSpamEvent...");
- CancelReloadSpamEvent();
- sys_log(0, "<shutdown> regen_free()...");
- regen_free();
- sys_log(0, "<shutdown> Closing sockets...");
- socket_close(tcp_socket);
- #ifndef __UDP_BLOCK__
- socket_close(udp_socket);
- #endif
- socket_close(p2p_socket);
- sys_log(0, "<shutdown> fdwatch_delete()...");
- fdwatch_delete(main_fdw);
- sys_log(0, "<shutdown> event_destroy()...");
- event_destroy();
- sys_log(0, "<shutdown> CTextFileLoader::DestroySystem()...");
- CTextFileLoader::DestroySystem();
- sys_log(0, "<shutdown> thecore_destroy()...");
- thecore_destroy();
- }
- int idle()
- {
- static struct timeval pta = { 0, 0 };
- static int process_time_count = 0;
- struct timeval now;
- if (pta.tv_sec == 0)
- gettimeofday(&pta, (struct timezone *) 0);
- int passed_pulses;
- if (!(passed_pulses = thecore_idle()))
- return 0;
- assert(passed_pulses > 0);
- DWORD t;
- while (passed_pulses--) {
- heartbeat(thecore_heart, ++thecore_heart->pulse);
- // To reduce the possibility of abort() in checkpointing
- thecore_tick();
- }
- t = get_dword_time();
- CHARACTER_MANAGER::instance().Update(thecore_heart->pulse);
- db_clientdesc->Update(t);
- s_dwProfiler[PROF_CHR_UPDATE] += (get_dword_time() - t);
- t = get_dword_time();
- if (!io_loop(main_fdw)) return 0;
- s_dwProfiler[PROF_IO] += (get_dword_time() - t);
- log_rotate();
- gettimeofday(&now, (struct timezone *) 0);
- ++process_time_count;
- if (now.tv_sec - pta.tv_sec > 0)
- {
- pt_log("[%3d] event %5d/%-5d idle %-4ld event %-4ld heartbeat %-4ld I/O %-4ld chrUpate %-4ld | WRITE: %-7d | PULSE: %d",
- process_time_count,
- num_events_called,
- event_count(),
- thecore_profiler[PF_IDLE],
- s_dwProfiler[PROF_EVENT],
- s_dwProfiler[PROF_HEARTBEAT],
- s_dwProfiler[PROF_IO],
- s_dwProfiler[PROF_CHR_UPDATE],
- current_bytes_written,
- thecore_pulse());
- num_events_called = 0;
- current_bytes_written = 0;
- process_time_count = 0;
- gettimeofday(&pta, (struct timezone *) 0);
- memset(&thecore_profiler[0], 0, sizeof(thecore_profiler));
- memset(&s_dwProfiler[0], 0, sizeof(s_dwProfiler));
- }
- #ifdef _USE_SERVER_KEY_
- #endif
- #ifdef __WIN32__
- if (_kbhit()) {
- int c = _getch();
- switch (c) {
- case 0x1b: // Esc
- return 0; // shutdown
- break;
- default:
- break;
- }
- }
- #endif
- return 1;
- }
- int io_loop(LPFDWATCH fdw)
- {
- LPDESC d;
- int num_events, event_idx;
- DESC_MANAGER::instance().DestroyClosed(); // PHASE_CLOSE인 접속들을 끊어준다.
- DESC_MANAGER::instance().TryConnect();
- if ((num_events = fdwatch(fdw, 0)) < 0)
- return 0;
- for (event_idx = 0; event_idx < num_events; ++event_idx)
- {
- d = (LPDESC) fdwatch_get_client_data(fdw, event_idx);
- if (!d)
- {
- if (FDW_READ == fdwatch_check_event(fdw, tcp_socket, event_idx))
- {
- DESC_MANAGER::instance().AcceptDesc(fdw, tcp_socket);
- fdwatch_clear_event(fdw, tcp_socket, event_idx);
- }
- else if (FDW_READ == fdwatch_check_event(fdw, p2p_socket, event_idx))
- {
- DESC_MANAGER::instance().AcceptP2PDesc(fdw, p2p_socket);
- fdwatch_clear_event(fdw, p2p_socket, event_idx);
- }
- /*
- else if (FDW_READ == fdwatch_check_event(fdw, udp_socket, event_idx))
- {
- char buf[256];
- struct sockaddr_in cliaddr;
- socklen_t socklen = sizeof(cliaddr);
- int iBytesRead;
- if ((iBytesRead = socket_udp_read(udp_socket, buf, 256, (struct sockaddr *) &cliaddr, &socklen)) > 0)
- {
- static CInputUDP s_inputUDP;
- s_inputUDP.SetSockAddr(cliaddr);
- int iBytesProceed;
- s_inputUDP.Process(NULL, buf, iBytesRead, iBytesProceed);
- }
- fdwatch_clear_event(fdw, udp_socket, event_idx);
- }
- */
- continue;
- }
- int iRet = fdwatch_check_event(fdw, d->GetSocket(), event_idx);
- switch (iRet)
- {
- case FDW_READ:
- if (db_clientdesc == d)
- {
- int size = d->ProcessInput();
- if (size)
- sys_log(1, "DB_BYTES_READ: %d", size);
- if (size < 0)
- {
- d->SetPhase(PHASE_CLOSE);
- }
- }
- else if (d->ProcessInput() < 0)
- {
- d->SetPhase(PHASE_CLOSE);
- }
- break;
- case FDW_WRITE:
- if (db_clientdesc == d)
- {
- int buf_size = buffer_size(d->GetOutputBuffer());
- int sock_buf_size = fdwatch_get_buffer_size(fdw, d->GetSocket());
- int ret = d->ProcessOutput();
- if (ret < 0)
- {
- d->SetPhase(PHASE_CLOSE);
- }
- if (buf_size)
- sys_log(1, "DB_BYTES_WRITE: size %d sock_buf %d ret %d", buf_size, sock_buf_size, ret);
- }
- else if (d->ProcessOutput() < 0)
- {
- d->SetPhase(PHASE_CLOSE);
- }
- else if (g_TeenDesc==d)
- {
- int buf_size = buffer_size(d->GetOutputBuffer());
- int sock_buf_size = fdwatch_get_buffer_size(fdw, d->GetSocket());
- int ret = d->ProcessOutput();
- if (ret < 0)
- {
- d->SetPhase(PHASE_CLOSE);
- }
- if (buf_size)
- sys_log(0, "TEEN::Send(size %d sock_buf %d ret %d)", buf_size, sock_buf_size, ret);
- }
- break;
- case FDW_EOF:
- {
- d->SetPhase(PHASE_CLOSE);
- }
- break;
- default:
- sys_err("fdwatch_check_event returned unknown %d", iRet);
- d->SetPhase(PHASE_CLOSE);
- break;
- }
- }
- return 1;
- }
Vlt hat ja einer von euch ne Idee wie es klappen könnte
Ps.: Im Tutorial steht ja
// 1) Search:
#include "check_server.h"
// 2) After this make a new line and paste:
#ifdef __MELEY_LAIR_DUNGEON__
#include "MeleyLair.h"
#endifDa ich aber den Eintrag (bzw auch die Datei) nicht besitze hab ich es einfach unter
#include "DragonSoul.h"
eingetragen
-
Meine Alten Files
Weis nicht ob da irgendwelche Fixes schon mit dabei sind beim Release von mir gabs sehr viele Fehler und ich hab da paar Fixes noch raus gehauen. Müsste man testen ob die einwandfrei funktionieren allerdings ist mit diesen Files bei dem Heutigen Stand eh nichts mehr mit anzufangen
-
Du hast in der RaceData.h folgenden Abschnitt
Er ladet dir aber das #ifdef nicht somit ladet er dir auch PART_SASH nicht
2 Lösungen
1.) Entferne das #ifdef ENABLE_SASH_SYSTEM und das #endif
2.) Füge unter
Bedenke bei dir kann es anders lauten als ENABLE_SASH aber das Prinzip warum er es nicht laden kann bleibt gleich
-
wärw top wenn du die Edits auflisten könntest die man noch machen muss, damit sich das system nichtmehr mit dem verbuggten von kori beißt. Bei mir ist auch das Problem das eine stelle fehlt im Source wo etwas hin sollte. Die stelle wo es hin soll existiert einfach nicht deswegen musste ich es rauslassen.
Es handelt sich dabei um diesen teil:- Sucht nach:
- m_swordRefineEffectRight = 0;
- m_swordRefineEffectLeft = 0;
- m_armorRefineEffect = 0;
- darunter:
- #ifdef ENABLE_SHINING_SYSTEM
- __ClearWeaponShiningEffect(false);
- __ClearArmorShiningEffect(false);
- #endif
Ich nutze übrigens deinen source, Nero.
Bei mir sieht das so aus in der InstanceBase.cpp
Code- // Moving by mouse
- m_isTextTail = FALSE;
- m_isGoing = FALSE;
- NEW_SetSrcPixelPosition(TPixelPosition(0, 0, 0));
- NEW_SetDstPixelPosition(TPixelPosition(0, 0, 0));
- m_kPPosDust = TPixelPosition(0, 0, 0);
- m_kQue_kCmdNew.clear();
- m_dwLastComboIndex = 0;
- m_swordRefineEffectRight = 0;
- m_swordRefineEffectLeft = 0;
- m_armorRefineEffect = 0;
- #ifdef ENABLE_SASH_SYSTEM
- m_dwSashEffect = 0;
- #endif
- #ifdef ENABLE_SHINING_SYSTEM
- __ClearWeaponShiningEffect(false);
- __ClearArmorShiningEffect(false);
- #endif
und bei mir klappt das ohne Probs kannst mal schauen vlt kannst da was mit anfangen -
Kein Richtiger DEV wird sich jemals bei dir bewerben wenn du nicht mal einen Webspace mit eigener Domain kaufen willst und komm nicht mit der Aussage die kauf ich wen Spenden kommen den der Webspace + ne Ordentliche HP + Domain müssen vor Serverstart da sein. Also alles in allem ein 1 - 2 Monats Server um den Kleinkindern das Geld aus der Tasche zu ziehen und fertig.