Пример #1
0
double CScript::DelCollection(const char* cmd, char* retStr)
{
    if(p_SrcShape == NULL) return 0;

    double ret = 0;
    char *pGuidName = GetStringParam( cmd, 0 );
    if (NULL == pGuidName)
    {
        return ret;
    }
    CGUID guid = GetVariableList()->GetGuidValue(pGuidName);

    if( guid == NULL_GUID )
    {
        M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN );
        return ret;
    }

    CServerRegion* pRegion = reinterpret_cast<CServerRegion*>( p_SrcShape -> GetFather() );
    CShape* pShape = NULL;
    if( pRegion )
        pShape = dynamic_cast<CShape*>( pRegion -> FindChildObject( TYPE_COLLECTION, guid) );
    if( pRegion && pShape )
    {
        pRegion->DelShapeToAround(pShape);

        pRegion->DeleteChildObject(pShape);
        ret = 1;
    }

    M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN );
    return 1;
}
Пример #2
0
double CScript::SetDelTimeByGuid(const char* cmd, char* retStr)
{
	if(!p_SrcShape) return -1.0f;

	char* szGUID = GetStringParam(cmd, 0); 
	int type=GetIntParam(cmd,1);
	int iDelTime= GetIntParam(cmd,2);

	if (szGUID==NULL || 
		type== ERROR_CODE || type== INVILID_VALUE)
	{
		M_FREE( szGUID, sizeof(char)*MAX_VAR_LEN );
		return 0;
	}
	if (iDelTime== ERROR_CODE || iDelTime== INVILID_VALUE)
	{
		iDelTime=0;
	}


	CGUID monsterGUID = GetVariableList()->GetGuidValue(szGUID);
	CServerRegion* pRegion=dynamic_cast<CServerRegion*>(p_SrcShape->GetFather());
	if (pRegion!= NULL)
	{
		CMoveShape* pMoveShape= dynamic_cast<CMoveShape*>(pRegion->FindChildObject(type,monsterGUID));
		if (pMoveShape!= NULL)
		{
			pMoveShape->AddDelEvent(iDelTime);
		}
	}
	M_FREE( szGUID, sizeof(char)*MAX_VAR_LEN );
	return 0;
}
Пример #3
0
double CScript::ChangeAttr(const char* CmdStr, char* retStr)
{
	OBJECT_TYPE type;
	CGUID id;
	double value  = 0;
	double ret = INVILID_VALUE;

	int param = GetIntParam(CmdStr, 0);
	if(param != ERROR_CODE && param != INVILID_VALUE)
	{
		type = (OBJECT_TYPE)param;

		char* pIdName = GetStringParam(CmdStr, 1);
		if(NULL == pIdName) return ret;
		id = GetVariableList()->GetGuidValue(pIdName);
		if(id == NULL_GUID)
			id = GetGeneralVariableList()->GetGuidValue(pIdName);
		if(id == NULL_GUID)
			id = ((CPlayer*)p_SrcShape)->GetVariableList()->GetGuidValue(pIdName);

		CMoveShape* shape = GetGame()->FindShape(type, id);

		char* name = GetStringParam(CmdStr, 2);
		if(name)
		{
			value = GetIntParam(CmdStr, 3);
			if(value != ERROR_CODE && value != INVILID_VALUE)
			{

				if(NULL == shape) // 默认id=0时,直接调用SrcShape的SetAttr接口
				{
					CShape* cShape = GetSrcShape();
					if(cShape)
					{
						((CMoveShape*)cShape)->ChangeAttribute(string(name), value);
						((CMoveShape*)cShape)->UpdateAttribute();
						ret = 1;
					}
				}
				else
				{
					shape->ChangeAttribute(string(name), value);
					shape->UpdateAttribute();
					ret = 1;
				}
			}
		}

		M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
		M_FREE( name, sizeof(char)*MAX_VAR_LEN );
	}
	else // 参数是字符串
	{
		AddErrorLogText(CStringReading::LoadString(IDS_GS_FUNCTION, STR_GS_FUNCTION_CHANGEATTRFIRSTVARISSTRING));
	}

	return ret;
}
void
JDiscreteEquality::SetVariableIndex
	(
	const JIndex variableIndex
	)
{
	assert( (GetVariableList())->IsDiscrete(variableIndex) );
	JDecisionWithVar::SetVariableIndex(variableIndex);
}
void
JVariableValue::SetVariableIndex
	(
	const JIndex variableIndex
	)
{
	assert( (GetVariableList())->IsNumeric(variableIndex) );
	JFunctionWithVar::SetVariableIndex(variableIndex);
}
Пример #6
0
//call的扩展版本,和子脚本公用脚本变量列表
enum CScript::SCRIPTRETURN CScript::callEx(const char* CmdStr, char* retStr)
{
    //初始为错误
    CScript::SCRIPTRETURN retFlag  = CScript::SR_ERROR;
    char *str=GetStringParam(CmdStr, 0);
    if (str)
    {
#ifdef _RUNSTACKINFO_
        char pszStatckInfo[10240]="";
        _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) Start",str);
        CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo);
