Comando /salir
#1

Tengo este comando, sirve cuando pones /salir en un negocio pero cuando estás en una casa y pones /salir no hace nada.

Код:
CMD:salir(playerid, params[])
{
	if(PlayerInfo[playerid][pConectado] == 1)
	{
		for(new n = 0; n < sizeof(NegocioInfo); n ++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 2.0, NegocioInfo[n][nIntX], NegocioInfo[n][nIntY], NegocioInfo[n][nIntZ]) && GetPlayerVirtualWorld(playerid) == NegocioInfo[n][nSQLID])
			{
				SetPlayerPosEx(playerid, NegocioInfo[n][nPosX], NegocioInfo[n][nPosY], NegocioInfo[n][nPosZ], 0, 0, 0);
				PlayerInfo[playerid][pInterior] = 0, PlayerInfo[playerid][pVirtualWorld] = 0;
				return 1;
			}
		}
		for(new c = 0; c < sizeof(CasaInfo); c ++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 2.0, CasaInfo[c][cIntX], CasaInfo[c][cIntY], CasaInfo[c][cIntZ]) && GetPlayerInterior(playerid) == CasaInfo[c][cSQLID] && GetPlayerVirtualWorld(playerid) == CasaInfo[c][cSQLID])
			{
				SetPlayerPosEx(playerid, CasaInfo[c][cPosX], CasaInfo[c][cPosY], CasaInfo[c][cPosZ], 0, 0, 0);
				return 1;
			}
		}
	}
	return 1;
}
Reply
#2

PHP код:
    if(IsPlayerInRangeOfPoint(playerid2.0CasaInfo[c][cIntX], CasaInfo[c][cIntY], CasaInfo[c][cIntZ])
    {
        if(
GetPlayerVirtualWorld(playerid) == )//Tiene que ser igual al virtualworld del interior, para eso crea una variable 
        
{
            
SetPlayerPosEx(playeridCasaInfo[c][cPosX], CasaInfo[c][cPosY], CasaInfo[c][cPosZ], 000);
            return 
1;
        } 
Reply
#3

No quiero ser el tнpico que te comenta una mejora a tu cуdigo, pero es inevitable. He visto varios gamemodes que tienen asн sus bucles cuando existen funciones y a lo mejor colaboro a que alguien vea una mejor forma de hacer eso asн.

El problema al que me refiero no es solo a "cуmo se ve el code" sino a que limitas mucho deteniendo toda la funcionalidad que podrнa tener en un futuro tu cуdigo mбs abajo de donde retornas la funciуn.

PHP код:
CMD:salir(playeridparams[])
{
    if(!(
PlayerInfo[playerid][pConectado] == && IsPlayerConnected(playerid)))
        return 
0;
    new 
id = -1;
    if((
id Negocio_PuertaInterior(playerid)) != -1)
    {
        
// Ademas, aca seteas la pos y tienes parametros para vw y int, no los usas por inseguridad y esa inseguridad hace que tu servidor no tenga algunas caracteristicas que a veces se vuelven utiles.
        
SetPlayerPosEx(playeridNegocioInfo[id][nPosX], NegocioInfo[id][nPosY], NegocioInfo[id][nPosZ], 000); 
        
        
// Si dejas tu codigo asi no puedes poner negocios en otros VW o Interiores
        
PlayerInfo[playerid][pInterior] = 0;
        
PlayerInfo[playerid][pVirtualWorld] = 0;
    }
    else if((
id Casa_PuertaInterior(playerid)) != -1)
    {
        
// El mismo problema, no casas en otro VW o Int que no sea el cero
        
SetPlayerPosEx(playeridCasaInfo[c][cPosX], CasaInfo[c][cPosY], CasaInfo[c][cPosZ], 000);
    }
    else{
        
SendClientMessage(playerid0xFFFFFFFF"No estas cerca de una puerta!");
    }
    return 
1;
}
stock Negocio_PuertaInterior(playerid)
{
    for(new 
0sizeof(NegocioInfo); ++)
    {
        if(
IsPlayerInRangeOfPoint(playerid2.0NegocioInfo[n][nIntX], NegocioInfo[n][nIntY], NegocioInfo[n][nIntZ]) && GetPlayerVirtualWorld(playerid) == NegocioInfo[n][nSQLID])
        {
            return 
n;
        }
    }
    return -
1;
}
stock Casa_PuertaInterior(playerid)
{
    for(new 
0sizeof(CasaInfo); ++)
    {
        if(
IsPlayerInRangeOfPoint(playerid2.0CasaInfo[c][cIntX], CasaInfo[c][cIntY], CasaInfo[c][cIntZ]) && GetPlayerInterior(playerid) == CasaInfo[c][cSQLID] && GetPlayerVirtualWorld(playerid) == CasaInfo[c][cSQLID])
        {
            return 
i;
        }
    }
    return -
1;

Reply
#4

Muchas gracias wharlos y en especial _Zume, tomé tu código y gracias por brindar la ayuda, +REP a los 2 si es que puedo, siempre doy REP, saludos!

Aprovechando el tema... no creo que lo lean a tiempo ó algo, pero cuando pongo /crearneg o casa por ejemplo, se crea todo bien pero debería de crearse un MapIcon y no lo hace, tengo que reiniciar el servidor para que se vea, a qué se podrá deber? así tengo esto.

Код:
CasaInfo[TotalCasas][cMapIco] = CreateDynamicMapIcon(CasaInfo[TotalCasas][cPosX], CasaInfo[TotalCasas][cPosY], CasaInfo[TotalCasas][cPosZ], 31, 0, -1, -1, TotalCasas, 50.0);
Comando completo..

Код:
CMD:crearcasa(playerid, params[])
{
	if(PlayerInfo[playerid][pAdmin] < 0) return 0;
    TotalCasas++;
	new
	    Float:PosX[MAX_PLAYERS], Float:PosY[MAX_PLAYERS], Float:PosZ[MAX_PLAYERS], Float:Angle[MAX_PLAYERS];
	GetPlayerPos(playerid, PosX[playerid], PosY[playerid], PosZ[playerid]);
	GetPlayerFacingAngle(playerid, Angle[playerid]);

	new
	    Query[120];
	format(Query, sizeof(Query), "INSERT INTO ev_casas (cSQLID, cPosX, cPosY, cPosZ) VALUES ('%d', '%f', '%f', '%f')", TotalCasas, PosX[playerid], PosY[playerid], PosZ[playerid]);
	mysql_function_query(MySQL, Query, true, "OnQueryFinish_", "ii", 0, playerid);

    new
	    ZonaCasa[MAX_ZONE_NAME];
    GetPlayer2DZone(playerid, ZonaCasa, MAX_ZONE_NAME);
    format(CasaInfo[TotalCasas][cDireccion], 30, ZonaCasa);
    
	CasaInfo[TotalCasas][cSQLID] = TotalCasas;
	CasaInfo[TotalCasas][cPosX] = PosX[playerid];
	CasaInfo[TotalCasas][cPosY] = PosY[playerid];
	CasaInfo[TotalCasas][cPosZ] = PosZ[playerid];
	CasaInfo[TotalCasas][cIntX] = 2365.0168;
	CasaInfo[TotalCasas][cIntY] = -1135.3094;
	CasaInfo[TotalCasas][cIntZ] = 1050.8750;
	CasaInfo[TotalCasas][cPrecio] = 50000;
	CasaInfo[TotalCasas][cNivel] = 5;
	CasaInfo[TotalCasas][cInterior] = 0;
	CasaInfo[TotalCasas][cVirtualWorld] = CasaInfo[TotalCasas][cSQLID];
	CasaInfo[TotalCasas][cPuerta] = 0;
	CasaInfo[TotalCasas][cEstado] = 0;

	new
	    Float:Mirilla[3];
	GetPlayerCameraPos(playerid, Mirilla[0], Mirilla[1], Mirilla[2]);

	CasaInfo[TotalCasas][cMirX] = Mirilla[0];
	CasaInfo[TotalCasas][cMirY] = Mirilla[1];
	CasaInfo[TotalCasas][cMirZ] = Mirilla[2];
	CasaInfo[TotalCasas][cMirA] = Angle[playerid];
	CasaInfo[TotalCasas][cMapIco] = CreateDynamicMapIcon(CasaInfo[TotalCasas][cPosX], CasaInfo[TotalCasas][cPosY], CasaInfo[TotalCasas][cPosZ], 31, 0, -1, -1, TotalCasas, 50.0);
    CasaInfo[TotalCasas][cPickup] = CreateDynamicPickup(1273, 1, PosX[playerid], PosY[playerid], PosZ[playerid]);
	CasaInfo[TotalCasas][cTexto] = CreateDynamic3DTextLabel("", COLOR_BLANCO, PosX[playerid], PosY[playerid], PosZ[playerid], 5.0);
	format(CasaInfo[TotalCasas][cPropietario], 32, "El Estado");
	format(CasaInfo[TotalCasas][cDescripcion], 32, "Sin descripción"), GuardarCasa_(TotalCasas);
	ActualizarTextoCasa(TotalCasas);
	return 1;
}
Reply
#5

Yo eso sobre que si el label, pickup entre otros lo tengo aparte en un callback, con una restricciуn de que si esta creada y con las funciones del streamer por ejemplo

Quote:

if(IsValidDynamicMapIcon(CasaInfo[TotalCasas][cMapIco])) DestroyDynamicMapIcon(CasaInfo[TotalCasas][cMapIco]);

Eso que colocas de ultimo "ActualizarTextoCasa" me imagino que debe ser el callback de actualizar el label, hay puedes colocar la funciуn
Reply
#6

Quote:
Originally Posted by wharlos
Посмотреть сообщение
Yo eso sobre que si el label, pickup entre otros lo tengo aparte en un callback, con una restricciуn de que si esta creada y con las funciones del streamer por ejemplo



Eso que colocas de ultimo "ActualizarTextoCasa" me imagino que debe ser el callback de actualizar el label, hay puedes colocar la funciуn
Lo había puesto en ActualizarTextoCasa que es para el label y tampoco funcionó, aplicaba funciones que actualizaban el texto y no se mostraba el MapIcon... si tiene que reiniciar el servidor.
Reply
#7

Es mejor que quites en el comando el pickup, label y el map icon, colocar todo eso en el callback de Actualizar, despuйs de hacer la consulta de la casa creada es que debes llamar el callback Actualizar
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)