Comando solo disponible en un virtual world
#1

Buenas, querнa saber como hacer para que un comando solo funcione en un virtual world, por ejemplo en el 0, alguien podrнa ponerme un ejemplo con cualquier comando?
Reply
#2

Es muy facil, aqui un ejemplo:

pawn Код:
CMD:prueba(playerid, params[])
{
    if(GetPlayerVirtualWorld(playerid) == 0)
    {
         // Codigo a ejecutarse si el usuario esta en el VirtualWorld 0.
    }
    else SendClientMessage(playerid, -1, "No esta en el VirtualWorld 0.");
    return 1;
}
Un saludo.

EDIT: Bytytus te ganй, xD.
Reply
#3

pawn Код:
#include <a_samp>

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        if(GetPlayerVirtualWorld(playerid) == TU VIRTUAL WORD)
        {
             //TU FUNCIONES
             //TU FUNCIONES
             //TU FUNCIONES
        }
        else
        {
             SendClientMessage(playerid, -1, "no estas en el VirtualWorld correspondiente!");
        }
        return 1;
    }
    return 0;
}
https://sampwiki.blast.hk/wiki/GetPlayerVirtualWorld

EDIT:
me gano oOFotherOo
Reply
#4

Gracias chicos, pero tengo un problema lo he intentado mil veces y no consigo adaptar este cуdigo para que solo ejecute esta funciуn en el virtual world 0:

Код:
forward oxigeno();
public  oxigeno()
{
    new respirar;
    new Float:salud__;
    for(new i=0,j=GetMaxPlayers(); i < j; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i)) {
        respirar = GetPlayerAltitude(i);
        if(respirar > 700)
        {
            if(GetPlayerSkin(i) == 277)
            {
               SendClientMessage(i, COLOR_GREEN, "Respirando...");
            }
            else
            {
                GetPlayerHealth(i,salud__);
                if(salud__ < 5) {
                    SetPlayerHealth(i,0.00);
                }
                else {
                    SetPlayerHealth(i, -5.00);
                }
                SendClientMessage(i, COLOR_RED, "Te has ahogado!");
            }
        }
    }
}
Reply
#5

pawn Код:
forward oxigeno();
public  oxigeno()
{
    new respirar;
    new Float:salud__;
    for(new i=0,j=GetMaxPlayers(); i < j; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
        if(GetPlayerVirtualWorld(playerid) != 0) return 1; //_<---
        respirar = GetPlayerAltitude(i);
        if(respirar > 700)
        {
            if(GetPlayerSkin(i) == 277)
            {
               SendClientMessage(i, COLOR_GREEN, "Respirando...");
            }
            else
            {
                GetPlayerHealth(i,salud__);
                if(salud__ < 5) {
                    SetPlayerHealth(i,0.00);
                }
                else {
                    SetPlayerHealth(i, -5.00);
                }
                SendClientMessage(i, COLOR_RED, "Te has ahogado!");
            }
        }
    }
}
o este

pawn Код:
forward oxigeno();
public  oxigeno()
{
    new respirar;
    new Float:salud__;
    for(new i=0,j=GetMaxPlayers(); i < j; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPlayerVirtualWorld(playerid) == 0) //<-------
    {
        respirar = GetPlayerAltitude(i);
        if(respirar > 700)
        {
            if(GetPlayerSkin(i) == 277)
            {
               SendClientMessage(i, COLOR_GREEN, "Respirando...");
            }
            else
            {
                GetPlayerHealth(i,salud__);
                if(salud__ < 5) {
                    SetPlayerHealth(i,0.00);
                }
                else {
                    SetPlayerHealth(i, -5.00);
                }
                SendClientMessage(i, COLOR_RED, "Te has ahogado!");
            }
        }
    }
}
Reply
#6

Facil.

pawn Код:
forward oxigeno();
public  oxigeno()
{
        new respirar;
        new Float:salud__;
        for(new i=0,j=GetMaxPlayers(); i < j; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i)) {
        respirar = GetPlayerAltitude(i);
        if(GetPlayerVirtualWorld(i) == 0)
        {
           if(respirar > 700)
           {
               if(GetPlayerSkin(i) == 277)
               {
                  SendClientMessage(i, COLOR_GREEN, "Respirando...");
               }
               else
              {
                  GetPlayerHealth(i,salud__);
                  if(salud__ < 5) {
                     SetPlayerHealth(i,0.00);
                 }
                 else {
                    SetPlayerHealth(i, -5.00);
                }
                SendClientMessage(i, COLOR_RED, "Te has ahogado!");
            }
        }
     }
   }
}
PD: Te recomiendo estudiar mas el lenguaje PAWNO.

Un saludo.

