GangZoneCreate Ayuda pls
#1

Hola amgos del samp como puedo hacer para que al ejecutar un comando por ejemplo /GangSkin me aparesca un ganzone con las dimensiones ya establecidas y el centro sea el skin como se ve en la imagen... Pienso que seria dinamico algo asi, la verdad no se.... desconosco un poco el tema.



eso es todo saludos
Reply
#2

Puedes hacerlo sumбndole y restбndole a las coordenadas, ejemplo;

pawn Код:
new Float:px, Float:py, Float:pz;
GetPlayerPos(playerid, px, py, pz);

new Float:gzRatio = 50; // tamaсo de la gangzone desde el centro

new
    Float:minx = px - gzRatio,
    Float:maxx = px + gzRatio,
    Float:miny = py - gzRatio,
    Float:maxy = py + gzRatio;

// Ahora creas la gangzone usando minx, miny, maxx, maxy

GangZoneCreate(minx, miny, maxx, maxy, ..)
Reply
#3

Quote:
Originally Posted by lucesita
Посмотреть сообщение
Puedes hacerlo sumбndole y restбndole a las coordenadas, ejemplo;

pawn Код:
new Float:px, Float:py, Float:pz;
GetPlayerPos(playerid, px, py, pz);

new Float:gzRatio = 50; // tamaсo de la gangzone desde el centro

new
    Float:minx = px - gzRatio,
    Float:maxx = px + gzRatio,
    Float:miny = py - gzRatio,
    Float:maxy = py + gzRatio;

// Ahora creas la gangzone usando minx, miny, maxx, maxy

GangZoneCreate(minx, miny, maxx, maxy, ..)
Muchas gracias.. por responder pero me dices como llamo al Ganzone para que me aparesca utilizando el comando /gangskin?
Reply
#4

Ejemplo:

PHP код:
new
    
playerGangZone[MAX_PLAYERS] = {-1, ...},
    
Float:playerGangZoneRadio[MAX_PLAYERS] = {50.0, ...}
;
public 
OnPlayerConnect(playerid)
{
    
playerGangZone[playerid] = -1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    if(
playerGangZone[playerid] != -1)
    {
        
GangZoneDestroy(playerGangZone[playerid]);
    }
}
CMD:gangskin(playeridparams[])
{
    new
        
id = -1
    
;
    if((
id CreateGangZoneInPlayer(playerid)) == -1)
        return 
0// No se pudo crear la GangZone por alguna razon, no hay espacio, etc..
    
playerGangZone[playerid] = id;
    
UpdatePlayerGangZoneToPlayer(playeridplayerGangZone[playerid]);
    return 
1;
}
stock CreateGangZoneInPlayer(playeridFloat:gzRatio 50.0)
{
    new
        
Float:px,
        
Float:py,
        
Float:pz
    
;
        
    
playerGangZoneRadio[playerid] = gzRatio;
    
    
GetPlayerPos(playeridpxpypz);
    return 
GangZoneCreate((px playerGangZoneRadio[playerid]), (py playerGangZoneRadio[playerid]), (px playerGangZoneRadio[playerid]), (py playerGangZoneRadio[playerid]));
}
stock RefreshGangZoneForPlayer(playeridall_active false)
{
    new
        
gz_id playerGangZone[playerid]
    ;
    if(
gz_id != -1)
        return 
0;
    if(!((
gz_id != -1) && <= gz_id MAX_GANG_ZONES))
        return 
0;
    
GangZoneDestroy(gz_id);
    
    if((
playerGangZone[playerid] = CreateGangZoneInPlayer(playeridplayerGangZoneRadio[playerid])) != -1)
    {
        
UpdatePlayerGangZoneToPlayer(all_active != false ? -666 playeridplayerGangZone[playerid]);
    }
    return 
1;
}
stock UpdatePlayerGangZoneToPlayer(playeridgz_id)
{
    if(!((
gz_id != -1) && <= gz_id MAX_GANG_ZONES))
        return 
0;
    if(
playerid == -666)
    {
        
GangZoneShowForAll(gz_id0x000000FF);
    }
    else
    {
        if(!
IsPlayerConnected(playerid))
            return 
0;
            
        
GangZoneShowForPlayer(playeridgz_id0x000000FF);
    }
    return 
1;

Tenemos las siguientes funciones:

* CreateGangZoneInPlayer(playerid, Float:gzRatio = 50.0)
* RefreshGangZoneForPlayer(playerid, all_active = false)
* UpdatePlayerGangZoneToPlayer(playerid, gz_id)

La primera funcion crea una gangzone alrededor del jugador (codigo de Lucesita), con el parametro opcional de el rango de la GangZone, dentro de la funcion hace:

* Obtener la posicion del jugador,
* Crear la GangZone definiendo sus posiciones con el max y min de "x" Y "y"

Si me preguntas el por que retorna -1, o alguien lo hace, se puede realizar a base de algo tan simple como esto:

PHP код:
new id;
    
    for(new 
iMAX_GANG_ZONES+5i++)
    {
        
id GangZoneCreate(0000);
        
        
printf("%i"id);
    } 
Ya que en la wiki no nos dice lastimosamente el valor que retorna en caso de no crearse (lo cual no es tan necesario ya que suele ser intuitivo)

Ahora, en el comando vemos que se asigna en "id" el valor que retorne el uso de esta funcion, si no retorna -1 en todo caso utilizara la funcion: UpdatePlayerGangZoneToPlayer(playerid, playerGangZone[playerid]);

Lo cual tiene algunas caracteristicas:

* Si playerid es -666 mostrara la gangzone a todo el servidor, todos los jugadores (aunque aca no se si al desconectarse y conectarse se siga mostrando por lo que ahi tendras que hacer algo para que los nuevos que se conectan la vean en caso de que sea a todos los jugadores)

PHP код:
public OnPlayerSpawn(playerid)
{
    foreach(new 
Player)
    {
        if(
playerGangZone[i] != -1)
        {
            
GangZoneShowForPlayer(playeridplayerGangZone[i], 0x000000FF);
        }
    }

Sin embargo aca depende del dinamismo de tu script, yo solamente hice que almacene las variables del ID del GangZone y el radio de este, puedes hacer que almacene si se lo muestre a todos los jugadores, junto al color, etc.. Eso depende del dinamismo que piensen andar.

* En caso de playerid != -666 se lo mostrara al mismo jugador, el comando lo tiene asi.

Y tenemos la ultima funcion, RefreshGangZoneForPlayer la cual no se aplica en el script sin embargo se ha dejado por si es a lo que tu te refieres como "dinamico"

* Obtiene el ID del gangzone que sea de propiedad del jugador
* Comprueba que exista y sea valida
* La destruye
* Crea una nueva GangZone y se la setea a la variable de la GangZone que se destruye (No es necesario resetear la variable, si no existe forma de crear GangZone automaticamente la seteara a -1, en caso contrario la sobrescribira)

* En caso de que la GangZone se haya creado satisfactoriamente, la muestra dependiendo del parametro opcional que permite o mostrarsela solo al propietario del GangZone o a todo el server.

Asi basicamente es el "mapeo" mental que se llevan las GangZones.
Reply
#5

Muchas gracias sume copilo perfecto pero, al ejecutar el comando /gangskin no pasa nada?? no se crea el GangZone Que sera
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)