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

📄 script.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			if (Update((DVector*)pData) == DFALSE)
            {
				g_pServerDE->RemoveObject(m_hObject);
                return 0;
            }
			break;

		case MID_PRECREATE:
			{
				DDWORD dwRet = B2BaseClass::EngineMessageFn(messageID, pData, fData);

				if (fData == 1.0f)
					ReadProp((ObjectCreateStruct*)pData);

				    PostPropRead((ObjectCreateStruct*)pData);

				return dwRet;
			}

		case MID_INITIALUPDATE:
		    InitialUpdate((DVector*)pData);
			break;
            
		// If we created a link to the target, this will tell us that it no longer exists
		case MID_LINKBROKEN:
		{
			HOBJECT hObj = (HOBJECT)pData;
            for (int x=0; x<MAXSCRIPTOBJ; x++)
            {
                if (ScriptObject[x].m_hObject == hObj)
                {
	    			ScriptObject[x].m_hObject = DNULL;
                    break;
		    	}
            }                
		}
		break;            
	}
	return B2BaseClass::EngineMessageFn(messageID, pData, fData);
}


// --------------------------------------------------------------------------- //
//
//	ROUTINE:	Script::ObjectMessageFn()
//
//	PURPOSE:	Handler for server object messages.
//
// --------------------------------------------------------------------------- //

DDWORD Script::ObjectMessageFn(HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead)
{
	switch (messageID)
	{
		case MID_TRIGGER:
			HandleTrigger(hSender, hRead);
			break;
	}
	
	return B2BaseClass::ObjectMessageFn(hSender, messageID, hRead);
}



// --------------------------------------------------------------------------- //
//
//	ROUTINE:	Script::HandleTrigger()
//
//	PURPOSE:	Trigger function 
//
// --------------------------------------------------------------------------- //

DBOOL Script::HandleTrigger( HOBJECT hSender, HMESSAGEREAD hRead )
{
	if (!g_pServerDE) return DFALSE;

	HSTRING hMsg = g_pServerDE->ReadFromMessageHString(hRead);

	char *pCommand = _strupr(g_pServerDE->GetStringData(hMsg));

	g_pServerDE->BPrint(pCommand);

	if ( _mbsncmp((const unsigned char*)pCommand, (const unsigned char*)"SCRIPT_STOP", 11) == 0)
	{
		m_fStartTime = -1.0f;
		m_bCheckStartTime = DTRUE;
	}

	// Dont Restart it...
	if ( m_bScriptStarted == DTRUE )  return DFALSE;

	if ( _mbsncmp((const unsigned char*)pCommand, (const unsigned char*)"SCRIPT_START", 12) == 0)
	{
		m_fStartTime = 1.0f;
		m_bCheckStartTime = DTRUE;
	}

	g_pServerDE->FreeString( hMsg );

	return DFALSE;
}