#endif
#ifdef _SCRIPT_INFO_
        DWORD BeginTime = timeGetTime();
        m_RunTime = 0;
#endif
        CScript* pTempScript = PopFreeScript(str);
        InitChildScriptData(pTempScript);
        pTempScript->SetVariableList(GetVariableList());
        // 加载脚本内容
        if( pTempScript->LoadScript(str, (char*)GetGame()->GetScriptFileData(str)) )
        {
            //记录进入子脚本
            EnterChildScript(CST_CALLEX,pTempScript,"","");
            retFlag = pTempScript->RunStep();
            if(retFlag == CScript::SR_HANG)
            {
#ifdef _RUNSTACKINFO_
                _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) Hang",str);
                CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo);
#endif
#ifdef _SCRIPT_INFO_
                m_RunTime += timeGetTime() - BeginTime;
#endif
                M_FREE( str, sizeof(char)*MAX_VAR_LEN );
                SetIsHang(true);
                SetHangFunc(pTempScript->GetHangFunc());
                return retFlag;
            }
            //只要该脚本不挂起,就记录离开子脚本
            LeaveChildScript(pTempScript);
        }
#ifdef _RUNSTACKINFO_
        _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) End",str);
        CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo);
#endif
#ifdef _SCRIPT_INFO_
        GetGame()->AddScriptInfo(str, timeGetTime() - BeginTime);
        m_RunTime = 0;
#endif
        pTempScript->ResetVariableList();
        PushFreeScript(pTempScript);
        M_FREE( str, sizeof(char)*MAX_VAR_LEN );
    }
    return retFlag;
}
JBoolean
JDiscreteEquality::ValueValid
	(
	const JIndex value
	)
	const
{
	return JConvertToBoolean( 1 <= value &&
				value <= (GetVariableList())->GetDiscreteValueCount(GetVariableIndex()) );
}
void
JDiscreteEquality::Print
	(
	ostream& output
	)
	const
{
	PrintVariable(output);
	output << ' ' << JPGetEqualityString() << ' ';
	const JString& valueName =
		(GetVariableList())->GetDiscreteValueName(GetVariableIndex(), itsValue);
	valueName.Print(output);
}
JBoolean
JDiscreteEquality::Evaluate()
	const
{
	JIndex arrayIndex;
	if (EvaluateArrayIndex(&arrayIndex))
		{
		return JConvertToBoolean(
			(GetVariableList())->GetDiscreteValue(GetVariableIndex(), arrayIndex) == itsValue );
		}
	else
		{
		return kJFalse;
		}
}
void
JXExprEditor::EvaluateSelection()
	const
{
	const JFunction* f;
	if (!GetConstSelectedFunction(&f))
		{
		f = GetFunction();
		}

	JXExprEvalDirector* newDir =
		new JXExprEvalDirector((GetWindow())->GetDirector(),
							   GetVariableList(), *f);
	assert( newDir != NULL );
	newDir->Activate();
}
JBoolean
JVariableValue::Evaluate
	(
	JFloat* result
	)
	const
{
	JIndex arrayIndex;
	if (EvaluateArrayIndex(&arrayIndex))
		{
		return (GetVariableList())->
			GetNumericValue(GetVariableIndex(), arrayIndex, result);
		}
	else
		{
		return kJFalse;
		}
}
Пример #12
0
  m_CurrentPlugin = pOldPlugin;            \
	return vaResult;                       


// get variable for a particular plugin

VARIANT CMUSHclientDoc::GetPluginVariable(LPCTSTR PluginID, LPCTSTR VariableName) 
{
GET_PLUGIN_STUFF (GetVariable (VariableName))
}   // end of CMUSHclientDoc::GetPluginVariable

// get variable list for a particular plugin

VARIANT CMUSHclientDoc::GetPluginVariableList(LPCTSTR PluginID) 
{
GET_PLUGIN_STUFF (GetVariableList ())
}   // end of CMUSHclientDoc::GetPluginVariableList

// get trigger list for a particular plugin

VARIANT CMUSHclientDoc::GetPluginTriggerList(LPCTSTR PluginID) 
{
GET_PLUGIN_STUFF (GetTriggerList ())
}    // end of CMUSHclientDoc::GetPluginTriggerList

// get alias list for a particular plugin

