PDA

View Full Version : [AHTT2] Ai biết fix lỗi này không chỉ với



supergunny677
10-03-15, 06:28 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

BanBanhQuay
11-03-15, 12:46 PM
Vào server của game.Mở file commonconfig.xml
sửa các dòng sau


<DBIndexCreateRole>
<Index>1</Index>
</DBIndexCreateRole>
<DBRole>
<Index>1</Index>
..........
</DBRole>
<is_micro_pc_open>1</is_micro_pc_open>


thành



<DBIndexCreateRole>
<Index>0</Index>
</DBIndexCreateRole>
<DBRole>
<Index>0</Index>
..........
</DBRole>
<is_micro_pc_open>0</is_micro_pc_open>


Một cách nữa là build lại server.copy và paste lại file world.cpp của gameworld


#include "common/platform/system.h"
#include "world.h"
#include "ilogmodule.h"
#include "gamedef.h"
#include "utility/configpath.h"
#include "internalcomm.h"
#include "gamelog.h"
#include "servercommon/internalprotocal/lgprotocal.h"
#include "servercommon/internalprotocal/wgprotocal.h"
#include "servercommon/internalprotocal/gglobalprotocal.h"
#include "servercommon/serverconfig/serverconfigpool.h"
#include "common/memory/memmonitor.h"
#include "gamecommon.h"
#include "monster/monsterpool.h"
#include "task/taskpool.h"

#include "scene/bossrefresher/bossrefresher.hpp"

#include "scene/asynreqregister/asynreqregister.hpp"
#include "other/monitor/systemmonitor.hpp"
#include "scene/teamequipfbmanager/teamequipfbmanager.hpp"

#include "scene/guildshadow/guildshadow.hpp"
#include "scene/activityshadow/activityshadow.hpp"
#include "scene/campshadow/campshadow.hpp"
#include "other/worldevent/worldeventshadow.hpp"
#include "other/worldboss/worldbossshadow.hpp"
#include "other/monsterdropsum/monsterdropsum.hpp"
#include "scene/marryshadow/marryshadow.h"
#include "script/scriptmanager.hpp"

static World *world_instance = NULL;

World::World(ILogModule *log,
IConfigModule *config,
IGameModule *game,
INetworkModule *network,
INetworkModule *internal_network,
IClockModule *clock,
IRMIModule *rmi_module,
ITimerModule *timer,
IFileWriteModule *filewrite,
int total_server,
int server_index)
: m_game_time(0), m_scene_manager(), m_total_server(total_server), m_server_index(server_index), m_listen_port(0), m_chat_server_netid(-1),
m_global_server_netid(-1), m_login_server_netid(-1)
{
m_scene_manager.SetWorld(this);

m_network = network;
EngineAdapter::Instance().Init(log, config, game, network, clock, rmi_module, timer, filewrite);

// 获取日志生成目录
std::string log_dir = "log/";
EngineAdapter::Instance().ConfigSyncValue(ROOT/"LogDir", &log_dir, log_dir);
if (log_dir[log_dir.length() - 1] != '/')
{
log_dir += '/';
}

int open_console_log = 0;
EngineAdapter::Instance().ConfigSyncValue(ROOT/"OpenConsoleLog", &open_console_log, open_console_log);

gamelog::LogInit(log, log_dir, 0 != open_console_log, m_server_index);

InternalComm::Instance().Init(internal_network);

world_instance = this;
}

World::~World()
{
}

World * World::GetInstWorld()
{
return world_instance;
}

bool World::Init()
{
gamelog::g_log_world.print(LL_MAINTANCE, "Game Global Init.");

gamecommon::GlobalInit();

gamelog::g_log_world.print(LL_MAINTANCE, "World Init.");

return true;
}

class MsgMoniterTimer : public ITimerCallback
{
int interval_s;

public:
MsgMoniterTimer(int i):interval_s(i) {}

virtual void OnTimer()
{
static char buff[1024 * 10];

memmonitor::PrintDyMemInfo(buff);

gamelog::g_log_msgmoniter.print(LL_INFO, buff);

EngineAdapter::Instance().CreateTimerSecond(interv al_s, new MsgMoniterTimer(interval_s));
}

virtual void Free() { delete this; }
};

