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
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 ?
Powered by vBulletin® Version 4.2.0 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.