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

📄 message.cpp

📁 成熟的RPG引擎,Flysky发布. 斜视角引擎.
💻 CPP
字号:
#include "GameH.h"

void RunMessage(MessageCmd ID,int FT,char *TName,int TW,int TH,int x,int y,char *Other,int Otheri)
{
	char *tmp=NULL;
	int tx=0,ty=0,ox=0,oy=0;
	switch (ID)
	{
	case MS_Debug:          //调试
		if (FT==0) IsDebug=false;
		else IsDebug=true;
		break;
	case MS_NWMAP:  //建地图
        //map.NewMap(TName,FT,TW,TH,Otheri,Other); //创建
		map.NewMap(TName,FT,TW,TH,Other); //创建
		role.AMoveTo(false,x,y,false);         //确定开始坐标
		engine.m_GameState=GAME_LOADMAP; //设定状态机
	    break;
	case MS_SETRPOS:   //瞬间移动
		role.AMoveTo(false,x,y,false);         //确定开始坐标
	    break;
	case MS_RMOVETO:   //瞬间移动
		role.AMoveTo(false,x,y,true);         //确定开始坐标
	    break;

	case MS_Close: //关闭引擎
		PostQuitMessage(0);
		break;
	case MS_RAT:  //读砖块
		tile.ReadATile(FT,TName);
		break;
	case MS_NWROLE:
	stRoleC trole;
	trole.face=FT;

	trole.Name=TName;

	trole.Exp=INIT_EXP;
	trole.MaxExp=INIT_EXPTO;

	trole.IsNPC=false; //是角色

	trole.HP=INIT_HP;
	trole.MP=INIT_MP;
	trole.Level=INIT_LEVEL;
	trole.MaxHP=INIT_HP;
	trole.MaxMP=INIT_MP;
	
	trole.roler.top=TH;
	trole.roler.left=TW;
	trole.roler.right=x;
	trole.roler.bottom=y;
	trole.facePic=Other;
	role.AddActor(trole);
	break;
	case MS_DLROLE:
		role.DeleteActor(FT);
	break;
	case MS_SAY:
		strcpy(tmpc1,Other);
		KeyClear(VK_RETURN);KeyClear(VK_SPACE);KeyClear(VK_LBUTTON); //先清除
		BltFast(lpDDS[7],0,0,lpDDS[1],NULL,NoKey);  //备份
		for(;;)
         {
			 if (RunGame==true) 
		{
		    Clrscr(lpDDS[1],0);
			XGameLoop(lpDDS[1]);
			Say(lpDDS[1],TName,tmpc1,TW,TH);
		}
		else
		{
			BltFast(lpDDS[1],0,0,lpDDS[7],NULL,NoKey);  //备份
			Say(lpDDS[1],TName,tmpc1,TW,TH);
		}
		ForV(); //Fps等文字状态
		PrintMouse(lpDDS[1],lpDDS[DDS_Mouse]); //画鼠标 必须
		FlipSurface();
	        if (KEYSTATE(VK_RETURN)==true) {KeyClear(VK_RETURN);IsNextLine=true; break;}
		    if (KEYSTATE(VK_LBUTTON)==true) {KeyClear(VK_LBUTTON);IsNextLine=true; break;}
	        if (KEYSTATE(VK_SPACE)==true) {KeyClear(VK_SPACE);IsNextLine=true; break;}
		 }
       KeyClear(VK_RETURN);KeyClear(VK_SPACE); //再清除
	break;
	case MS_LOADMAP:
		strcpy(tmpc,MapPath);
		strcat(tmpc,TName);
		strcpy(tmpc1,tmpc);
		strcpy(tmpc1," Map Read Failed!");
	    _ERROR(map.LoadMap(tmpc),tmpc1);
		engine.m_GameState=GAME_LOADMAP; //设定状态机
	break;
	/*
	case MS_LOADNPC:
		strcpy(tmpc,NPCSPath);
		strcat(tmpc,TName);
		strcpy(tmpc1,tmpc);
		strcpy(tmpc1," NPC Load Failed!");
		_ERROR(map.LoadNPC(tmpc),tmpc1);
		break;*/
	case MS_SAVEMAP:
		strcpy(tmpc,MapPath);
		strcat(tmpc,TName);
		strcpy(tmpc1,tmpc);
		strcpy(tmpc1," Map Write Failed!");
		_ERROR(map.SaveMap(tmpc),tmpc1);
	break;
	case MS_SWPIC: //读取图片并完整显示在屏幕上
		strcpy(tmpc,PicPath);
		strcat(tmpc,TName);
		cscript.BScriptBg(tmpc);
		break;
	case MS_PLAYMUSIC:
		strcpy(tmpc,SoundPath);
		strcat(tmpc,TName);
		sound.Play(tmpc);
		break;
	case MS_STOPMUSIC:
		sound.Stop();
		break;
	case MS_PLAYSOUND:
		strcpy(tmpc,SoundPath);
		strcat(tmpc,TName);
		sound.PlayO(tmpc,IntTobool(FT));
		//sound.PlayO(tmpc,true);
		break;
	case MS_PLAYVIDEO:
        sound.Stop(); //防止冲突
		strcpy(tmpc,VideoPath);
		strcat(tmpc,TName);
	    video.Play(tmpc,hwnd);
		break;
	case MS_PLAYVIDEOALONG:
        sound.Stop(); //防止冲突
		strcpy(tmpc,VideoPath);
		strcat(tmpc,TName);
		video.StrPlay(tmpc,hwnd);
		break;	
	case MS_STOPVIDEO:
		video.Stop();
		break;
	case MS_MOUSEDOWN:
	if (role.GetActorNum()>0)
	{
		GetCursorPos(&curpos);
		MIToMD(abs(curpos.x),abs(curpos.y),tx,ty);
		char *Tmpc=role.GetRoleScriptName(map.GetStartXY().x+tx,map.GetStartXY().y+ty);
 		if (Tmpc==NULL)	
			role.AMoveTo(true,tx,ty,true); //移动
		else
		{
			ZeroMemory(tmpc,MAX_PATH); 
			sprintf(tmpc,"%s%s",ScriptPath,Tmpc);
			cscript.LoadScript(tmpc);
		}
	}
		break;
	case MS_KEYDOWN:
		//0. 下 1. 上  2.左  3.右
		if (role.GetActorNum()>0)
		{
			POINT np=role.ActorXy(0);
			if (FT==LeftFace) role.AMoveTo(false,np.x-1,np.y,false);
			if (FT==RightFace) role.AMoveTo(false,np.x+1,np.y,false);
			if (FT==DownFace) role.AMoveTo(false,np.x,np.y+1,false);
			if (FT==UpFace) role.AMoveTo(false,np.x,np.y-1,false);
		}
	break;
	case MS_SETNCK:
		DDSetColorKey(lpDDS[1],RGB(TW,TH,x));
	break;
	case MS_ISSM:
			if (FT==0) IsMouse=false;
			else IsMouse=true;
	break;
	case MS_CMMO:
		map.CreateAPic(FT,TW,TH,x,y,Otheri); //类型 X Y ID, TileX,TileY
		break;
	case MS_SMBK:
		map.CBlockOn(IntTobool(FT),TW,TH); //开启/关闭 X Y
		break;
	case MS_SMHK:
		map.CHookOn(IntTobool(FT),TName,TW,TH);//开启/关闭 陷阱脚本 X Y
		break;
	case MS_LDROLE:
		if (role.AddActor(TName)!=true) _ERROR_OK("游戏脚本错误!");
		break;
	case MS_OPENHOOK:
		ZeroMemory(tmpc,MAX_PATH); //清0
		sprintf("%s%s",ScriptPath,map.Cell[TW][TH].HookScriptName);
		cscript.LoadScript(tmpc);
		break;
	case MS_ISHOOK:
		if (map.IsHook(TW,TH)==true) 
		{
		ZeroMemory(tmpc,MAX_PATH); //清0
		sprintf(tmpc,"%s%s",ScriptPath,map.Cell[TW][TH].HookScriptName);
		cscript.LoadScript(tmpc);
		}
		break;
	case MS_RUNSCRIPT:
		//运行一个脚本
		sprintf(tmpc,"%s%s",ScriptPath,TName); //格式化函数
		if (cscript.LoadScript(tmpc)!=true)
		{
			char Tempc[MAX_LOADSTRING];
			sprintf(Tempc,"Script Read ERROR!\nError:%s",tmpc);
			_ERROR_OK(Tempc);
		}
		break;
	case MS_SMN:
		int ID=role.NPCNameToID(TName);
		role.NAMove(false,IntTobool(FT),ID,TW,TH);
		break;
   }
}
void RunMessage(MessageCmd ID,int FT,char *TName,char *TName1,char *TName2,char *TName3,int L,int T,int x,int y,int Width,int Height,int Otheri)
{
	switch (ID)
	{
		case MS_NWNPC:
			stRoleC tr;
			tr.face=FT;
			tr.Name=TName;
			tr.facePic=TName1;
			tr.EScrFName=TName2;

			tr.VS=IntTobool(Otheri);
			tr.IsNPC=true; //是NPC
			tr.x=x;
			tr.y=y;
			tr.roler.bottom=Height;
			tr.roler.right=Width;
			tr.roler.top=T;
			tr.roler.left=L;
			role.AddNPC(tr);
		break;
	}
}

⌨️ 快捷键说明

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