⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rajasystem.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "..\stdafx.h"
#include "DefaultHeader.h"

#define __RAJASYSTEM_H__
#include "RajaSystem.h"

#include <MMSystem.h>//010614 lsw
#include "Kein_Item.h"
#include "OP_Magic.h"
#include "SealStone.h" // 001209 KHS
#include "../LowerLayers/MyLog.h"
#include "UserManager.h"

int g_NoPkMode = false;  //021014 lsw


bool g_block_attack = false;//020821 lsw
bool g_block_magic	= false;//020821 lsw
bool g_block_move	= false;//020821 lsw
bool g_block_steal	= false;//020821 lsw
bool g_stop_please_give_life;

bool g_accelator_user_closeconnection;

char	GameServerDataPath[ FILENAME_MAX];

extern void SendViewTypeChange( int, int );
extern int initNPCGenerationTable(void);
extern CHARLIST* CheckServerId(WORD id);
extern CHARLIST* CheckServerName(const char* szName);// kyo 
extern CHARLIST* CheckNpcId(short int cn);


void SetGlobalBlockValues()
{
	g_NoPkMode				=	((::GetPrivateProfileInt( "Option", "NeverPK",		0, MAP_SERVER_INI_ ))?true:false);
	g_block_attack			=	((::GetPrivateProfileInt( "Option", "BlockAttack",	0, MAP_SERVER_INI_ ))?true:false);	
	g_block_magic			=	((::GetPrivateProfileInt( "Option", "BlockMagic",	0, MAP_SERVER_INI_ ))?true:false);
	g_block_move			=	((::GetPrivateProfileInt( "Option", "BlockMove",	0, MAP_SERVER_INI_ ))?true:false);
	g_block_steal			=	((::GetPrivateProfileInt( "Option", "BlockSkill",	0, MAP_SERVER_INI_ ))?true:false);
	g_stop_please_give_life =	((::GetPrivateProfileInt( "Option", "StopGiveLife",	0, MAP_SERVER_INI_ ))?true:false);
}

// ------------------------------------------------------------------------------------------------------------------------------
// 扁  瓷 : 霸烙辑滚狼 檬扁拳甫 困茄 Init拳老阑 佬绢甸牢促. 
//            捞拳老篮 角青叼泛配府俊 乐绢具 茄促. 
// 牢  磊 : 'dargon.ini'
// 搬  苞 : 己傍 return 1;
//			酵菩 reutrn < 0 :
// ------------------------------------------------------------------------------------------------------------------------------
int InitGameMakeModeSetting( char *filename )
{
	GetPrivateProfileString( "network", "path", "", GameServerDataPath, sizeof( GameServerDataPath ), filename );
	if( GameServerDataPath[0] == 0 )
	{
		return(-1);
	}

	GetPrivateProfileString( "network", "mapname", "", MapName, sizeof( MapName), filename );
	if( MapName[0] == 0 )
	{
		return(-1);
	}
	CharUpper( MapName );
	SetGlobalBlockValues();

	// 030919 HK YGI
	extern void LoadAIConfig();
	LoadAIConfig();

	return 1;
}	
	
void SaveGameServerStatus( void )
{	
	FILE *fp = fopen( "GameServer.Sav", "wb" );
	if( fp == NULL ) return; 
	
	fwrite( &g_curr_time, sizeof( g_curr_time ), 1, fp );
	fwrite( &CurrentNPCNo, sizeof( CurrentNPCNo ), 1, fp );
	
	fwrite( NPCList, sizeof( CHARLIST ), MAX_NPC_LIST, fp );
	fwrite( ItemList, sizeof( ITEMLIST ), MAX_ITEM_LIST, fp );
	
	fwrite( NPCgeneratePosition,  sizeof( sNPCgeneratePosition ), MAX_GENERATE_POSITION_, fp );
	fwrite( &NPCgeneratePositionMax, sizeof( int ), 1, fp );

	// 001209 KHS
	fwrite( NationRelation, sizeof( t_NationRelation ) , MAX_NATION * MAX_NATION, fp );
	
	fclose(fp);
}	
	