bool World::Start(bool check_res_mode, int total_server, int server_index)
{
m_local_ip = "127.0.0.1";
m_listen_port = 7777;
EngineAdapter::Instance().ConfigSyncValue(ROOT/"World"/"GameServer"/"Index", &m_server_index, m_server_index);
EngineAdapter::Instance().ConfigSyncValue(ROOT/"World"/"GameServer"/"LocalIP", &m_local_ip, m_local_ip);
EngineAdapter::Instance().ConfigSyncValue(ROOT/"World"/"GameServer"/"ListenPort", &m_listen_port, m_listen_port);
m_total_server = total_server; m_server_index = server_index;
m_listen_port += server_index; // 监听端口递增
EngineAdapter::Instance().m_server_index = m_server_index; // 使用命令行参数的

// 获取配置目录
std::string config_dir = "../config";
EngineAdapter::Instance().ConfigSyncValue(ROOT/"ConfigDir", &config_dir, config_dir);
if (config_dir[config_dir.length() - 1] != '/')
{
config_dir += '/';
}

// 加载所有服务器配置
char err_info[1024]={0};
if(!ServerConfigPool::Instance().Init(config_dir, err_info))
{
gamelog::g_log_world.printf(LL_ERROR, err_info);
gamelog::g_log_world.printf(LL_ERROR, "World On INIT, ServerConfigPool::Init return FALSE.");
return false;
}
gamelog::g_log_world.printf(LL_INFO, "World On INIT, ServerConfigPool::Init Success.");

InternalComm::Instance().SetSesstionKeyBase(Server ConfigPool::Instance().common_config.sessionkey);

if (!check_res_mode)
{
// 连接聊天服务器 聊天服务器一定要先初始化 不然在创建场景的时候向聊天频道注� �时会出错
if (!ConnectToChatServer())
{
return false;
}
}

if (!InitGameWorld(config_dir)) // 读配置 初始化场景
{
return false;
}

if (check_res_mode) // 资源检查模式
{
gamelog::g_log_world.printf(LL_MAINTANCE, "【Resource Check Success.】");
return true;
}

/*std::string lua_dir = "../lua/gameworld/";
std::string lua_err;
if (!ScriptManager::Instance().Init(lua_dir, "luamanager.xml", &lua_err))
{
gamelog::g_log_world.printf(LL_MAINTANCE, "ScriptManager.Init Return Fail! Error At:%s", lua_err.c_str());
return false;
}*/

if (!ConnectToDB()) // 连接数据存取服务器
{
return false;
}

// 连接到全局服务器,必须在ListenForGatew ay之后,因为用到m_server_index
if (!ConnectToGlobalServer())
{
return false;
}

// 连接登陆服务器
if (!ConnectToLoginServer())
{
return false;
}

// 为gateway监听
if (!ListenForGateway())
{
return false;
}

gamelog::g_log_world.printf(LL_MAINTANCE, "World[total_server:%d server_index:%d] Start.", m_total_server, m_server_index);
m_game_time = EngineAdapter::Instance().GetGameTime();

static const int MSG_MONITER_INTERVAL_S = 60;
EngineAdapter::Instance().CreateTimerSecond(MSG_MO NITER_INTERVAL_S, new MsgMoniterTimer(MSG_MONITER_INTERVAL_S));

return true;
}

void World::Update()
{
//unsigned long beg_time = PITime();

unsigned long now = EngineAdapter::Instance().GetGameTime();

unsigned long interval = now - m_game_time;

m_scene_manager.Update(interval);
ActivityShadow::Instance().Update(interval);
SystemMonitor::Instance().Update(interval);
TeamEquipFBManager::Instance().Update(interval);
WorldEventShadow::Instance().GetActivity()->Update(interval);
WorldBossShadow::Instance().Update(interval);
GuildShadow::Instance().Update(interval);
MonsterDropSum::Instance().Update(interval);
CampShadow::Instance().Update(interval);
MarryShadow::Instance().Update(interval);

m_game_time = now;

/*if (m_game_time - m_begin_time> 1000)
{
gamelog::g_log_world.printf(LL_DEBUG, "total:%d pc:%d(%d) ec:%d(%d) lc:%d(%d)", gamestat::g_game_stat.user_packet_count,
gamestat::g_game_stat.sync_pos_count, gamestat::g_game_stat.sync_pos_packege_count,
gamestat::g_game_stat.enter_count, gamestat::g_game_stat.enter_packege_count,
gamestat::g_game_stat.leave_count, gamestat::g_game_stat.leave_packege_count);
m_begin_time = m_game_time;
}*/

//gamelog::g_log_world.printf(LL_DEBUG, "World Update cast %d ms.", PITime() - beg_time);
}

