Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Mensajes recientes

#91
Desarrollo de Servidores / Restricciones de nombres "_"
Último mensaje por Swarlog - Feb 04, 2023, 12:50 AM
Información Adicional:

Pues básicamente es para evitar que se conecten a vuestro servidor aquellos usuarios que no contenga el "_" en su nombre.

Código:

En OnPlayerConnect:

new string[256];
NombreValidador(playerid);
if(NombreValidador(playerid) == 0)
{
new pNombre[MAX_PLAYER_NAME];
GetPlayerName(playerid, pNombre, sizeof(pNombre));
SendClientMessage(playerid, COLOR, "AYUDA: Tu nombre no es válido. Debe ser un nombre real.");
SendClientMessage(playerid, COLOR, "AYUDA: Tu nombre tiene que seguir el formato de Nombre_Apellido (Mayúsculas incluidas)");
Kick(playerid);
format(string, 256, "Servidor: %s ha sido auto-kickeado, Razon: Nombre NO-RP", pNombre);
SendClientMessageToAll(COLOR, string);
return 1;
}

forward NombreValidador(playerid);
public NombreValidador(playerid)
{
if(IsPlayerConnected(playerid))
{
new pNombre[MAX_PLAYER_NAME],underline=0;
GetPlayerName(playerid, pNombre, sizeof(pNombre));
if(strfind(pNombre,"[",true) != (-1)) return 0;
else if(strfind(pNombre,"]",true) != (-1)) return 0;
else if(strfind(pNombre,"$",true) != (-1)) return 0;
else if(strfind(pNombre,"(",true) != (-1)) return 0;
else if(strfind(pNombre,")",true) != (-1)) return 0;
else if(strfind(pNombre,"=",true) != (-1)) return 0;
else if(strfind(pNombre,"@",true) != (-1)) return 0;
else if(strfind(pNombre,"1",true) != (-1)) return 0;
else if(strfind(pNombre,"2",true) != (-1)) return 0;
else if(strfind(pNombre,"3",true) != (-1)) return 0;
else if(strfind(pNombre,"4",true) != (-1)) return 0;
else if(strfind(pNombre,"5",true) != (-1)) return 0;
else if(strfind(pNombre,"6",true) != (-1)) return 0;
else if(strfind(pNombre,"7",true) != (-1)) return 0;
else if(strfind(pNombre,"8",true) != (-1)) return 0;
else if(strfind(pNombre,"9",true) != (-1)) return 0;
new maxname = strlen(pNombre);
for(new i=0; i<maxname; i++)
{
if(pNombre[i] == '_') underline ++;
}
if(underline != 1) return 0;
pNombre[0] = toupper(pNombre[0]);
for(new x=1; x<maxname; x++)
{
if(pNombre[x] == '_') pNombre[x+1] = toupper(pNombre[x+1]);
else if(pNombre[x] != '_' && pNombre[x-1] != '_') pNombre[x] = tolower(pNombre[x]);
}
SetPlayerName(playerid, "Nuevo_Nombre");
SetPlayerName(playerid, pNombre);
return 1;
}
return 0;
}
#92
Desarrollo de Servidores / Tutorial del Servidor
Último mensaje por Swarlog - Feb 04, 2023, 12:50 AM
Información Adicional:

Aquí os lo dejo, se que muchos lo buscan y no lo encuentran debido al nombre que tiene, asi que he decidido implementarlo en esta sección. Espero que os resuelvan las dudas y os sirva de gran ayuda.

Se trata del código necesario para que cuando un jugador nuevo entre al servidor, pues le aparezcan unas series de ventanas de guia, en resumen, un video tutorial para los nuevos usuarios de vuestro servidor.


Código:

forward Tutorial(playerid);
public Tutorial(playerid)
{
// El jugador es inmortal durante el tutorial:
SetPlayerHealth(playerid,10000.0);

// Mostrar textos del tutorial:
TextDrawShowForPlayer(playerid,Titulo);
TextDrawShowForPlayer(playerid,Linea1);

// Posicionamiento de la camara:
SetPlayerPos(playerid, 2058.0435, 795.3118, 13.6523);
SetPlayerCameraPos(playerid, 2058.0435, 795.3118, 13.6523);
SetPlayerCameraLookAt(playerid, 2058.0195, 796.3133, 13.6524);

// Textos a mostrar:
TextDrawSetString(Titulo,"~b~Bienvenido a nuestro servidor!");
TextDrawSetString(Linea1,"Es hora de conocer las zonas y funciones mas importanes!");

// Siguiente tutorial:
SetTimerEx("Tutorial1", 10000, false, "u", playerid);

return 1;
}

forward Tutorial1(playerid);
public Tutorial1(playerid)
{
// Mostrar textos del tutorial:
TextDrawShowForPlayer(playerid,Titulo);
TextDrawShowForPlayer(playerid,Linea1);
TextDrawShowForPlayer(playerid,Linea2);
TextDrawShowForPlayer(playerid,Linea3);

// Posicionamiento de la camara:
SetPlayerPos(playerid, 2058.0435, 795.3118, 13.6523);
SetPlayerCameraPos(playerid, 2058.0435, 795.3118, 13.6523);
SetPlayerCameraLookAt(playerid, 2058.0195, 796.3133, 13.6524);

// Textos a mostrar:
TextDrawSetString(Titulo,"~b~Segunda ventana del tutorial!");
TextDrawSetString(Linea1,"Aqui la info que deseeis para vuestro propio tutorial!");

// Siguiente tutorial:
SetTimerEx("TutorialFin", 10000, false, "u", playerid);

return 1;
}

forward TutorialFin(playerid);
public TutorialFin(playerid)
{
// Mostrar textos del tutorial:
TextDrawHideForPlayer(playerid,Titulo);
TextDrawHideForPlayer(playerid,Linea1);
TextDrawHideForPlayer(playerid,Linea2);
TextDrawHideForPlayer(playerid,Linea3);

// Textos a mostrar:
TextDrawSetString(Titulo,"~g~COMENCEMOS A JUGAR!");
TextDrawSetString(Linea1,"Ahora estais en modo mortal, cuidado con lo que haces!");

// El jugador es mortal al finalizar el tutorial:
SetPlayerHealth(playerid, 100.0);

// Posicionamiento de la camara:
SetCameraBehindPlayer(playerid);
SetPlayerPos(playerid, 1687.8295,1446.6049,10.7682);

return 1;
}
#93
Desarrollo de Servidores / Sistema de Head-Shot
Último mensaje por Swarlog - Feb 04, 2023, 12:50 AM
Información Adicional:

Básicamente es el código para que tengamos en nuestro servidor, un sistema de tiro a la cabeza o como bien lo conoceis, Head Shot!

Código:

#define TIMER_INTERVAL 150
new maxPlayers;

// On gameModeInit //
maxPlayers = GetMaxPlayers();
SetTimer("HeadShot", TIMER_INTERVAL, 1);
return 1;


//OnePlayerDeath//
    if(GetPVarInt(playerid, "Headshot") == 1)
    {
        SetPVarInt(playerid, "Headshot", 0);
        GameTextForPlayer(playerid, "~r~Headshot", 3000, 3);
        GameTextForPlayer(killerid, "~r~Headshot", 3000, 3);
    }
    return 1;
}