// ----------------------------------------------------------------------- //
//
//	ROUTINE:	StringToScriptCutCmdType
//
//	PURPOSE:	Cut Scene Script Commands and num of args
//
// ----------------------------------------------------------------------- //
int Script::StringToScriptCutCmdType(char* pCmdName, int &nArgs, int &nCheckObjID)
{
	if (!pCmdName) return SCRIPT_SCMD_UNKNOWN;

	int nType = SCRIPT_SCMD_UNKNOWN;
    
    // Return the number of args required
    nArgs = 0;
    
    // Return the ObjectID Arg position, to check to make sure we are not over MAXSCRIPTOBJ
    nCheckObjID = 0;
    	
	if (_mbsicmp((const unsigned char*)SCRIPTSCENE_START, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_START;
        nArgs = 0;
	}
                    
	if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CUTSCENE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CUTSCENE;
        nArgs = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SUBTITLE_DISPLAY, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_SUBTITLE_DISPLAY;
        nArgs = 2;          // Length of time, Text to Display.
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SUBTITLE_FADE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_SUBTITLE_FADE;
        nArgs = 1;          // Delay
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_ANIM, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_PLAY_ANIM;
        nArgs = 2;          // Object, Anim Num
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_SOUNDPOS, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_PLAY_SOUND_POS;
        nArgs = 7;          // SoundID, X, Y, Z, Sound, Radius,Looping
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_SOUNDOBJ, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_PLAY_SOUND_OBJ;
        nArgs = 5;          // SoundID, ObjectID(for Position), Sound, Radius,Looping
        nCheckObjID = 2;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_KILL_SOUND, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_KILL_SOUND;
        nArgs = 1;          // SoundID
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_WAIT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_WAIT;
        nArgs = 1;          // Delay in secs
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_AT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_AT;
        nArgs = 5;          // Object ID, Class to create, X, Y, Z
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_NEAR, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_NEAR;
        nArgs = 3;          // Object ID, Class to create, NearObjectID
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_ASSIGN, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_ASSIGN;
        nArgs = 2;          // Object ID, Target Name (object to assign the ID to, must be in level) 
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_MODEL_AT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_MODEL_AT;
        nArgs = 6;          // Object ID, Model Name, Skin Name, X, Y, Z
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_MODEL_NEAR, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_MODEL_NEAR;
        nArgs = 4;          // Object ID, NearObjectID, Model Name, Skin Name
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_FIRE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_FIRE;
        nArgs = 3;          // Object ID, Target ID (object to attach to), BurnTime
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_AT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_AT;
        nArgs = 8;          // X, Y, Z, Duration, Sound Radius, Damage Radius, Min Scale, Max Scale
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_NEAR, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_NEAR;
        nArgs = 6;          // TargetObject ID, Duration, Sound Radius, Damage Radius, Min Scale, Max Scale
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_GIB, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_GIB;
        nArgs = 1;          // TargetObject ID
        nCheckObjID = 1;
	}

    else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_SCALE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_SCALE;
        nArgs = 4;          // TargetObject ID, Scale X, Scale Y, Scale Z
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_MOVE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_MOVE;
        nArgs = 4;          // ObjectID, X, Y, Z
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_TELEPORT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_TELEPORT;
        nArgs = 4;          // ObjectID, X, Y ,Z
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_MOVE_OVERTIME, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_MOVE_OVERTIME;
        nArgs = 6;          // ObjectID, X, Y ,Z, Interval, Duration
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAGS, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_FLAGS;
        nArgs = 2;          // ObjectID, FLAGS STRING
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_VISIBLE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_FLAG_VISIBLE;
        nArgs = 2;          // ObjectID, FLAGS STRING
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_SOLID, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_FLAG_SOLID;
        nArgs = 2;          // ObjectID, FLAGS STRING
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_GRAVITY, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_FLAG_GRAVITY;
        nArgs = 2;          // ObjectID, FLAGS STRING
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_DIMS, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_DIMS;
        nArgs = 4;          // ObjectID, Dim X, Dim Y, Dim Z
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_DESTROY, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_OBJECT_DESTROY;
        nArgs = 1;          // ObjectID 
        nCheckObjID = 1;
	}
    
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_AI_SCRIPT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_SEND_AI_SCRIPT;
        nArgs = 2;
        nCheckObjID = 1;    // ObjectID, Script to Send
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_TRIGGER, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_SEND_TRIGGER;
        nArgs = 2;
        nCheckObjID = 1;    // ObjectID, Script to Send
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_TRIGGER_NAMED, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_SEND_TRIGGER_NAMED;
        nArgs = 2;
        nCheckObjID = 1;    // ObjectID, Script to Send
	}
    
/*	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_FOV, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_FOV;
        nArgs = 2;          // X Fov, Y Fov
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_RECT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_RECT;
        nArgs = 4;          // Rect L,T,R,B
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_RESET, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_RESET;
        nArgs = 0;
	}
*/
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_CREATE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_CREATE;
        nArgs = 2;          // CameraID, Type
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_DESTROY, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_DESTROY;
        nArgs = 1;          // CameraID
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_SELECT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_SELECT;
        nArgs = 1;          // CameraID
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_MOVE_OBJ, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_MOVE_OBJ;
        nArgs = 3;          // CameraID, Time, ObjID
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_TELEPORT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_TELEPORT;
        nArgs = 4;          // CameraID, X, Y, Z
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_TELEPORT_OBJ, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_TELEPORT_OBJ;
        nArgs = 2;          // CameraID, ObjID
        nCheckObjID = 1;
	}
    
	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_ROTATE, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_ROTATE;
        nArgs = 4;          // CameraID, X, Y ,Z
        nCheckObjID = 1;
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_LINKSPOT, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_LINKSPOT;
        nArgs = 2;          // CameraID, ObjectID   (if objectID is 0 then Break Link
        nCheckObjID = 2;    // Could be a problem here...
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_ZOOM, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_CAMERA_ZOOM;
        nArgs = 1;          // 0 Zoom False, 1 Zoom True
	}

	else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_END, (const unsigned char*)pCmdName) == 0)
	{
		nType = SCRIPT_SCMD_END;
        nArgs = 0;
	}
    

	return nType;
}





// ----------------------------------------------------------------------- //
//
//	ROUTINE:	LoadScript
//
//	PURPOSE:	Reads Script Scene
//
// ----------------------------------------------------------------------- //
DBOOL Script::LoadScript(int &nEOF) 
{
	char line[256];

⌨️ 快捷键说明

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