void World::Stop()
{
m_scene_manager.LogoutAllRole();

//for (int i = 0; i < (int)m_db_rmi_session_list.size(); ++i)
//{
// EngineAdapter::Instance().RMICloseSession(m_db_rmi _session_list[i]);
//}

gamelog::g_log_world.print(LL_MAINTANCE, "World Stop.");
}

void World::Release()
{
m_scene_manager.Release();
gamelog::g_log_world.print(LL_MAINTANCE, "World Release.");
}

void World::OnAccept(Port listen_port, NetID netid, IP ip, Port port)
{
m_gateway_set.insert(netid);
}

void World::OnRecv(NetID netid, const char *data, int length)
{
wgprotocal::MessageHeader *header = (wgprotocal::MessageHeader*)data;

switch (header->msg_type)
{
case wgprotocal::MT_NET_RECV_MSG:
OnRecvMsg(netid, data, length);
break;
case wgprotocal::MT_NET_DISCONNECT_NOTICE:
OnNetDisconnect(netid, data);
break;
default:
break;
}
}

void World::OnRecvMsg(NetID netid, const char *data, int length)
{
wgprotocal::WGNetRecvMsg *nrm = (wgprotocal::WGNetRecvMsg*)data;
GSNetID idtmp((unsigned short)(netid), (unsigned short)(nrm->header.netid));
m_scene_manager.OnRecv(idtmp, data + sizeof(wgprotocal::WGNetRecvMsg), length - sizeof(wgprotocal::WGNetRecvMsg));
}

void World::OnNetDisconnect(NetID netid, const char *data)
{
wgprotocal::WGNetDisconnect *nd = (wgprotocal::WGNetDisconnect*)data;

GSNetID idtmp((unsigned short)(netid), (unsigned short)(nd->header.netid));
m_scene_manager.OnDisconnect(idtmp);

AsynReqRegister::Instance().OnNetidDisconnect(idtm p);
}

void World::OnDisconnect(NetID netid)
{
m_scene_manager.OnGateWayDisconnect(netid);
m_gateway_set.erase(netid);

if (m_gateway_set.empty()) // 所有的gateway断开时候保存所有世界相� ��的信息
{
}
}

void World::OnInternalAccept(Port listen_port, NetID netid, IP ip, Port port)
{
}

void World::OnInternalRecv(NetID netid, const char *data, int length)
{
if (netid == m_login_server_netid)
{
// 登陆服务器来消息
lgprotocal::MessageHeader *header = (lgprotocal::MessageHeader*)data;
switch (header->msg_type)
{
case lgprotocal::MT_LG_REGISTER_GS:
OnLGRegisterGS(data);
break;
case lgprotocal::MT_LG_UNREGISTER_GS:
OnLGUnRegisterGS(data);
break;
default:
break;
}
return;
}

if (netid == m_global_server_netid) // 全局服务器来消息
{
m_scene_manager.OnGlobalRecv(data, length);
}
else if (netid == m_chat_server_netid)
{
m_scene_manager.OnChatServerRecv(data, length);
}
}

void World::OnInternalDisconnect(NetID netid)
{
if (netid == InternalComm::Instance().m_login_server_id)
{
InternalComm::Instance().m_login_server_id = -1;

// 启动重连机制
ReConnectToLogin();
}

gamelog::g_log_world.printf(LL_MAINTANCE, "OnInternalDisconnect: netid[%d].", netid);
}

void World::ReConnectToLogin()
{
std::string login_server_ip = ServerConfigPool::Instance().common_config.ipconfi gs.login_server_addr.inner_connect_addr.server_ip;
Port login_server_port = ServerConfigPool::Instance().common_config.ipconfi gs.login_server_addr.inner_connect_addr.for_gamese rver.port;

int handle = -1;
bool ret = InternalComm::Instance().NetConnectAsyn(login_serv er_ip.c_str(), login_server_port, &handle, 1000);
if (ret)
{
InternalComm::Instance().m_reconnet_login_handle = handle;
}
else
{
// log
}
}