EDIT: Te recomiendo que uses el segundo codigo de Bytytus.
Reply
#7

Me da los siguientes warnings:

Quote:

error 017: undefined symbol "playerid"
function "oxigeno" should return a value

EDIT: Espera el de oOFotherOo me compila bien ahora digo si me funciona en el gm
EDIT2: Ok el segundo de bytytus ahora si me funciona xD

PD: Gracias
Reply
#8

Quote:
Originally Posted by sergios
Посмотреть сообщение
Me da los siguientes warnings:
Disculpa no me di cuenta a tiempo de que no tenias definido playerid en el Callback, el codigo ya esta arreglado.

Un saludo.

EDIT: Recomiendo que uses MAX_PLAYERS en vez de GetMaxPlayers, ya que MAX_PLAYERS ejecuta mucho mas rбpido que GetMaxPlayers.
Reply
#9

Quote:
Originally Posted by oOFotherOo
Посмотреть сообщение
Disculpa no me di cuenta a tiempo de que no tenias definido playerid en el Callback, el codigo ya esta arreglado.

Un saludo.

EDIT: Recomiendo que uses MAX_PLAYERS en vez de GetMaxPlayers, ya que MAX_PLAYERS ejecuta mucho mas rбpido que GetMaxPlayers.
No sй si esta resuelto el tema, pero comento especialmente por este comentario que hiciste.
Y estбs equivocado, es un tema que lo he consultado hasta con n3ptun0 e ******, y la MEJOR forma de hacer un bucle for es usando GetMaxPlayers, a no ser que se use el undef y vuelvas a definir MAX_PLAYERS.

Si no se usa el undef la mejor forma serнa esta:
pawn Код:
new total = GetMaxPlayers(); //Es cierto que ocupa memoria la variable, y llamo GetMaxPlayers fuera, si lo pusiera en el bucle serнa llamado tantas veces como el valor que devuelve.
for (new x; x < total; x++) //Ya que aquн tenemos un valor fijo (total) ya no se llama la funciуn tantas veces, y es exacto el nъmero de slots, no serнa 500.
Esa es una forma, pero la MEJOR+ es esta:
pawn Код:
#include <a_samp>
//---
#undef  MAX_PLAYERS
#define MAX_PLAYERS                              (50) //Nъmero de slots que usas.
//---
//Los otros includes.

//---Bucle for.
for (new x; x < MAX_PLAYERS; x++)
//Tenemos el valor exacto en MAX_PLAYERS, no se llama GetMaxPlayers, y no usamos variable.
Las diferencias no son muy grandes, pero el error general, es que se usa el MAX_PLAYERS (500) cuando se crean matrices, entonces usan MUCHНSIMA memoria en vano si nosotros no usamos 500 slots.
Quiero decir que si usбramos 500 slots se puede dejar tal como estб por defecto.

OFF: Mi perro es guay, el tuyo es un lobo loco.
Reply
#10

Quote:
Originally Posted by [DOG]irinel1996
Посмотреть сообщение
No sй si esta resuelto el tema, pero comento especialmente por este comentario que hiciste.
Y estбs equivocado, es un tema que lo he consultado hasta con ******, y la MEJOR forma de hacer un bucle for es usando GetMaxPlayers, a no ser que se use el undef y vuelvas a definir MAX_PLAYERS.

Si no se usa el undef la mejor forma serнa esta:
pawn Код:
new total = GetMaxPlayers(); //Es cierto que ocupa memoria la variable, y llamo GetMaxPlayers fuera, si lo pusiera en el bucle serнa llamado tantas veces como el valor que devuelve.
for (new x; x < total; x++) //Ya que aquн tenemos un valor fijo (total) ya no se llama la funciуn tantas veces, y es exacto el nъmero de slots, no serнa 500.
Esa es una forma, pero la MEJOR+ es esta:
pawn Код:
#include <a_samp>
//---
#undef  MAX_PLAYERS
#define MAX_PLAYERS                              (50) //Nъmero de slots que usas.
//---
//Los otros includes.

//---Bucle for.
for (new x; x < MAX_PLAYERS; x++)
//Tenemos el valor exacto en MAX_PLAYERS, no se llama GetMaxPlayers, y no usamos variable.
Las diferencias no son muy grandes, pero el error general, es que se usa el MAX_PLAYERS (500) cuando se crean matrices, entonces usan MUCHНSIMA memoria en vano si nosotros no usamos 500 slots.
Quiero decir que si usбramos 500 slots se puede dejar tal como estб por defecto.

OFF: Mi perro es guay, el tuyo es un lobo loco.
Lo sй, es que se me olvidу mencionar lo de redefinir MAX_PLAYERS.

PD: Mi perro es capas de devorar al tuyo :P.

Un saludo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)