VARIANT CMUSHclientDoc::GetPluginAliasList(LPCTSTR PluginID) 
{
GET_PLUGIN_STUFF (GetAliasList ())
}     // end of CMUSHclientDoc::GetPluginAliasList
Пример #13
0
double CScript::CreateCollectionEx(const char* CmdStr, char* retStr)
{
    CGUID ret;
    ret = NULL_GUID;

    // 返回的guid变量名
    char* szRetGUID = GetStringParam(CmdStr, 0);
    if(!szRetGUID) return -1;
    //##获取lRegionID的编号,如果是0,则设置为当前场景的id
    char* rgnID	= GetStringParam( CmdStr, 9 );
    if(!rgnID)
    {
        M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN );
        return -1;
    }

    CGUID lRegionID;

    if(CScript::GetGeneralVariableList())
        lRegionID = CScript::GetGeneralVariableList()->GetGuidValue(rgnID);
    if(lRegionID == NULL_GUID && p_SrcShape)
        lRegionID = ((CPlayer*)p_SrcShape)->GetVariableList()->GetGuidValue(rgnID);
    if(lRegionID == NULL_GUID)
        lRegionID = GetVariableList()->GetGuidValue(rgnID);

    if( lRegionID == NULL_GUID && m_pRegion )
    {
        lRegionID = m_pRegion->GetExID();
    }

    char* p			= GetStringParam( CmdStr, 1 );
    if( p != NULL )
    {
        double nCounts 	= GetIntParam( CmdStr, 2 );
        double nLeft		= GetIntParam( CmdStr, 3 );
        double nTop		= GetIntParam( CmdStr, 4 );
        double nRight		= GetIntParam( CmdStr, 5 );
        double nBottom	= GetIntParam( CmdStr, 6 );
        char* strStart = GetStringParam( CmdStr, 7 );
        char* strEnd	= GetStringParam(CmdStr,8);
        double rgnType		= GetIntParam( CmdStr, 10 );
        int   iDir			= GetIntParam(CmdStr, 11);

        if( nCounts == ERROR_CODE || nLeft == ERROR_CODE || nRight == ERROR_CODE ||
                nTop == ERROR_CODE || nBottom == ERROR_CODE )
        {
            M_FREE( p, sizeof(char)*MAX_VAR_LEN );
            M_FREE( strStart, sizeof(char)*MAX_VAR_LEN );
            M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN );
            M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN );
            M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN );
            return 0.0f;
        }
        if (iDir==ERROR_CODE || iDir== INVILID_VALUE)
        {
            iDir= -1;
        }

        CServerRegion* pRegion	= NULL;

        switch((eRgnType)(long)rgnType)
        {
        case RGN_NORMAL:
            pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_NORMAL, lRegionID);
            break;
        case RGN_PERSONAL_HOUSE:
            pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_PERSONAL_HOUSE, lRegionID);
            break;
        case RGN_PERSONAL:
            pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_PERSONAL, lRegionID);
            break;
        case RGN_TEAM:
            pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_TEAM, lRegionID);
            break;
        }

        if( pRegion == NULL )
            pRegion = static_cast<CServerRegion*>( m_pRegion );

        if( pRegion )
        {
            LONG lNewX = 0;
            LONG lNewY = 0;
            pRegion -> GetRandomPosInRange( lNewX, lNewY, nLeft, nTop, nRight - nLeft, nBottom - nTop );
            CCollection* pLeader = pRegion -> AddCollection( p, lNewX, lNewY,iDir );
            if( pLeader == NULL )
            {
                M_FREE( p, sizeof(char)*MAX_VAR_LEN );
                M_FREE( strStart, sizeof(char)*MAX_VAR_LEN );
                M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN );
                M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN );
                M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN );
                return 0;
            }

            //设置返回值guid
            if(szRetGUID)
            {
                int retFlag = SetScriptGuidValue((CMoveShape*)p_SrcShape, szRetGUID, pLeader->GetExID());
            }
            // 添加脚本
            if (strStart && strcmp(strStart,"0")!=0)
            {
                pLeader->SetStartCollectScript(strStart);
            }
            if (strEnd && strcmp(strEnd,"0")!=0)
            {
                pLeader->SetEndCollectScript(strEnd);
            }

            ret = pLeader -> GetExID();

            for (int i=0; i<nCounts-1; i++)
            {
                pRegion -> GetRandomPosInRange( lNewX, lNewY, nLeft, nTop, nRight - nLeft, nBottom - nTop );
                pLeader = pRegion -> AddCollection( p, lNewX, lNewY, rand()%8 );
                if (pLeader)
                {
                    if (strStart)
                    {
                        pLeader->SetStartCollectScript(strStart);
                    }
                    if (strEnd)
                    {
                        pLeader->SetEndCollectScript(strEnd);
                    }
                }
            }
        }


        M_FREE( p, sizeof(char)*MAX_VAR_LEN );
        M_FREE( strStart, sizeof(char)*MAX_VAR_LEN );
        M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN );
    }

    M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN );
    M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN );
    return 0.0f;
}