bool World::RegisterToLogin()
{
lgprotocal::GLRegisterGS rgs;
STRNCPY(rgs.ip, m_local_ip.c_str(), sizeof(rgs.ip));
rgs.index = m_server_index;
rgs.port = m_listen_port;
rgs.scene_count = m_scene_manager.GetSceneList(rgs.scene_list, MAX_SCENE_LIST_NUM);
return InternalComm::Instance().NetSend(InternalComm::Ins tance().m_login_server_id, (const char *)&rgs, sizeof(lgprotocal::GLRegisterGS));
}

void World::OnLGRegisterGS(const char *msg)
{
lgprotocal::LGRegisterGS *rgs = (lgprotocal::LGRegisterGS*)msg;

if (rgs->index == m_server_index) return; // 把本地的去掉 只记录别的gs

for (int i = 0; i < rgs->scene_count && i < MAX_SCENE_LIST_NUM; ++i)
{
m_scene_manager.AddGS(rgs->scene_list[i], rgs->index);
}
}

void World::OnLGUnRegisterGS(const char *msg)
{
lgprotocal::LGUnRegisterGS *urgs = (lgprotocal::LGUnRegisterGS*)msg;

for (int i = 0; i < urgs->scene_count && i < MAX_SCENE_LIST_NUM; ++i)
{
m_scene_manager.DeleteGS(urgs->scene_list[i]);
}
}

bool World::SendToAllGateway(const char *msg, int length)
{
bool ret = true;

for (GateWaySet::iterator i = m_gateway_set.begin(); i != m_gateway_set.end(); ++i)
{
ret &= EngineAdapter::Instance().NetSendAll(*i, msg, length);
}

return ret;
}

supergunny677
11-03-15, 01:19 PM
Files commomconfig.xml
nó có sẳn cái này rùi


<DBIndexCreateRole>
<Index>0</Index>
</DBIndexCreateRole>
<DBRole>
<Index>0</Index>
..........
</DBRole>
<is_micro_pc_open>0</is_micro_pc_open>

Cách 2 không có source sao build được bạn chỉ với. bản ver 2 bị cái này

BanBanhQuay
11-03-15, 02:34 PM
Files commomconfig.xml
nó có sẳn cái này rùi


<DBIndexCreateRole>
<Index>0</Index>
</DBIndexCreateRole>
<DBRole>
<Index>0</Index>
..........
</DBRole>
<is_micro_pc_open>0</is_micro_pc_open>

Cách 2 không có source sao build được bạn chỉ với. bản ver 2 bị cái này

Nếu như bạn nói file common ko có dính type 1 thì bạn vào server\debug\serverconfig.xml
sửa lại thành như sau


<DataAccessServer>
<Type>0</Type>
<Index>0</Index>
</DataAccessServer>


Nếu vẫn bị thì cài lại bộ visual c++2005 ->2010 xem.Nếu không được có thể team view mình xem

supergunny677
11-03-15, 02:52 PM
Nếu như bạn nói file common ko có dính type 1 thì bạn vào server\debug\serverconfig.xml
sửa lại thành như sau


<DataAccessServer>
<Type>0</Type>
<Index>0</Index>
</DataAccessServer>


Nếu vẫn bị thì cài lại bộ visual c++2005 ->2010 xem.Nếu không được có thể team view mình xem

Có online yahoo hay face book ko để mình pm

supergunny677
14-03-15, 10:22 PM
upppppppppppppppppppppppppppppppppppppppppppppppp

sgamer
14-03-15, 10:32 PM
upppppppppppppppppppppppppppppppppppppppppppppppp
Cái hình pic 1 bị lỗi ai xem được mà giúp

supergunny677
15-03-15, 12:04 AM
Cái hình pic 1 bị lỗi ai xem được mà giúp

Chạy tầm 3h > 4h thì hiện lỗi đó và tự đóng files gameworld.exe

BanBanhQuay
15-03-15, 12:45 AM
Chạy tầm 3h > 4h thì hiện lỗi đó và tự đóng files gameworld.exe

Tưởng mới chạy bị thế.Hóa ra chạy 3-4h sau mới bị.build lại cái server cho nhanh;))

choihetminh
15-03-15, 04:58 AM
Chạy tầm 3h > 4h thì hiện lỗi đó và tự đóng files gameworld.exe

Có trường hợp thành viên đổi tên nó cũng bị đóng gameworld

supergunny677
16-03-15, 12:54 AM
Tưởng mới chạy bị thế.Hóa ra chạy 3-4h sau mới bị.build lại cái server cho nhanh;))
Build lại như nào z ông ? ông có thể giúp đỡ k ?