示例#1
0
//设置目标变量GUID的值
double CScript::SetDestGuidVar(const char* cmd, char* retStr)
{
	double dbRet = 0;
	CMoveShape* pMoveShape = dynamic_cast<CMoveShape*>(p_DesShape);
	if(!pMoveShape)	return dbRet;

	char* szValueName= GetStringParam(cmd,0);
	if(szValueName)
	{
		if( strlen(szValueName) >= 2 && szValueName[0]=='@')
		{
			char* szGuidName = GetStringParam(cmd,1);
			if(szGuidName )
			{
				if(p_SrcShape)
				{
					const CGUID& guid = GetScriptGuidValue((CMoveShape*)p_SrcShape, szGuidName);
					pMoveShape->GetVariableList()->SetGuidValue(szValueName,&guid);
				}
				M_FREE( szGuidName, sizeof(char)*MAX_VAR_LEN );
			}
		}
		M_FREE( szValueName, sizeof(char)*MAX_VAR_LEN );
	}

	return dbRet;
}
// 修改脚本变量
double CScript::UpdateScriptVarValue(const char* CmdStr, char* retStr)
{
	//初始为错误
	CScript::SCRIPTRETURN retFlag  = CScript::SR_ERROR;
	char *str=GetStringParam(CmdStr, 0);
	if (str)
	{
		char *szValue = GetStringParam(CmdStr, 1);
		if(szValue && p_SrcShape)
		{
			DelPlayerTalkBoxScript(m_guSrcID, SR_FUNC_UPDATEVARVALUE);

			//等待函数, 收到回应消息再运行脚本
			SetIsHang(true);
			SetHangFunc(SR_FUNC_UPDATEVARVALUE);

			// 记录要修改的变量名
			SetClientUpdateVarName(szValue);

			CMessage msg(MSG_S2C_OTHER_UPDATEVARVALUEOPEN);
			msg.Add(GetID());
			msg.Add(str);
			msg.Add(szValue);
			msg.SendToPlayer(p_SrcShape->GetExID());			
		}
		M_FREE( szValue, sizeof(char)*MAX_VAR_LEN );	
		M_FREE( str, sizeof(char)*MAX_VAR_LEN );
	}
	return 1.0f;
}
示例#3
0
//得到目标字符串变量的值
double CScript::GetDestStrVar(const char* cmd, char* retStr)
{
	double dbRet = 0;
	CMoveShape* pMoveShape = dynamic_cast<CMoveShape*>(p_DesShape);
	if(!pMoveShape)	return dbRet;
	
	char* szValueName= GetStringParam(cmd,0);
	if(szValueName)
	{
		if( strlen(szValueName) >= 2 && szValueName[0]=='#')
		{
			char* szRetName = GetStringParam(cmd,1);
			if(szRetName)
			{
				const char* szValue = pMoveShape->GetVariableList()->GetVarValue(szValueName);
				if(szValue && p_SrcShape)
				{
					SetScriptVarValue(dynamic_cast<CMoveShape*>(p_SrcShape),szRetName,szValue);
				}
				M_FREE( szRetName, sizeof(char)*MAX_VAR_LEN );
			}
		}
		M_FREE( szValueName, sizeof(char)*MAX_VAR_LEN );
	}

	return dbRet;
}
示例#4
0
double CScript::SetAttrStr(const char* CmdStr, char* retStr)
{
	OBJECT_TYPE type;
	CGUID id;

	if(!GetSrcShape()) return -1.0f;

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

		char* pIdName = GetStringParam(CmdStr, 1);
		if(!pIdName) return -1.0f;

		id = GetScriptGuidValue((CMoveShape*)GetSrcShape(), pIdName);

		CMoveShape* shape = NULL;

		char* name = GetStringParam(CmdStr, 2);

		if(!name)
		{
			M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
			return -1.0f;
		}

		const char* strValue = GetStringParam(CmdStr, 3);
		if(!strValue)
		{
			M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
			M_FREE( name, sizeof(char)*MAX_VAR_LEN );
			return -1.0f;
		}

		if(NULL_GUID == id) // 默认id=0时,直接调用SrcShape的SetAttr接口
		{
			shape = (CMoveShape*)GetSrcShape();
		}
		else
		{
			shape = GetGame()->FindShape(type, id);
		}

		if(shape)
		{
			SetScriptVarValue(shape, name, strValue);
		}

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

	return -1.0f;
}
示例#5
0
double CScript::GetLotteryRe(const char* CmdStr, char* retStr)
{
	CPlayer* player= dynamic_cast<CPlayer*>(p_SrcShape);
	DWORD LotteryRe = 0;

	char *pGuidName = GetStringParam(CmdStr, 0);
	if(!pGuidName) return 0;

	CGUID guid;
	char* szVarName = GetStringParam(CmdStr, 1);
	if(!szVarName)
	{
		M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN );
		return 0;
	}

	if (pGuidName[0] == '\0')
	{
		LotteryRe = player->GetLotteryRe();
		int ret = SetScriptVarValue((CMoveShape*)p_SrcShape, szVarName, CGoodsFactory::QueryGoodsName(LotteryRe));
		M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN );
		M_FREE( szVarName, sizeof(char)*MAX_VAR_LEN );
		return ret;
	}
	return LotteryRe;
}
//界面帮助提示
double CScript::InterfaceHint(const char* cmd, char* retStr)
{
	int nRet = 0;
	char* pszScriptName=GetStringParam(cmd,0);
	if( pszScriptName )
	{
		long lFutureDelTime = static_cast<long>(GetIntParam(cmd, 1));
		if( lFutureDelTime != ERROR_CODE && lFutureDelTime != INVILID_VALUE )
		{
			char* pszInterfaceName=GetStringParam(cmd,2);
			if( pszInterfaceName )
			{
				long lX = static_cast<long>(GetIntParam(cmd, 3));
				long lY = static_cast<long>(GetIntParam(cmd, 4));
				long lWidth = static_cast<long>(GetIntParam(cmd, 5));
				long lHeight = static_cast<long>(GetIntParam(cmd, 6));
				if(lX != ERROR_CODE && lX != INVILID_VALUE &&
					lY != ERROR_CODE && lY != INVILID_VALUE &&
					lWidth != ERROR_CODE && lWidth != INVILID_VALUE &&
					lHeight != ERROR_CODE && lHeight != INVILID_VALUE)
				{
					CPlayer* pPlayer = dynamic_cast<CPlayer*>(p_SrcShape);
					if( pPlayer )
					{
						//添加提示
						nRet = pPlayer->AddInterfaceHint(pszScriptName,lFutureDelTime,pszInterfaceName,lX,lY,lWidth,lHeight);
					}
				}
				M_FREE( pszInterfaceName, sizeof(char)*MAX_VAR_LEN );
			}
		}
		M_FREE( pszScriptName, sizeof(char)*MAX_VAR_LEN );
	}
	return nRet;
}
示例#7
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;
}
示例#8
0
double CScript::FormatGUID(const char* CmdStr, char* retStr)
{
	char * pszGuid = GetStringParam(CmdStr, 0);
	char * pszGuidString = GetStringParam(CmdStr, 1);
	if(pszGuid && pszGuidString)
	{
		CGUID temptGUID(pszGuidString);
		SetScriptGuidValue((CMoveShape*)p_SrcShape,pszGuid,temptGUID);
	}

	M_FREE( pszGuid, sizeof(char)*MAX_VAR_LEN );
	M_FREE( pszGuidString, sizeof(char)*MAX_VAR_LEN );
	return 1;
}
double CScript::SendExpAction(const char* CmdStr, char* retStr/* =NULL */)
{
	double dRet = 0;
	DWORD dwActionID = GetIntParam(CmdStr,0);
	DWORD dwSrcType = GetIntParam(CmdStr,1);
	char*  strSrcGuid = GetStringParam(CmdStr,2); 
	CGUID  guidDest;
	CGUID  guidSrc;
	if (strSrcGuid!=NULL)
	{
		guidSrc = GetScriptGuidValue((CMoveShape*)p_SrcShape, strSrcGuid);
	}
	else
	{
		guidSrc = p_SrcShape->GetExID();
	}
	DWORD dwDestType = GetIntParam(CmdStr,3);
	char*  strDestGuid = GetStringParam(CmdStr,4); 
	if (strDestGuid!=NULL)
	{
		guidDest = GetScriptGuidValue((CMoveShape*)p_SrcShape, strDestGuid);
	}

	if (dwDestType==ERROR_CODE || dwDestType==INVILID_VALUE)
	{
		dwDestType = 0;
	}
	if (guidDest== CGUID::GUID_INVALID)
	{
		guidDest = NULL_GUID;
	}

	if(dwActionID!=ERROR_CODE && dwSrcType!=ERROR_CODE && guidSrc!= CGUID::GUID_INVALID && this->m_pRegion != NULL)
	{
		CMoveShape *pMoveShape = dynamic_cast<CMoveShape*>( m_pRegion->FindChildObject(OBJECT_TYPE(dwSrcType), guidSrc ) );
		CMessage msg(MSG_S2C_OTHER_EXPATC);
		msg.Add(dwActionID);
		msg.Add(dwSrcType);
		msg.Add(guidSrc);
		msg.Add(dwDestType);
		msg.Add(guidDest);
		msg.SendToAround(pMoveShape);
		dRet = 1.0;
	}
	M_FREE( strSrcGuid, sizeof(char)*MAX_VAR_LEN );
	M_FREE( strDestGuid, sizeof(char)*MAX_VAR_LEN );
	return dRet;
}
示例#10
0
double CScript::AddGoodToShortCutBar(const char* cmd, char* retStr)
{
	int nRet = 0;

	char* name=GetStringParam(cmd,0);
	if( name )
	{
		CPlayer* pPlayer = dynamic_cast<CPlayer*>(p_SrcShape);
		if(pPlayer)
		{
			CGoods * pGoods = pPlayer->FindGoodInPack(name);
			//如果检测有该物品
			if(pGoods)
			{
				long  nBarNo = static_cast<long>(GetIntParam(cmd, 1));
				if( nBarNo != ERROR_CODE && nBarNo != INVILID_VALUE)
				{
					pPlayer->SetHotKey(nBarNo, pGoods->GetBasePropertiesIndex());

					CMessage msg(MSG_S2C_SETHOTKEY);
					msg.Add((char)HOTKEY_SET_SUCCEED);
					msg.Add((BYTE)nBarNo);
					msg.Add(pGoods->GetBasePropertiesIndex());
					msg.SendToPlayer(pPlayer->GetExID());	
					nRet = 1;
				}
			}
		}
		M_FREE( name, sizeof(char)*MAX_VAR_LEN );
	}
	return nRet;
}
示例#11
0
double CScript::Play3DSound(const char* cmd, char* retStr/* =NULL */)
{
	char* strFile = GetStringParam(cmd,0);
	long lLoop = GetIntParam(cmd,1);
	long lPosX = GetIntParam(cmd,2);
	long lPosY = GetIntParam(cmd,3);
	long lPosZ = GetIntParam(cmd,4);
	if (strFile)
	{
		if (lLoop != ERROR_CODE && 
			lPosX != ERROR_CODE &&
			lPosY != ERROR_CODE &&
			lPosZ != ERROR_CODE)
		{
			CPlayer* pPlayer = dynamic_cast<CPlayer*>(GetSrcShape());	
			if (pPlayer)
			{
				CMessage msg(MSG_S2C_RGN_PLAY3DSOUND);
				msg.Add(strFile);
				msg.Add(lLoop);
				msg.Add(lPosX);
				msg.Add(lPosY);
				msg.Add(lPosZ);
				msg.SendToPlayer(pPlayer->GetExID());
			}
			
		}
		M_FREE( strFile, sizeof(char)*MAX_VAR_LEN );
	}

	return 1;
}
示例#12
0
double CScript::PlaySound(const char* CmdStr, char* retStr)
{
	CPlayer* pPlayer = dynamic_cast<CPlayer*>(p_SrcShape);
	if(!pPlayer || !m_pRegion)	return 0;

	char* strFile = GetStringParam(CmdStr, 0);
	int  nToAround = GetIntParam(CmdStr, 1);
	if (nToAround == ERROR_CODE)
	{
		nToAround = 0;
	}

	if (strFile)
	{
		CMessage msg(MSG_S2C_RGN_PLAYSOUND);
		msg.Add(strFile);
		//只发给自己
		if(nToAround == 0 && pPlayer)
			msg.SendToPlayer( pPlayer -> GetExID() );
		else
			msg.SendToAround((CServerRegion*)GetRegion(), pPlayer->GetTileX(), pPlayer->GetTileY());

		M_FREE( strFile, sizeof(char)*MAX_VAR_LEN );
	}
	return 1;
}
示例#13
0
double CScript::ShowString(const char* cmd, char* retStr)
{
	CPlayer *pPlayer = dynamic_cast<CPlayer*>(p_SrcShape);
	if(NULL == pPlayer) return -1;

	LONG lScreenPosX = GetIntParam(cmd, 0);
	LONG lScreenPosY = GetIntParam(cmd, 1);

	char* pString = GetStringParam( cmd, 2 );
	if(NULL == pString) return -1;

	LONG lIsShow = GetIntParam(cmd, 3);
	CMessage msg(MSG_S2C_OTHER_SHOW_STRING);
	msg.Add(lIsShow);
	if(0 != lIsShow)
	{
		msg.Add(lScreenPosX);
		msg.Add(lScreenPosY);
		msg.Add(pString);
	}
	msg.SendToPlayer(pPlayer->GetExID(), false);

	M_FREE( pString, sizeof(char)*MAX_VAR_LEN );
	return 1;
}
示例#14
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;
}
示例#15
0
double CScript::OperaInterface(const char* cmd, char* retStr)
{
	int nRet = 0;
	//变化方式
	long lOperaMode = static_cast<long>(GetIntParam(cmd, 0));
	if( lOperaMode != ERROR_CODE && lOperaMode != INVILID_VALUE )
	{
		char* InterfaceName=GetStringParam(cmd,1);
		if( InterfaceName )
		{
			CPlayer* pPlayer = dynamic_cast<CPlayer*>(p_SrcShape);
			if( pPlayer )
			{
#ifdef _DEBUG
				OutputDebugString("\n================发送关闭界面消息=========================\n");
#endif
				CMessage msg(MSG_S2C_OTHER_OPERAINTERFACE);
				msg.Add(lOperaMode);
				msg.Add(InterfaceName);
				msg.SendToPlayer(pPlayer->GetExID());
				nRet = 1;
			}
			M_FREE( InterfaceName, sizeof(char)*MAX_VAR_LEN );
		}
	}
	return nRet;
}
示例#16
0
double CScript::SendWorldCredit(const char* CmdStr, char* retStr)
{
	char* strName = GetStringParam(CmdStr,0);  
	DWORD lCredit = GetIntParam(CmdStr,1);
	DWORD lWorldCredit = GetIntParam(CmdStr,2);

	CMessage msg(MSG_S2C_LOTTERY_MaxTodayPoint);
	msg.Add( (long)lCredit );	
	msg.Add( (char*)strName );	
	msg.SendToPlayer(((CPlayer*)p_SrcShape)->GetExID());	// 发送到客户端

	CMessage msgEx(MSG_S2C_LOTTERY_WorldPoint);
	msgEx.Add( (long)lWorldCredit );	
	msgEx.SendToPlayer(((CPlayer*)p_SrcShape)->GetExID());

	CMessage msgToWSCredit(MSG_S2W_LOTTERY_CHANGEWORLDCREDIT);
	msgToWSCredit.Add((long)lWorldCredit);
	msgToWSCredit.Send();

	CMessage msgToWSName(MSG_S2W_LOTTERY_CHANGEPRECEDE);
	msgToWSName.Add((long)lCredit);
	msgToWSName.Add((char*)strName);
	msgToWSName.Send();
	return 0;
}
示例#17
0
//设置目标整形变量的值,$bound默认为0
double CScript::SetDestIntVar(const char* cmd, char* retStr)
{
	double dbRet = 0;
	CMoveShape* pMoveShape = dynamic_cast<CMoveShape*>(p_DesShape);
	if(!pMoveShape)	return dbRet;

	char* szValueName= GetStringParam(cmd,0);
	if(szValueName)
	{
		if( strlen(szValueName) >= 2 && szValueName[0]=='$')
		{
			long lValue =  GetIntParam(cmd,1);
			if(lValue != ERROR_CODE)
			{
				long lBound = GetIntParam(cmd,2);
				if(lBound == ERROR_CODE)
				{
					lBound = 0;
				}
				dbRet = pMoveShape->GetVariableList()->SetVarValue(szValueName,0,lValue);
			}
		}
		M_FREE( szValueName, sizeof(char)*MAX_VAR_LEN );
	}
	
	return dbRet;
}
示例#18
0
//为当前对象注册一个定时器
double CScript::RegisterTimer(const char* cmd, char* retStr)
{
	int nRet = 0;
	long lfuturetime = static_cast<long>(GetIntParam(cmd, 0));
	if(lfuturetime != ERROR_CODE && lfuturetime != INVILID_VALUE)
	{
		long lInterTime = static_cast<long>(GetIntParam(cmd, 1));
		if(lInterTime != ERROR_CODE && lInterTime != INVILID_VALUE)
		{
			char* pszScriptName=GetStringParam(cmd,2);
			if( pszScriptName )
			{
				long lUserData = static_cast<long>(GetIntParam(cmd, 3));
				if(lUserData != ERROR_CODE && lUserData != INVILID_VALUE)
				{
					CMoveShape* pMoveShape = dynamic_cast<CMoveShape*>(p_SrcShape);
					if( pMoveShape )
					{
						//添加提示
						nRet = pMoveShape->RegisterScriptTimer(lfuturetime,lInterTime,
							pszScriptName,lUserData);
					}
				}
				M_FREE( pszScriptName, sizeof(char)*MAX_VAR_LEN );
			}
		}
	}
	return nRet;
}
示例#19
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;
}
示例#20
0
double CScript::PostPlayerInfo(const char* CmdStr, char* retStr)
{
	if(p_SrcShape==NULL) return 0;

	char* strContend = GetStringParam(CmdStr,0);
	if(strContend == NULL)
	{
		return 0;
	}
	DWORD dwFrColor = static_cast<DWORD>(GetIntParam(CmdStr, 1));
	DWORD dwBkColor = static_cast<DWORD>(GetIntParam(CmdStr, 2));

	if (dwFrColor==ERROR_CODE)
		dwFrColor = 0xffffffff;

	if (dwBkColor==ERROR_CODE)
		dwBkColor = 0xff000000;

	CMessage msg(MSG_S2C_OTHER_ADDPLAYERINFO);
	msg.Add((LONG)0);
	msg.Add(dwFrColor);
	msg.Add(dwBkColor);
	msg.Add(strContend);
	msg.SendToPlayer(p_SrcShape->GetExID());

	M_FREE( strContend, sizeof(char)*MAX_VAR_LEN );
	return 1;
}
示例#21
0
double CScript::PlayVideo(const char* CmdStr, char* retStr)
{
	double ret = 0;	
	char* strFileName = GetStringParam(CmdStr,0);
	long  lLoop = GetIntParam(CmdStr,1);
	long  lX	= GetIntParam(CmdStr,2);
	long  lY	= GetIntParam(CmdStr,3);
	long  lWidth = GetIntParam(CmdStr,4);
	long  lHeight = GetIntParam(CmdStr,5);
	if (p_SrcShape!=NULL && strFileName!=NULL   && lLoop!=ERROR_CODE && lLoop!=INVILID_VALUE 
		&& lX!=ERROR_CODE && lX!=INVILID_VALUE 
		&& lY!=ERROR_CODE && lY!=INVILID_VALUE
		&& lWidth!=ERROR_CODE && lWidth!=INVILID_VALUE
		&& lHeight!=ERROR_CODE && lHeight!=INVILID_VALUE)
	{
		CMessage msg(MSG_S2C_OTHER_PLAY_VIDEO);
		msg.Add(strFileName);
		msg.Add(lLoop);
		msg.Add(lX);
		msg.Add(lY);
		msg.Add(lWidth);
		msg.Add(lHeight);
		msg.SendToPlayer(p_SrcShape->GetExID());
		ret = 1;
	}

	M_FREE( strFileName, sizeof(char)*MAX_VAR_LEN );
	return ret;
}
示例#22
0
//! 获取一个字符串的子串
//! 参数1:要提取的子串的开始位置,从1开始(若输入的位置大于字符串长度,返回失败;若为0,则返回字符串最后一个字节, 若为负数-n则返回除去最后n个字节的字符串)
//! 参数2:要提取的子串的结束位置,从1开始(若输入的位置大于字符串长度,转换为最大长度)
//! 参数3:提取的目标字符串
//! 参数4:返回子串的变量名
//! 返回值:1,提取成功,0,提取失败
double CScript::GetSubString(const char* CmdStr, char* retStr)
{
    long BeginPos = GetIntParam(CmdStr, 0);
    long EndPos = GetIntParam(CmdStr, 1);

    char* pSrcStr =GetStringParam(CmdStr, 2);
    if (NULL == pSrcStr)
        return 0.0f;

    DWORD SrcLen = strlen(pSrcStr);
    if(0 == BeginPos)
    {
        BeginPos = SrcLen;
        EndPos = SrcLen;
    }
    else if (0 > BeginPos)
    {
        EndPos = SrcLen + BeginPos;
        BeginPos = 1;
    }
    else if(EndPos > SrcLen)
        EndPos = SrcLen;

    if (BeginPos > SrcLen || EndPos < BeginPos)
    {
        M_FREE( pSrcStr, sizeof(char)*MAX_VAR_LEN );
        return 0.0f;
    }

    char* pDstName =GetStringParam(CmdStr, 3);
    if (NULL == pDstName)
    {
        M_FREE( pSrcStr, sizeof(char)*MAX_VAR_LEN );
        return 0.0f;
    }

    char szRe[MAX_VAR_LEN] = {0};
    memcpy(szRe, pSrcStr + (BeginPos - 1), EndPos - BeginPos + 1);
    int ret = SetScriptVarValue(dynamic_cast<CMoveShape*>(p_SrcShape), pDstName, szRe);


    M_FREE( pSrcStr, sizeof(char)*MAX_VAR_LEN );
    M_FREE( pDstName, sizeof(char)*MAX_VAR_LEN );

    return ret;
}
示例#23
0
double CScript::SendLotteryChat(const char* CmdStr, char* retStr)
{
	char* strText = GetStringParam(CmdStr,0);  
	CMessage msgToWSName(MSG_S2W_LOTTERY_WORLDINFO);
	msgToWSName.Add((char*)strText);
	msgToWSName.Send();
	return 0;
}
示例#24
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;
}
示例#25
0
double CScript::Goto(const char* CmdStr, char* retStr)
{
    char *str=GetStringParam(CmdStr, 0);
    if (str)
    {
        JumpTo( str );
        M_FREE( str, sizeof(char)*MAX_VAR_LEN );
    }
    return 1;
}
size_t cmCommandLineInfo::ParseSwitch(char **argv, int arg_index, int argc)
{        
    wxString param = argv[arg_index];
    
    // we need this for a switch, at least 2
    if(param.Len() > 1)
    {
        // determine switch type
        switch (param.GetChar(1))
        {
        case 'G':
            // when it's G<.....> we split else we take the 
            // other argc
            if(param.Len() > 2)
            {
                m_GeneratorChoiceString = GetStringParam(param.Mid(2));
                return 1;   // one arg is passed
            }
            else
            {
                if((arg_index+1) < argc)
                {
                    m_GeneratorChoiceString = GetStringParam(wxString(argv[arg_index+1]));
                    return 2;   // two args are passed
                }
            }
            // no luck
            return 0;
    
        case 'Q':
            m_ExitAfterLoad = true;
            return 1;

        // unknown param
        default:
            break;
        }
    }

    // error, unrecognised or too small arg
    return 0;
}
示例#27
0
double CScript::GetDoor(const char* cmd, char* retStr)
{
    char *strTemp=GetStringParam(cmd,0);
    if (strTemp)
    {
        long id=GetIntParam(cmd,1);
        double dRegion=GetIntParam(cmd,2);
        if (id!=ERROR_CODE)
        {
            CServerRegion* pRegion=NULL;
            if (dRegion!=ERROR_CODE)
            {
                pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByTemplateID(RGN_NORMAL, dRegion);
                if(pRegion == NULL)
                    pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByTemplateID(RGN_PERSONAL, dRegion);
                if(pRegion == NULL)
                    pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByTemplateID(RGN_PERSONAL_HOUSE, dRegion);
                if(pRegion == NULL)
                    pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByTemplateID(RGN_TEAM, dRegion);
            }
            else
            {
                CPlayer *pPlayer=dynamic_cast<CPlayer*>(p_SrcShape);
                if(pPlayer)
                    pRegion=dynamic_cast<CServerRegion*>(pPlayer->GetFather());
            }
            if (pRegion)
            {
                if (strcmp("State",strTemp)==0)
                {
                    M_FREE( strTemp, sizeof(char)*MAX_VAR_LEN );
                    return pRegion->GetDoorState(id);
                }
                else if (strcmp("Switch",strTemp)==0)
                {
                    M_FREE( strTemp, sizeof(char)*MAX_VAR_LEN );
                    return pRegion->GetDoorDestroySwitch(id);
                }
                else if (strcmp("Hp",strTemp)==0)
                {
                    M_FREE( strTemp, sizeof(char)*MAX_VAR_LEN );
                    return pRegion->GetDoorHP(id);
                }
                else if (strcmp("MaxHp",strTemp)==0)
                {
                    M_FREE( strTemp, sizeof(char)*MAX_VAR_LEN );
                    return pRegion->GetDoorMaxHP(id);
                }
            }
        }
        M_FREE( strTemp, sizeof(char)*MAX_VAR_LEN );
    }
    return 0;
}
示例#28
0
long ExtObject::eGetTextHeight(LPVAL params, ExpReturn& ret)
{
	cr::rect rc;
	rc.left = 0;
	rc.top = 0;
	rc.right = 0;
	rc.bottom = 0;

	renderer->GetTextSize(iFont, GetStringParam(params, 0), rc);

	return ret = rc.bottom;
}
示例#29
0
status GetFloatParam(vector<parameters>& v, const string p, float& result, float def){
	string tmp = " ";

	status St = GetStringParam(v, p, tmp, " ");
	if (SUCCESS == St){
		result = atof(tmp.c_str());
	}
	else{
		result = def;
		}
	return St;

}
示例#30
0
double CScript::CheckGuidIsNull(const char* cmd, char* retStr)
{
    char* szGuid = GetStringParam(cmd, 0);
    if(!szGuid) return 0.0f;
    const CGUID &tGuid = GetScriptGuidValue((CMoveShape*)GetSrcShape(), szGuid);
    if(tGuid == NULL_GUID)
    {
        M_FREE( szGuid, sizeof(char)*MAX_VAR_LEN );
        return 1.0f;
    }
    M_FREE( szGuid, sizeof(char)*MAX_VAR_LEN );
    return 0.0f;
}