forward HeadShot();
public HeadShot()
{
    new index;
    for(new playerid; playerid < maxPlayers; playerid++)
    {
        if(IsPlayerConnected(playerid))
        {
            index = GetPlayerAnimationIndex(playerid);
            if(index == 1173 || index == 1175 || index == 1177 || index == 1178)
            {
                SetPVarInt(playerid, "Headshot", 1);
                SetPlayerHealth(playerid, 0);
            }
        }
    }

    return 1;
#94
Desarrollo de Servidores / Info de la faccion
Último mensaje por Swarlog - Feb 04, 2023, 12:49 AM
Información Adicional:

Es un código que encontre y al igual que a mi os puede servir. Con el os informara, mediante un comando, de todos los jugadores conectados de vuestra faction.

Código:

if(strcmp(cmd,"/members",true)==0)
{
new teamnumber;
if (PlayerInfo[playerid][pLeader] != 0) teamnumber = PlayerInfo[playerid][pLeader];
else if (PlayerInfo[playerid][pMember] != 0) teamnumber = PlayerInfo[playerid][pMember];
else if (PlayerInfo[playerid][pFMember] != 255) teamnumber = PlayerInfo[playerid][pFMember];
else
{
SendClientMessage(playerid, COLOR_GRAD1, "You are not a member of an organization!");
return 1;
}
new alevel[25], alevel2[25];
if(PlayerInfo[playerid][pDivision] == 1) { alevel = "TNR"; }
else if(PlayerInfo[playerid][pDivision] == 2) { alevel = "CID"; }
else if(PlayerInfo[playerid][pDivision] == 3) { alevel = "HSIU"; }
else if(PlayerInfo[playerid][pDivision] == 4) { alevel = "SWAT"; }
else if(PlayerInfo[playerid][pDivisionLeader] == 1) { alevel2 = "TNR"; }
else if(PlayerInfo[playerid][pDivisionLeader] == 2) { alevel2 = "CID"; }
else if(PlayerInfo[playerid][pDivisionLeader] == 3) { alevel2 = "HSIU"; }
else if(PlayerInfo[playerid][pDivisionLeader] == 4) { alevel2 = "SWAT"; }

SendClientMessage(playerid, 0x808000AA, "Members Online:");
foreach (Player, i)
{
if (IsPlayerConnected(i))
{
GetPlayerRPName(i, sendername, sizeof(sendername));
format(string, sizeof(string), "");
if(PlayerInfo[playerid][pLeader] || PlayerInfo[playerid][pMember])
{
if (PlayerInfo[i][pLeader] == teamnumber && PlayerInfo[i][pDivisionLeader])
{
format(string, sizeof(string), "%s (Leader), Division: %s",sendername, alevel2);
}
else if (PlayerInfo[i][pLeader] == teamnumber && PlayerInfo[i][pDivisionLeader])
{
format(string, sizeof(string), "%s (Leader)",sendername);
}
else if (PlayerInfo[i][pMember] == teamnumber && PlayerInfo[i][pDivision] != 0)
{
format(string, sizeof(string), "%s, Rank: %d, Division: %s",sendername, PlayerInfo[i][pRank], alevel);
}
else if (PlayerInfo[i][pMember] == teamnumber && PlayerInfo[i][pDivision] == 0)
{
format(string, sizeof(string), "%s, Rank: %d.",sendername, PlayerInfo[i][pRank]);
}
}
else if(PlayerInfo[playerid][pFMember] != 255)
{
if (PlayerInfo[i][pFMember] == teamnumber)
{
format(string, sizeof(string), "%s, Rank: %d.",sendername, PlayerInfo[i][pRank]);
}
}
if (strlen(string) > 1) SendClientMessage(playerid, 0xF5DEB3AA, string);
}
}
}
#95
Desarrollo de Servidores / Subir/Bajar nivel de busqueda ...
Último mensaje por Swarlog - Feb 04, 2023, 12:49 AM
Información Adicional:

Ya que estamos poniendo temas relacionados con el sistema de busquedas (las estrellas), os dejo este código para subir o bajar mediante el uso de un comando el nivel de busqueda del jugador.

Código:

if (strcmp("/subirnivel", cmdtext, true, 10) == 0)
{
new oldlevel;
new newlevel;

oldlevel = GetPlayerWantedLevel(playerid);
newlevel = oldlevel + 1;
SetPlayerWantedLevel(playerid, newlevel);
SendClientMessage(playerid, 0xFF0000AA,"Vuestro nivel de busqueda ha aumentado!");

return 1;
}

if (strcmp("/bajarnivel", cmdtext, true, 10) == 0)
{
new oldlevel;
new newlevel;

oldlevel = GetPlayerWantedLevel(playerid);
newlevel = oldlevel + 1;
SetPlayerWantedLevel(playerid, newlevel);
SendClientMessage(playerid, 0xF6F600F6,"Vuestro nivel de busqueda ha bajado!");

return 1;
}
#96
Desarrollo de Servidores / Cambios de estado
Último mensaje por Swarlog - Feb 04, 2023, 12:49 AM
Información Adicional:

Como dice el titulo, se trata del code que os permitira mediante el uso de comandos, cambiar el estado de vuestro personaje, ya sea estado negativo o positivo. Esta bastante bien para servidores de roll.

Código:

/======Includes=============
#include <a_samp>
#include <zcmd>
#include <sscanf2>
//=======Colores=============
#define NEGATIVO 0xFF0000FF
#define POSITIVO 0x00FF00FF
//=======news===============
new bool:ConEstado[MAX_PLAYERS];
new Text3D:estado[MAX_PLAYERS];
//=======comandos==============
CMD:estado(playerid,params[])
{
new estadoo[200],str[256],mensaje[256];
if(ConEstado[playerid] == true) return SendClientMessage(playerid,NEGATIVO,"Ya estas con un estado. Usa /quitarestado");
if(sscanf(params, "s[128]", estadoo) )return SendClientMessage(playerid,POSITIVO,"Uso: /estado [ESTADO] ");
format(str, sizeof(str), "Estado: {FFFFFF}%s",estadoo);
format(mensaje, sizeof(mensaje), "Te pusiste el estado: {FFFFFF}%s",estadoo);
estado[playerid] = Create3DTextLabel(str,POSITIVO,30.0,40.0,5.0,40.0,1);
Attach3DTextLabelToPlayer(estado[playerid], playerid, 0.0, 0.0, 0.40);
SendClientMessage(playerid, POSITIVO, mensaje);
SendClientMessage(playerid, POSITIVO, "Para borrar tu estado usa {FFFFFF}/quitarestado");
ConEstado[playerid] = true;
return 1;
}
CMD:quitarestado(playerid,params[])
{
if(ConEstado[playerid] == true){
SendClientMessage(playerid,POSITIVO,"Has Quitado tu estado actual!");
Delete3DTextLabel(estado[playerid]);
ConEstado[playerid] = false; return 1; }
if(ConEstado[playerid] == false) return SendClientMessage(playerid,NEGATIVO,"No tienes ningun estado puesto,usa /estado");
return 1;
}
#97
Desarrollo de Servidores / Prox detector
Último mensaje por Swarlog - Feb 04, 2023, 12:48 AM
Información Adicional:

Se trata de un detector de distancia, por ejemplo cuando hablas pues que solo te lean los que esten a 10 metros. Esta bastante bueno para servidores de Roll, le da un toque más real a vuestro servidor. Os lo recomiendo!

Código:

forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:posx, Float:posy, Float:posz;
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerConnected(i))
            {
                GetPlayerPos(i, posx, posy, posz);
                tempposx = (oldposx -posx);
                tempposy = (oldposy -posy);
                tempposz = (oldposz -posz);
                if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i))
                {
                    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
                    {
                        SendClientMessage(i, col1, string);
                    }
                    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
                    {
                        SendClientMessage(i, col2, string);
                    }
                    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
                    {
                        SendClientMessage(i, col3, string);
                    }
                    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
                    {
                        SendClientMessage(i, col4, string);
                    }
                    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
                    {
                        SendClientMessage(i, col5, string);
                    }
                }
            }
        }
    }
    return 1;
}
#98
Desarrollo de Servidores / Sistema de venta 24/7 en dialo...
Último mensaje por Swarlog - Feb 04, 2023, 12:48 AM
Información Adicional:

