Esempio n. 1
0
const CharacterType *ItemFactory::GetCharacterTypeByBloodline(uint32 bloodlineID) {
    // Unfortunately, we have it indexed by typeID, so we must get it ...
    uint32 characterTypeID;
    if(!db().GetCharacterTypeByBloodline(bloodlineID, characterTypeID))
        return NULL;
    return GetCharacterType(characterTypeID);
}
Esempio n. 2
0
bool csKeyEventHelper::GetEventData (const iEvent* event, 
				     csKeyEventData& data)
{
  // if (!CS_IS_KEYBOARD_EVENT (*event)) return false; // Need an iObjectRegistry* to do this...

  data.autoRepeat = GetAutoRepeat (event);
  data.charType = GetCharacterType (event);
  data.codeCooked = GetCookedCode (event);
  data.codeRaw = GetRawCode (event);
  data.eventType = GetEventType (event);
  GetModifiers (event, data.modifiers);

  return true;
}
Esempio n. 3
0
VOID CObject_Character::CreateRenderInterface(VOID)
{
	if(!m_pRenderInterface) return;

	//在渲染层刷新位置
	SetPosition(GetPosition());
	Enable(OSF_VISIABLE);

	//根据是否是FakeObject作一定处理
	if(GetFakeObjectFlag())
	{
		//禁止鼠标选择
		m_pRenderInterface->SetRayQuery(FALSE); 
		//设置特殊的VisibleFlag
		m_pRenderInterface->Actor_SetUIVisibleFlag();
	}
	else
	{
		m_pRenderInterface->Attach_ProjTexture(tEntityNode::SHADOW_BLOB, TRUE, GetShadowRange());

		//设置选择优先级
		if(CT_PLAYERMYSELF == GetCharacterType()) 
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PLAYERMYSLEF);
		else if(CT_PLAYEROTHER == GetCharacterType()) 
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PLAYEROTHER);
		else if(NPC_TYPE_PET == ((CObject_PlayerNPC*)this)->GetNpcType())
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PET);
		else
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_CREATURE);
	}

	//设置骨骼动画回调
	m_pRenderInterface->SetAnimationEndEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationEnd), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationCanBreakEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationCanBreak), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationHitEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationHit), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationShakeEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationShakeEvent), (DWORD)GetID() );
}
Esempio n. 4
0
CValue *GetVariable( CStr &var, BOOL create, int *position, BOOL local )
{
	int     pos, startPos;
	bool	oldStyle = false, reference = false, isPtr = false;
	CStr entryName;
	CMapStrToValue *map = NULL;
	CValue  *value;
	CValue *dummy;

	pos = 0;
	if ( !local )
	{
		if ( LocalVariables != NULL && LocalVariables->Lookup( L"%AUTOLOCAL%", dummy ) )
			local = TRUE;
	}

	// Skip spaces
	while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;
	
	if ( pos < var.GetLength() && var[pos] == L'%' )
	{
		oldStyle = true;
		pos++;
		while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;
	}
	
	if ( create && pos < var.GetLength() && var[pos] == L'[' )
	{
		reference = true;
		pos++;
		while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;
	}

	startPos = pos;
	// Skip all valid variable name characters
	while (    pos < var.GetLength()
		    && (   GetCharacterType( var[pos] ) == CInterpreter::CHAR_ALPHA
			    || GetCharacterType( var[pos] ) == CInterpreter::CHAR_DIGIT
				|| GetCharacterType( var[pos] ) == CInterpreter::CHAR_UNDERSCORE
				|| (var[pos] == L':' && (pos == startPos || pos == startPos + 1 ))
			)
		  ) pos++;
	// Skip Regex variable name characters
	if ((var[pos]==L'$') && (pos+1<var.GetLength())){
		if (   var[pos+1] == L'&' 
			|| var[pos+1] == L'`' 
			|| var[pos+1] == L'\'' 
			|| var[pos+1] == L'+' 
			|| var[pos+1] == L'_'
			)pos +=2;
		else{
			int i=0;
			for (i=1;i<=3;i++){
				if ( pos+i<var.GetLength() && var[pos+i] >=L'0' && var[pos+i]<=L'9') { /* do nothing */ }else break;
			}
			pos+=i;
		}
	}
	
	// Skip spaces
	while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;

	//jwz:add for Global Variable
	if (var[startPos]==L':' && var[startPos+1]==L':'){
		local = FALSE;
		startPos +=2;
	}

	// No array index?
	if ( pos == -1 || pos >= var.GetLength() || var[pos] != L'[' )
	{
		entryName = var;

		if ( pos != -1 && pos <= var.GetLength() )
			entryName = var.Mid( startPos, pos-startPos );


		entryName.TrimLeft();
		entryName.TrimRight();

		if ( position != NULL ) 
			*position = pos;

		if ( entryName.IsEmpty())
		{
			VarError = L"Empty variable name not allowed";
			if ( position != NULL ) *position = -1;
			return NULL;
		}

		entryName.MakeUpper();

		if ( local && LocalVariables != NULL && LocalVariables->Lookup( L"%GL_" + entryName + L"%", dummy ) ) //predefined GLOBAL declare variable
		{
			local = FALSE;
		}

		if ( local && LocalVariables != NULL && LocalVariables->Lookup( entryName, value ) ) {}
		else if ( local == FALSE && Variables.Lookup( entryName, value ) ) {}
		else
		{
			if ( create )
			{
				// MessageBox( NULL, L"%GL_" + entryName + L"%", L"Debug", MB_OK );
				if ( LocalVariables != NULL && local )
				{
					LocalVariables->SetAt( entryName, CValue() );
					LocalVariables->Lookup( entryName, value );
				}
				else
				{
					Variables.SetAt( entryName, CValue() );
					Variables.Lookup( entryName, value );
				}
			}
			else
				value = NULL;
		}
	}
	else
	{
		entryName = var.Mid( startPos, pos-startPos );
		entryName.TrimLeft(); entryName.TrimRight();
		entryName.MakeUpper();

		if ( entryName.IsEmpty() )
		{
			VarError = L"'[' without array name";
			if ( position != NULL ) *position = -1;
			value = NULL;
		}
		else
		{
			if ( local && LocalVariables != NULL && LocalVariables->Lookup( L"%GL_" + entryName + L"%", dummy ) )
			{
				local = FALSE;
			}

			if ( local && LocalVariables != NULL && LocalVariables->Lookup( entryName, value ) ) {}
			else if ( local == FALSE && Variables.Lookup( entryName, value ) ) {}
			else
			{
				if ( create )
				{
					if ( LocalVariables != NULL && local )
					{
						LocalVariables->SetAt( entryName, CValue() );
						LocalVariables->Lookup( entryName, value );
					}
					else
					{
						Variables.SetAt( entryName, CValue() );
						Variables.Lookup( entryName, value );
					}
				}
				else
					value = NULL;
			}

			if ( value != NULL )
				map = value->GetMap();

			while ( pos != -1 && pos < var.GetLength() && var[pos] == L'[' )
			{
				startPos = pos+1;
				CStr arrIdxExpr = var.Mid( startPos );
				CInterpreter parser;

				entryName = (LPCTSTR)parser.EvaluateExpression( arrIdxExpr, FALSE );

				if ( parser.GetError() != 0 )
				{
					VarError = parser.GetErrorMessage();
					if ( position != NULL ) *position = -1;
					value = NULL;
					break;
				}

				if ( entryName.IsEmpty() != 0 )
				{
					VarError = L"Array index is empty";
					if ( position != NULL ) *position = -1;
					value = NULL;
					break;
				}

				pos = startPos + parser.GetErrorPosition();
				if ( var[pos] != L']' )
				{
					VarError = L"Missing ']'";
					if ( position != NULL ) *position = -1;
					value = NULL;
					break;
				}

				if ( position != NULL ) *position = pos+1;
				while ( pos < var.GetLength() && parser.GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;

				entryName.MakeUpper();
				BOOL isArray = FALSE;
				if ( pos <= var.GetLength() && var[pos+1] == L'[' )
				{
					isArray = TRUE;
					pos++;
				}

				if ( value != NULL )
				{
					if ( map != NULL )
					{
						if ( map->Lookup( entryName, value ) == FALSE )
						{
							if ( create )
							{
								map->SetAt( entryName, CValue() );
								map->Lookup( entryName, value );
								if ( isArray )
									map = value->GetMap();
							}
							else
								value = NULL;
						}
						else
							if ( isArray ) map = value->GetMap();
					}
				}
			}
		}
	}

	if ( create && reference && value != NULL )
	{
		while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;
		if ( pos < var.GetLength() && var[pos] == L']' )
		{
			pos++;
			CStr referredVar = (CStr)*value;
			value = GetVariable( referredVar, create );
		}
		else
		{
			VarError = L"Missing ']'";
			pos = -1;
			if ( position != NULL ) *position = -1;
			value = NULL;
		}
	}

	if ( oldStyle && value != NULL )
	{
		while ( pos < var.GetLength() && GetCharacterType( var[pos] ) == CInterpreter::CHAR_WHITESPACE ) pos++;
		if ( pos < var.GetLength() && var[pos] == L'%' )
		{
			pos++;
			//CStr referredVar = (LPCTSTR)value;
			//value = GetVariable( referredVar, create );
		}
		else
		{
			VarError = L"Missing '%'";
			pos = -1;
			if ( position != NULL ) *position = -1;
			value = NULL;
		}
	}
	return value;
}
Esempio n. 5
0
UI32 CSWF::SaveFrameAsSVG(UI16 usClipID, UI16 usFrame)
{
	FILE *pfileSVG;
	char szSVGFileName[MAX_FILEPATH], szID[256];
	double sdXMin, sdXMax, sdYMin, sdYMax, sdWidth, sdHeight;
	void **lprgvpTagArray;
	UI32 ulNumTags, ulStart;
	UI16 usFrameCount=0;
	UNKNOWNTAG* lputTag;
	SHOWFRAME *lpsfShowFrame;
	DEFINESHAPE *lpdsShape;
	CDisplayList cdlDisplayList;
	LAYER lLayer;

	if(!GetTagArray(usClipID,lprgvpTagArray,ulNumTags))
		return -1;	

	/*dimension calculations*/
	sdXMin=double(fhFrameHeader.srFrameSize.slXMin)/20;
	sdXMax=double(fhFrameHeader.srFrameSize.slXMax)/20;
	sdYMin=double(fhFrameHeader.srFrameSize.slYMin)/20;
	sdYMax=double(fhFrameHeader.srFrameSize.slYMax)/20;
	sdWidth=sdXMax-sdXMin;
	sdHeight=sdYMax-sdYMin;

	/*open file*/
	CreateFileName(szSVGFileName,"frame",usFrame,"svg");
	pfileSVG=fopen(szSVGFileName,"w");
	
	/*info*/
	fprintf(pfileSVG,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	fprintf(pfileSVG,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n");
	fprintf(pfileSVG,"\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg11.dtd\">\n\n");
	fprintf(pfileSVG,"<!-- Generated by SWFRIP -->\n\n");
	
	/*svg*/
	fprintf(pfileSVG,"<svg width=\"%0.2f\" height=\"%0.2f\" viewBox=\"%0.2f %0.2f %0.2f %0.2f\">\n\n",
			sdWidth,sdHeight,sdXMin,sdYMin,sdWidth,sdHeight);

	/*frame*/
	//fprintf(pfileSVG,"<!-- Frame %i -->\n\n",usFrame);
	//fprintf(pfileSVG,"<g id=\"frame_%i\">\n\n",usFrame);

	/*generate display list*/
	for(UI32 iTag=0; usFrameCount<usFrame && iTag<ulNumTags; iTag++)
	{
		lputTag=(UNKNOWNTAG*)lprgvpTagArray[iTag];

		switch(lputTag->rhTagHeader.usTagCode)
		{
			case TAGCODE_PLACEOBJECT:
			case TAGCODE_PLACEOBJECT2:
				cdlDisplayList.Place(lputTag);
				break;

			case TAGCODE_REMOVEOBJECT:
			case TAGCODE_REMOVEOBJECT2:
				cdlDisplayList.Remove(lputTag);
				break;

			case TAGCODE_SHOWFRAME:
				usFrameCount++;
				break;
		}
	}

	/*make frame*/
	while(cdlDisplayList.GetNextLayer(&lLayer))
	{
		if(GetCharacterType(lLayer.po2Place.usCharacterID)!=SWF_SHAPE) continue;

		lpdsShape=(DEFINESHAPE*)lprgvpCharacters[lLayer.po2Place.usCharacterID];
		//WriteDefineShapeAsSVG(lpdsShape,false,pfileSVG);
		
		/*save character*/
		//SetExportFormat(SWF_SHAPE,1);
		//SaveCharacter(lLayer.po2Place.usCharacterID);
				
		/*write color transform filter*/
		if(lLayer.po2Place.fPlaceFlagHasColorTransform)
		{
			sprintf(szID,"color_transform_%p",lLayer.lplNext);
			WriteColorMatrixFilter(&lLayer.po2Place.cxfwaColorTransform,szID,pfileSVG);
			fprintf(pfileSVG,"<g filter=\"url(#%s)\">\n",szID);
		}

		/*write image*/	
		/*fprintf(pfileSVG,"<image x=\"%.2f\" y=\"%.2f\"",
				double(lpdsShape->rShapeBounds.slXMin)/20,
				double(lpdsShape->rShapeBounds.slYMin)/20);

		fprintf(pfileSVG," width=\"%.2f\" height=\"%.2f\"",
				double(lpdsShape->rShapeBounds.slXMax-lpdsShape->rShapeBounds.slXMin)/20,
				double(lpdsShape->rShapeBounds.slYMax-lpdsShape->rShapeBounds.slYMin)/20);
		*/

		//fprintf(pfileSVG,"<use xlink:href=\"#shape_%i\"",lpdsShape->usShapeID);

		/*inline
		if(lLayer.po2Place.fPlaceFlagHasColorTransform)
			fprintf(pfileSVG," filter=\"url(#color_transform_%p)\"",lLayer.lplNext);
		*/

		/*if(lLayer.po2Place.fPlaceFlagHasMatrix)
			WriteTransform(&lLayer.po2Place.mMatrix,pfileSVG);
		
		fprintf(pfileSVG," />\n");
		*/
		WriteDefineShapeAsSVG(lpdsShape,true,pfileSVG,&lLayer.po2Place);

		if(lLayer.po2Place.fPlaceFlagHasColorTransform)
			fprintf(pfileSVG,"</g>\n");
		
		fprintf(pfileSVG,"\n");

	}
	
	/*end file*/
	//fprintf(pfileSVG,"</g>\n\n");
	fprintf(pfileSVG,"</svg>");
	fclose(pfileSVG);

	/*so that szLastRes is this frame*/
	CreateFileName(szSVGFileName,"frame",usFrame,"svg");

	return 0;
}