void LoadGameServerStatus( void )
{	
	DWORD time; 
	int i;
	
	FILE *fp = fopen( "GameServer.sav","rb" );
	if( fp == NULL ) return;


	int usingsaveddata = GetPrivateProfileInt( "Option", "UsingSavedMapServerStatus",	0, MAP_SERVER_INI_ );

	if( usingsaveddata )
	{
		if( YesOrNo( "Load the last MAPSERVER status( Using 'GameServerData.sav' ) ?", "Load" ) == IDYES )
		{
		}
		else
		{	
			fclose(fp);
			return;
		}
	}
	else return;

	fread( &time, sizeof( g_curr_time ), 1, fp );
	fread( &CurrentNPCNo, sizeof( CurrentNPCNo ), 1, fp );
	fread( NPCList, sizeof( CHARLIST ), MAX_NPC_LIST, fp );
	for( i = 0 ; i < MAX_NPC_LIST ; i ++)
	{
	}
	
	fread( ItemList, sizeof( ITEMLIST ), MAX_ITEM_LIST, fp );
	for( i = 0 ; i < MAX_ITEM_LIST ; i ++)
	{	
	}		
	
	fread( NPCgeneratePosition,  sizeof( sNPCgeneratePosition ), MAX_GENERATE_POSITION_, fp );
	fread( &NPCgeneratePositionMax, sizeof( int ), 1, fp );

	// 001209 KHS
	fread( NationRelation, sizeof( t_NationRelation ) , MAX_NATION * MAX_NATION, fp );

	fclose(fp);
}			

/*----------------------------------------------------------------------------------------------------------
// 扁  瓷 : 某腐磐狼 磊悼 Update 磊悼 Upate ぞ
			15盒 付促 历厘.. 
			饭骇捞 官差芭唱 Exp俊 函拳啊 乐栏搁 历厘茄促. 
// 牢  磊 : 绝娇 
// 搬苞蔼 : 诀娇 
----------------------------------------------------------------------------------------------------------*/
// 010301 khs    15MIN -> 20MIN...
extern void UpdateCharacterData(t_connection c[], int cn, bool bDirect = false);

void CharacterAutoUpdate()
{	//< CSD-CN-031213
	return;

	static DWORD time;
	
	if (g_curr_time - time > 60)
	{
		time = g_curr_time;
	}
	else
	{
		return;
	}
					
	CUserManager::HASH_USER mpUser = g_pUserManager->GetUserSet();

	for (CUserManager::ITOR_USER i = mpUser.begin(); i != mpUser.end(); ++i)
	{
		const int idUser = i->second;
		CHARLIST* pUser = CheckServerId(idUser);
		
		if (pUser != NULL)
		{
			if (g_curr_time - pUser->timetoupdate > 1200) // 20盒. 
			{	
				pUser->timetoupdate = g_curr_time;
				UpdateCharacterData(connections, idUser);
			}	
		}
	}		
}	//> CSD-CN-031213

void SendHowManyInMap(short how)
{				
	t_packet p;	
	p.h.header.type = CMD_HOW_MANY_IN_MAP;
	p.h.header.size = sizeof(t_how_many_in_map);
	strcpy(p.u.how_many_in_map.map, MapName);
	p.u.how_many_in_map.how = how;
	QueuePacket(connections, DB_DEMON, &p, 1);
}				

extern CHARLIST* CheckServerId(WORD id);
extern CHARLIST* CheckServerName(const char* szName);// kyo 

void RecvBlockAttack( short int cn, bool flag )
{
	if( !CheckServerId( cn ) ) return;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "block attack on/off" );
	g_block_attack = flag;
}
void RecvBlockMove( short int cn, bool flag )
{
	if( !CheckServerId( cn ) ) return;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "block move on/off" );
	g_block_move = flag;
}
void RecvBlockMagic( short int cn, bool flag )
{
	if( !CheckServerId( cn ) ) return;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "block magic on/off" );
	g_block_magic = flag;
}
void RecvBlockGiveLife( short int cn, bool flag )
{
	if( !CheckServerId( cn ) ) return;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "block give life on/off" );
	g_stop_please_give_life = flag;
}
void RecvAbsoluteLogOut( short int cn, short id )
{
	if( !CheckServerId( cn ) ) return;
	if( !CheckServerId( id ) ) return;

	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "absolute LogOut" );
	closeconnection( connections, id, -33 ); // 款康磊俊 狼茄 碍力辆丰..
}

void RecvBlockSkill( short int cn, bool flag )//020821 lsw
{
	if( !CheckServerId( cn ) ) return;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "block Skill on/off" );
	g_block_steal = flag;//020926 lsw
}

// 020708 YGI
void RecvMakeGhost(short int cn, short id)
{	//< CSD-030408
	CHARLIST* pTarget = NULL;
	
	if (id <= 1000)
	{
		pTarget = CheckServerId(id);
		
		if (pTarget == NULL)
		{
			return;
		}

		pTarget->Hp				= 0;
		pTarget->bAlive			= DEAD_;
		pTarget->viewtype		= VIEWTYPE_GHOST_;
		pTarget->InitCurse(); 
		SendViewTypeChange(id, VIEWTYPE_GHOST_);
		pTarget->SendCharInfoBasic(HP, pTarget->Hp);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -