SA-MP Forums Archive
[Ayuda] VirtualWorlds - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: [Ayuda] VirtualWorlds (/showthread.php?tid=187836)



[Ayuda] VirtualWorlds - JoseDeLaVilla - 05.11.2010

holaaa...
queria saber si existe alguna funcion para determinar si un jugador entra a X virtual world..
la necesito xq quiero hacer para que cuando X jugador entre a X world, guarde sus armas y cuando vuelva al world normal se las devuelva, se hacer lo de las armas pero nose como definir cuando entre a otro world distinto..
seria como la funcion del streamer de incognito para definir cuando entra a X area o X checkpoint
me pueden ayudar

desde ya gracias


Re: [Ayuda] VirtualWorlds - Miguel - 05.11.2010

No, pero hay formas muy faciles de hacer un callback que haga exactamente los mismo. Por ejemplo, yo voy a crear una funciуn personalizada, en ella cambio el mundo virtual y de una vez llamo el callback personalizado.

pawn Код:
forward OnPlayerVirtualWorldChange(playerid, newvwid, oldvwid); // newvwid y oldvwid significan "new virtual world id y old virtual world id".
public OnPlayerVirtualWorldChange(playerid, newvwid, oldvwid)
{
    return 1;
}

stock SetPlayerVirtualWorldEx(playerid, worldid)
{
    OnPlayerVirtualWorldChange(playerid, worldid, GetPlayerVirtualWorld(playerid));
    SetPlayerVirtualWorld(playerid, worldid);
    return 1;
}
Lo ъnico que tendrнa que hacer ahora serнa usar la funciуn SetPlayerVirtualWorldEx, en vez de la normal.


Respuesta: [Ayuda] VirtualWorlds - JoseDeLaVilla - 05.11.2010

mmm entonces como seria para colocar cuando salga de un world y entre en otro?
osea como utilizar los newvwid y oldvwid
perdon x mi ignorancia :S


Re: Respuesta: [Ayuda] VirtualWorlds - cocolabush - 05.11.2010

Quote:
Originally Posted by JoseDeLaVilla
Посмотреть сообщение
mmm entonces como seria para colocar cuando salga de un world y entre en otro?
osea como utilizar los newvwid y oldvwid
perdon x mi ignorancia :S
lo que podes hacer es usar las funciones que te dio miguel y agregarle arrays como:
pawn Код:
#define VWUsados 50
new Jugador_VW[MAX_PLAYERS][2];
new Jugador_ArmasPorVW[MAX_PLAYERS][VWUsados][13][2]; // puse VWUsados por la cantidad de VW que vas a usar... no pongo el maximo xq es 2,147,483,647...
                   // modificalo del #define que puse arriba
y lo que deberias hacer dentro del callback de miguel es:

pawn Код:
public OnPlayerVirtualWorldChange(playerid, newvwid, oldvwid)
{
    for(new i = 0; i < 13; i++)
    {
        GetPlayerWeaponData(playerid, i, Jugador_ArmasPorVW[playerid][oldvwid][i][0], Jugador_ArmasPorVW[playerid][oldvwid][i][1]);
    }
    ResetPlayerWeapons(playerid);
    for(new i = 0; i < 13; i++)
    {
        GivePlayerWeapon(playerid, Jugador_ArmasPorVW[playerid][newvwid][i][0], Jugador_ArmasPorVW[playerid][newvwid][i][1]);
    }
    return 1;
}
eso si... no te olvides de reiniciar las armas al conectarse un nuevo jugador, ya que sino puede que el id 0 consiga buenas armas en un vw , y despues entre otra persona con el mismo id al mismo vw y le caigan de yapa las armas.

pawn Код:
public OnPlayerConnect(playerid)
{
 //...
    for(new i1 = 0; i1 < VWUsados; i1++)
    {
        for(new i2 = 0; i2 < 13; i2++)
        {
            Jugador_ArmasPorVW[playerid][i1][i2][0] = 0;
            Jugador_ArmasPorVW[playerid][i1][i2][1] = 0;
        }
    }
 //...
}
...
agrego que acabo de crearlo aca mismo... asique es probable que le falte algun ";" o algo ... fijate si te va...


Respuesta: [Ayuda] VirtualWorlds - JoseDeLaVilla - 05.11.2010

ya me perdi, sinceramente me mareaste demasiado xd


Re: [Ayuda] VirtualWorlds - Miguel - 05.11.2010

El uso del callback es muy simple, si has usado alguna vez "OnPlayerStateChange" sabrбs como hacerlo.

Sino:
pawn Код:
public OnPlayerVirtualWorldChange(playerid, newvwid, oldvwid)
{
    // Aqui se pone el codigo para cuando el jugador simplemente cambia de mundo.
    // Sin revisar a que mundo virtual cambiу.
    if(newvwid == NUEVO_MUNDO// NUEVO_MUNDO se tiene que cambiar al mundo virtual deseado.
    {
         // Esto es lo que pasa cuando el jugador entra al mundo especificado (NUEVO_MUNDO).
    }
    if(oldvwid == VIEJO_MUNDO) // Cambiar VIEJO_MUNDO para el virtual world deseado.
    {
        // Aquн se pone lo que va a pasar cuando el jugador cambie de mundo y...
        // Su mundo anterior fuй el valor que has puesto en NUEVO_MUNDO.
    }
    if(newvwid == x && oldvwid == x) // Sustituir x por el mundo nuevo y viejo
    {
         // Lo que pasa cuando entras a al mundo especificado "x" y a la vez estas dejando el viejo "x".
    }
    return 1;
}
Ejemplo:
pawn Код:
public OnPlayerVirtualWorldChange(playerid, newvwid, oldvwid)
{
    new
        string[86];
       
    format(string, sizeof(string), "El jugador %d ha cambiado al mundo virtual %d.", playerid, newvwid);
    SendClientMessageToAll(0xFFFFFFFF, string);
   
    if(newvwid == 50)
    {
        format(string, sizeof(string), "El jugador %d ha cambiado al mundo virtual 50.", playerid);
        SendClientMessageToAll(0xFFFFFFFF, string);
    }
    if(oldvwid == 0)
    {
        format(string, sizeof(string), "El jugador %d ha cambiado de mundo virtual, pero antes estaba en el mundo virtual 0.", playerid);
        SendClientMessageToAll(0xFFFFFFFF, string);
    }
    if(oldvwid == 0 && newvwid == 10)
    {
        format(string, sizeof(string), "El jugador %d ha cambiado del mundo virtual 0 al 10.", playerid);
        SendClientMessageToAll(0xFFFFFFFF, string);
    }
    return 1;
}



Respuesta: [Ayuda] VirtualWorlds - JoseDeLaVilla - 05.11.2010

mmm gracias miguel por tus respuestas pero esto me da un problema, ya que el guardado de armas y todo eso, lo tengo en el fs de administracion, y los cambios de worlds, estan en el gm, osea que en el gm tengo q usar SetPlayerVirtualWorld nose si me entiendes...


Re: [Ayuda] VirtualWorlds - Miguel - 05.11.2010

Okay, lo que vas a tener que hacer es:
Ahora CREO que lo vas a poder utilizar en los dos.


Respuesta: [Ayuda] VirtualWorlds - JoseDeLaVilla - 06.11.2010

gracias a todas sus respuestas y en especial a ti Miguel, me ayudaron mucho, pueden cerrar...