Básicamente es lo que dice el titulo del post, se trata del dialogo de compra en las tiendas 24/7 mediante el comando "/buy". Muy bueno para editarlo y ponerlo al gusto de cada uno.

Código:

OnPlayerCommandText:

if(strcmp(cmdtext,"/buy",true)==0)
 if(IsPlayerInRangeOfPoint(playerid, 10.0, -30.8246,-28.4104,1003.5573))
{
    ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Shop List","$15 - Condoms\n$5 - Chips\n$5 - Cola\n$3 - Burger\n$500 - Civilian Vest\n$100 - Camera\n$50 - Baseball Bat\n$50 - Wooden Cane\","Purchase","Exit");
       return 1;
}

OnDialogResponse:

if(dialogid==1 && response==1)
if(dialogid==1 && response==1)
{

switch(listitem)
    {
        case 0:
        {
        if(GetPlayerMoney(playerid) <15) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid,0xFF9900AA,"You have bought condoms for $15!");
        GivePlayerMoney(playerid, -15);
        SetPlayerArmour(playerid, pArmour+5);
            }
        case 1:
        {
        if(GetPlayerMoney(playerid) <9) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a bag of chips for $5");
        GivePlayerMoney(playerid, -9);
        ApplyAnimation(playerid,"VENDING", "vend_eat1_P",4.1,0,1,1,1,1,1);
        }
        case 2:
        {
        if(GetPlayerMoney(playerid) <3) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pHealth;
        GetPlayerHealth(playerid, Float:pHealth);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a can of cola for $3");
        GivePlayerMoney(playerid, -3);
        SetPlayerHealth(playerid, pHealth+10);
        }
        case 3:
        {
        if(GetPlayerMoney(playerid) <3) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a burger for $3");
        SetPlayerAttachedObject(playerid, 4, 2880, 5);
        GivePlayerMoney(playerid, -3);
        ApplyAnimation(playerid,"VENDING", "vend_eat1_P",4.1,0,1,1,1,1,1);
        SetPlayerArmour(playerid, pArmour+3);
        SendClientMessage(playerid, 0xD6D6D6AA, "((Use {219900}/removeobjects{D6D6D6} to remove the object!))");
        }
        case 4:
        {
        if(GetPlayerMoney(playerid) <500) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a Civilian vest for $500");
        GivePlayerMoney(playerid, -500);
        SetPlayerArmour(playerid, pArmour+50);
        }
        case 5:
        {
        if(GetPlayerMoney(playerid) <100) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a {13D4A3}Camera{D6D6D6} for $100");
        GivePlayerMoney(playerid, -125);
        GivePlayerWeapon(playerid, 43, 100);
        }
        case 6:
        {
        if(GetPlayerMoney(playerid) <35) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a {13D4A3}Baseball Bat{D6D6D6} for $50");
        GivePlayerMoney(playerid, -50);
        GivePlayerWeapon(playerid, 5, 0);
        }
        case 7:
        {
        if(GetPlayerMoney(playerid) <50) return SendClientMessage(playerid,0xAA3333AA, "You do not have enough money!");
        new Float:pArmour;
        GetPlayerArmour(playerid, Float:pArmour);
        SendClientMessage(playerid, 0xD6D6D6AA, "You purchased a {13D4A3}Wooden Cane{D6D6D6} for $50");
        GivePlayerMoney(playerid, -50);
        GivePlayerWeapon(playerid, 15, 0);
        }
#99
Desarrollo de Servidores / Ataque Zombie
Último mensaje por Swarlog - Feb 04, 2023, 12:47 AM
Información Adicional:

Creado por Big Clucker, se trata de un script de su gm en donde si eres un zombie atacas mediante el boton "KEY_WALK" y ataca de forma aleatoria sobre el objetivo.Muy bueno, os lo recomiendo!

Código:

if (newkeys & KEY_WALK)
    {
        new victim = JugadorCercano(playerid);
        if(gTeam[playerid] == EZOMBIE)
        {
             if(DistanciaEntreJugadores(playerid, victim) <2)
             {
                if(gTeam[victim] == EHUMANO)
                {
                    new Float:health;
                    if(JugadorInfo[victim][jInfectado] == 0)
                    {
                        SetTimerEx("MordidaA", 10000, false, "d", victim);
                        SetPlayerWeather(victim, 41);
                    }
                    JugadorInfo[victim][jInfectado] = 1;
                    GameTextForPlayer(victim,"[Zombie]: ~w~Arghh!",6000,5);
                    PlayerPlaySound(victim, 1130, 0.0, 0.0, 0.0);
                    PlayerPlaySound(playerid, 1130, 0.0, 0.0, 0.0);//
                    Herido[victim] = 1;
                    JugadorInfo[playerid][jExp] += 1;
                    new which_message = random(5);
                    if(which_message == 0)
                    {
                        format(string, sizeof(string), "* %s le da un arañazo a %s.*", NombreJugador(playerid), NombreJugador(victim));
                        MandarMensajeCercano(30.0, playerid, string, ROSA,ROSA,ROSA,ROSA,ROSA);
                        GetPlayerHealth(victim, health);
                        SetPlayerHealth(victim, health-8);
                    }
                    else if(which_message == 1)
                    {
                        format(string, sizeof(string), "* %s le da un mordisco a %s.*", NombreJugador(playerid), NombreJugador(victim));
                        MandarMensajeCercano(30.0, playerid, string, ROSA,ROSA,ROSA,ROSA,ROSA);
                        GetPlayerHealth(victim, health);
                        SetPlayerHealth(victim, health-13);
                    }
                    else if(which_message == 2)
                    {
                        format(string, sizeof(string), "* %s le da un Manotazo a %s.*", NombreJugador(playerid), NombreJugador(victim));
                        MandarMensajeCercano(30.0, playerid, string, ROSA,ROSA,ROSA,ROSA,ROSA);
                        GetPlayerHealth(victim, health);
                        SetPlayerHealth(victim, health-7);
                    }
                    else if(which_message == 3)
                    {
                        format(string, sizeof(string), "* %s le da un empujon a %s.*", NombreJugador(playerid), NombreJugador(victim));
                        MandarMensajeCercano(30.0, playerid, string, ROSA,ROSA,ROSA,ROSA,ROSA);
                        GetPlayerHealth(victim, health);
                        SetPlayerHealth(victim, health-5);
                    }
                    else if(which_message == 4)
                    {
                        format(string, sizeof(string), "* %s lanza al suelo a %s.*", NombreJugador(playerid), NombreJugador(victim));
                        MandarMensajeCercano(30.0, playerid, string, ROSA,ROSA,ROSA,ROSA,ROSA);
                        GetPlayerHealth(victim, health);
                        SetPlayerHealth(victim, health-10);
                    }
                }
            }
            else
            {
                GameTextForPlayer(playerid,"No hay nadie cerca !",6000,5);
            }
        }
#100
Desarrollo de Servidores / Checkpoint Aleatorios
Último mensaje por Swarlog - Feb 04, 2023, 12:47 AM
Información Adicional:

Código para añadir checkpoint aleatorios de una lista que creemos de coordeadas.

Código:

new Float:RandFCP[8][3] =
{
    {-2454.2170, 503.8759, 30.0790},
    {-2669.7322, -6.0874, 6.1328},
    {-2796.9854, 1224.8180, 20.5429},
    {-2454.2170, 503.8759, 30.0790},
    {-2669.7322, -6.0874, 6.1328},
    {-2796.9854, 1224.8180, 20.5429},
    {-2454.2170, 503.8759, 30.0790},
    {-2669.7322, -6.0874, 6.1328}
}

SetPlayerCheckpoint(playerid,RandFCP[random(sizeof(RandFCP))][0], RandFCP[random(sizeof(RandFCP))][1], RandFCP[random(sizeof(RandFCP))][2]);