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); }
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; }
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() ); }
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; }
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; }