SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 02/07/2012, 01:59 AM   #1
CidadeNovaRP
High-roller
 
CidadeNovaRP's Avatar
 
Join Date: Mar 2012
Posts: 1,120
Reputation: 98
Default CNStreamer - O melhor Streamer BR, será? ^^

Bem, este Streamer tem um uso muito simples, basta adiciona-ló como Include e dar cerca de 10 cliques para configura-lo, teste ele em 2 mapas do dMagnus, que são:
http://forum.sa-mp.com/showthread.php?t=273170
e
http://forum.sa-mp.com/showthread.php?t=282440
Ambos não deram lag nem crash, mas ainda, como todos os outros Streamer's, ha a possibilidade de dar crash se houver muitos objetos em um local só, isso será corrigido na próxima versão onde será deletado os objetos mais longes do jogador para que não houva uma explosão no limite de objetos por jogador do SA-MP.

O código segue abaixo:
pawn Code:
#include <a_samp>



/*                  Configuração:      Valor:    */
      #define       MAX_OBJECTOS       2500
      #define       MIN_INTERVAL       0500
      #define       MAX_DISTANCE       300.0
/*                                               */



#define Loop(%0,%1) for(new %0; %0 < %1; ++%0)
#define Function%0(%1) forward %0(%1); \
public %0(%1)

enum ObjetoI
{
    Model,
    Virtual,
    Interior,
    Float:Draw,
    Float:X,
    Float:Y,
    Float:Z,
    Float:rX,
    Float:rY,
    Float:rZ,
    bool:Criado,
    bool:Movendo
}

enum ObjetoD
{
    Float:X,
    Float:Y,
    Float:Z,
    Float:rX,
    Float:rY,
    Float:rZ,
    Float:Velocidade
}

new ObjetoInfo[MAX_OBJECTOS][ObjetoI], ObjetoData[MAX_OBJECTOS][ObjetoD], ObjectPlayer[MAX_PLAYERS][MAX_OBJECTOS];
new ObjetosCriados[MAX_PLAYERS];

/*
Função
    - cria um objeto definido
Returno
    - returna a o id do objeto criado
Parametros
    - model, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:velocidade, virtualworld, interior
Observações
    - nenhuma
*/

stock CreateObjectEx(model, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:draw = MAX_DISTANCE, virtualworld = 0, interior = 0)
{
    new objid;
    while(objid < MAX_OBJECTOS)
    {
        static bool:AntiFlood;
        if(objid == MAX_OBJECTOS-1 && AntiFlood == false) printf("Limite de %d objetos exedido. Aumente o limite ou retire objetos.", MAX_OBJECTOS), AntiFlood = true;
        if(ObjetoInfo[objid][Criado] == false)
        {
            ObjetoInfo[objid][Criado] = true;
            ObjetoInfo[objid][Model] = model;
            ObjetoInfo[objid][Interior] = interior;
            ObjetoInfo[objid][Virtual] = virtualworld;
            ObjetoInfo[objid][Draw] = draw;
            ObjetoInfo[objid][rZ] = rz;
            ObjetoInfo[objid][rY] = ry;
            ObjetoInfo[objid][rX] = rx;
            ObjetoInfo[objid][Z] = z;
            ObjetoInfo[objid][Y] = y;
            ObjetoInfo[objid][X] = x;
            break;
        }
        ++objid;
    }
    return objid;
}

/*
Função
    - move um objeto definido
Returno
    - returna a 1
Parametros
    - objid, Float:x, Float:y, Float:z, Float:velocidade, Float:rx, Float:ry, Float:rz
Observações
    - nenhuma
*/

stock MoveObjectEx(objid, Float:x, Float:y, Float:z, Float:velocidade, Float:rx = -1000.0, Float:ry = -1000.0, Float:rz = -1000.0)
{
    if(rx == -1000.0) rx = ObjetoInfo[objid][rX];
    else if(ry == -1000.0) ry = ObjetoInfo[objid][rY];
    else if(rz == -1000.0) rz = ObjetoInfo[objid][rZ];
    ObjetoInfo[objid][Movendo] = true;
    ObjetoData[objid][rZ] = rz;
    ObjetoData[objid][rY] = ry;
    ObjetoData[objid][rX] = rx;
    ObjetoData[objid][Z] = z;
    ObjetoData[objid][Y] = y;
    ObjetoData[objid][X] = x;
    ObjetoData[objid][Velocidade] = velocidade;
    return 1;
}

/*
Função
    - para um objeto definido
Returno
    - returna a 1
Parametros
    - objid
Observações
    - ao parar o objeto chama automaticamente a callback "OnObjectMoved"
*/

stock StopObjectEx(objid)
{
    ObjetoInfo[objid][Movendo] = false;
    CallRemoteFunction("OnObjectMoved", "i", objid);
    Loop(i, MAX_PLAYERS)
    {
        StopPlayerObject(i, objid);
    }
    return 1;
}

/*
Função
    - seta o objeto a pos definida
Returno
    - returna a 1
Parametros
    - objid, Float:x, Float:y, Float:z
Observações
    - ao usar a função "SetObjectPosEx", o objeto não para da se mover (caso esteja se movendo)
*/

stock SetObjectPosEx(objid, Float:x, Float:y, Float:z)
{
    ObjetoInfo[objid][Z] = z;
    ObjetoInfo[objid][Y] = y;
    ObjetoInfo[objid][X] = x;
    Loop(i, MAX_PLAYERS)
    {
        SetPlayerObjectPos(i, objid, x, y, z);
    }
    return 1;
}

/*
Função
    - seta o objeto a rotação definida
Returno
    - returna a 1
Parametros
    - objid, Float:rx, Float:ry, Float:rz
Observações
    - nenhuma
*/

stock SetObjectRotEx(objid, Float:rx, Float:ry, Float:rz)
{
    ObjetoInfo[objid][rZ] = rz;
    ObjetoInfo[objid][rY] = ry;
    ObjetoInfo[objid][rX] = rx;
    Loop(i, MAX_PLAYERS)
    {
        SetPlayerObjectRot(i, objid, rx, ry, rz);
    }
    return 1;
}

/*
Função
    - destroi o objeto definido
Returno
    - returna a 1
Parametros
    - objid
Observações
    - nenhuma
*/

stock DestroyObjectEx(objid)
{
    if(ObjetoInfo[objid][Movendo] == true) StopObjectEx(objid);
    ObjetoInfo[objid][Criado] = false;
    return 1;
}

/*
Função
    - verifica se o objeto é valido
Returno
    - returna a 1 se for valido e 0 se não
Parametros
    - objid
Observações
    - nenhuma
*/

stock IsValidObjectEx(objid)
{
    if(ObjetoInfo[objid][Criado] == true) return 1;
    return 0;
}

/*
Função
    - geta as coordenadas de um objeto definido
Returno
    - returna a 1
Parametros
    - objid, &Float:x, &Float:y, &Float:z
Observações
    - nenhuma
*/

stock GetObjectPosEx(objid, &Float:x, &Float:y, &Float:z)
{
    z = ObjetoInfo[objid][Z];
    y = ObjetoInfo[objid][Y];
    z = ObjetoInfo[objid][X];
    return 1;
}

/*
Função
    - geta as rotações de um objeto definido
Returno
    - returna a 1
Parametros
    - objid, &Float:rx, &Float:ry, &Float:rz
Observações
    - nenhuma
*/

stock GetObjectRotEx(objid, &Float:rx, &Float:ry, &Float:rz)
{
    rz = ObjetoInfo[objid][rZ];
    ry = ObjetoInfo[objid][rY];
    rz = ObjetoInfo[objid][rX];
    return 1;
}

/*
Função
    - seta o interior de um objeto definido
Returno
    - returna a 1
Parametros
    - objid, interior
Observações
    - nenhuma
*/

stock SetObjectInterior(objid, interior)
{
    ObjetoInfo[objid][Interior] = interior;
    return 1;
}

/*
Função
    - seta o virtual world de um objeto definido
Returno
    - returna a 1
Parametros
    - objid, interior
Observações
    - virtualworld
*/

stock SetObjectVirtualWorld(objid, virtualworld)
{
    ObjetoInfo[objid][Virtual] = virtualworld;
    return 1;
}

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-( Atualizar os Objetos )-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
Function AtualizarObjetos()
{
    Loop(i, MAX_PLAYERS)
    {
        if(!IsPlayerConnected(i)) continue;
        Loop(objid, MAX_OBJECTOS)
        {
            if(GetPlayerInterior(i) == ObjetoInfo[objid][Interior] && GetPlayerVirtualWorld(i) == ObjetoInfo[objid][Virtual] && IsPlayerInRangeOfPoint(i, ObjetoInfo[objid][Draw], ObjetoInfo[objid][X], ObjetoInfo[objid][Y], ObjetoInfo[objid][Z]) && ObjetoInfo[objid][Criado] == true)
            {
                if(ObjectPlayer[i][objid] == -1)
                {
                    if(ObjetosCriados[i] >= 950) DestroyObjectFromDistance(i), --ObjetosCriados[i];
                    ++ObjetosCriados[i];
                    ObjectPlayer[i][objid] = CreatePlayerObject(i, ObjetoInfo[objid][Model], ObjetoInfo[objid][X], ObjetoInfo[objid][Y], ObjetoInfo[objid][Z], ObjetoInfo[objid][rX], ObjetoInfo[objid][rY], ObjetoInfo[objid][rZ]);
                    if(ObjetoInfo[objid][Movendo] == true) MovePlayerObject(i, ObjectPlayer[objid][i], ObjetoData[objid][X], ObjetoData[objid][Y], ObjetoData[objid][Z], ObjetoData[objid][Velocidade], ObjetoData[objid][rX], ObjetoData[objid][rY], ObjetoData[objid][rZ]);
                }
            }
            else
            {
                DestroyPlayerObject(i, ObjectPlayer[i][objid]);
                ObjectPlayer[i][objid] = -1;
            }
        }
    }
    return 1;
}

stock DestroyObjectFromDistance(playerid)
{
    new Float:objectPos[3], Float:playerDistance = 100000.0, objectId;
    Loop(objid, MAX_OBJECTS)
    {
        GetObjectPos(objid, objectPos[0], objectPos[1], objectPos[2]);
        if(GetPlayerDistanceFromPoint(playerid, objectPos[0], objectPos[1], objectPos[2]) < playerDistance)
        {
            playerDistance = GetPlayerDistanceFromPoint(playerid, objectPos[0], objectPos[1], objectPos[2]);
            objectId = objid;
        }
    }
    DestroyPlayerObject(playerid, objectId);
    return 1;
}

#if defined FILTERSCRIPT
public OnFilterScriptInit()
#else
public OnGameModeInit()
#endif
{
        SetTimer("AtualizarObjetos", MIN_INTERVAL, true);
#if defined FILTERSCRIPT
        return (funcidx("ALSS_OnFilterScriptInit") != -1 ? CallLocalFunction("ALSS_OnFilterScriptInit", "") : 1);
}
        #if defined _ALS_OnFilterScriptInit
                #undef OnFilterScriptInit
        #else
                #define _ALS_OnFilterScriptInit
        #endif
        #define OnFilterScriptInit ALSS_OnFilterScriptInit
forward ALSS_OnFilterScriptInit();
#else
        return (funcidx("ALSS_OnGameModeInit") != -1 ? CallLocalFunction("ALSS_OnGameModeInit", "") : 1);
}
        #if defined _ALS_OnGameModeInit
                #undef OnGameModeInit
        #else
                #define _ALS_OnGameModeInit
        #endif
        #define OnGameModeInit ALSS_OnGameModeInit
forward ALSS_OnGameModeInit();
#endif

//Peguei está ALS desta Include: [url]http://pastebin.com/d4hfMvQx[/url]

public OnPlayerObjectMoved(playerid, objectid)
{
    ObjetoInfo[objectid][Movendo] = false;
    ObjetoInfo[objectid][X] = ObjetoData[objectid][X];
    ObjetoInfo[objectid][Y] = ObjetoData[objectid][Y];
    ObjetoInfo[objectid][Z] = ObjetoData[objectid][Z];
    ObjetoInfo[objectid][rX] = ObjetoData[objectid][rX];
    ObjetoInfo[objectid][rY] = ObjetoData[objectid][rY];
    ObjetoInfo[objectid][rZ] = ObjetoData[objectid][rZ];
    CallRemoteFunction("OnObjectMoved", "i", objectid);
    return 1;
}
#if defined _ALS_OnPlayerObjectMoved
    #undef OnPlayerObjectMoved
#else
    #define _ALS_OnPlayerObjectMoved
#endif
#define OnPlayerObjectMoved gb_OnPlayerObjectMoved
forward gb_OnPlayerObjectMoved(playerid, objectid);

#define CreateObject CreateObjectEx
#define MoveObject MoveObjectEx
#define StopObject StopObjectEx
#define SetObjectPos SetObjectPosEx
#define SetObjectRot SetObjectRotEx
#define DestroyObject DestroyObjectEx
#define IsValidObject IsValidObjectEx
#define GetObjectPos GetObjectPosEx
#define GetObjectRot GetObjectRotEx
A Configuração fica logo no topo da Include. A Include pesa um pouco em seu GameMode, mas não irá dar lag nem nada no GamePlay ^^

Include Atualizada, agora com a função "No-Crash" e "Livre-Slot".
A função No-Crash, ao exceder o limite de objetos permitido por jogador pelo SA-MP, o Streamer deleta automaticamente o objeto mais distante do jogador, já a função Livre-Slot, não é usado mais o ++Objetos, já que os objetos agora são preenchidos/criados por slots, ou seja, caso você delete o objeto 30 e tenha 100 objetos, o slot 30 será liberado podendo criar mais um objeto nele

Prós
  1. Chega de crashs;
  2. Chega de lag;
  3. Aguenta quantos objetos você quiser;
  4. Não precisa fazer alterações em seu código;
  5. Fácil instalção;
Contras
  1. Pode pesar bastante seu .amx; *

* Depende do MAX_OBJECTOS (OBJECTOS mesmo, pois queria deixar tudo retinho nas configs ) e do MAX_PLAYERS, por isso recomendo que atualize constantemente seu MAX_PLAYERS e MAX_OBJECTOS com os valores que realmente serão usados. Ou coloque os Objetos em um FS para que não haja latência na hora da COMPILAÇÃO.



OBS: Ainda haverá novas atualizações.
__________________
Eae Cidade, viu a versão 0.3x do SA-MP?
Onde?
Ta no fórum
To

Last edited by CidadeNovaRP; 02/07/2012 at 06:48 PM.
CidadeNovaRP is offline   Reply With Quote
Old 02/07/2012, 02:02 AM   #2
ipsBruno
Godfather
 
ipsBruno's Avatar
 
Join Date: Apr 2010
Location: Brazil, Caxias RS
Posts: 6,084
Reputation: 545
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Muito bom o streamer .. Mas existem várias desotimizações no código, pra mim não é o melhor. rs

Espera eu atualizar:
http://forum.sa-mp.com/showthread.php?t=287831
__________________
https://github.com/ipsBruno
ipsBruno is offline   Reply With Quote
Old 02/07/2012, 02:03 AM   #3
CidadeNovaRP
High-roller
 
CidadeNovaRP's Avatar
 
Join Date: Mar 2012
Posts: 1,120
Reputation: 98
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Quote:
Originally Posted by [FeK]DraKiNs View Post
Muito bom o streamer .. Mas existem várias desotimizações no código, pra mim não é o melhor. rs
Sim, sim, eu fiz ele principalmente para não da crash toda hora, mas amanhã irá ter novas atualizações, tem muita coisa que pode ser otimizada neste CODE ainda
__________________
Eae Cidade, viu a versão 0.3x do SA-MP?
Onde?
Ta no fórum
To
CidadeNovaRP is offline   Reply With Quote
Old 02/07/2012, 02:07 AM   #4
Brazuca[]s
Big Clucker
 
Brazuca[]s's Avatar
 
Join Date: Jun 2012
Posts: 186
Reputation: 3
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Nossa meus parabéns meu amor, a cada dia me apaixono mais!
__________________
Procuro Jason VGS. Ex-Administrador do BPF-EL.
Procuro Jason VGS. Ex-Moderador do blog Script Brazilian.
Brazuca[]s is offline   Reply With Quote
Old 02/07/2012, 02:16 AM   #5
cJMaster_
Big Clucker
 
cJMaster_'s Avatar
 
Join Date: Apr 2005
Location: $.$.$.$.$
Posts: 120
Reputation: 64
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Bom.
cJMaster_ is offline   Reply With Quote
Old 02/07/2012, 02:28 AM   #6
Edu33
High-roller
 
Edu33's Avatar
 
Join Date: Apr 2012
Location: Tanzânia
Posts: 1,135
Reputation: 95
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Bom.²

Se eu tiver um map já em CreateStreamedObject como faço? :$
__________________


UM USUÁRIO QUE EXISTIU À ALGUNS TEMPOS ATRÁS

░░░░░░░░░░░▄▄▄▄░░░░░░░░░░░░░░░░░░░░░░░▄▄▄▄▄
░░░█░░░░▄▀█▀▀▄░░▀▀▀▄░░░░▐█░░░░░░░░░▄▀█▀▀▄░░░▀ █▄
░░█░░░░▀░▐▌░░▐▌░░░░░▀░░░▐█░░░░░░░░▀░▐▌░░▐▌░░░ ░█▀
░▐▌░░░░░░░▀▄▄▀░░░░░░░░░░▐█▄▄░░░░░░░░░▀▄▄▀░░░░ ░▐▌
Edu33 is offline   Reply With Quote
Old 02/07/2012, 03:38 AM   #7
leonardo1434
High-roller
 
leonardo1434's Avatar
 
Join Date: Mar 2012
Posts: 1,669
Reputation: 179
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Isto suporta quantos objetos ?


Nice job.
__________________
c++
leonardo1434 is offline   Reply With Quote
Old 02/07/2012, 03:52 AM   #8
Mr.Hardy
Huge Clucker
 
Mr.Hardy's Avatar
 
Join Date: Dec 2011
Location: Brazil (SC)
Posts: 442
Reputation: 61
Default Re: CNStreamer - O melhor Streamer BR, será? ^^

Ótimo FilterScript

[Porem não recomendo porque utiliza muito da memória AMX]
OBS: Experiência Própria!
__________________


Dispositivos:
- Nokia Lumia 825
- Gran Duos ( primeira geração )
- iPhone 5S
- iPhone 5C
- iPhone 6
- iPad 2G (wi-fi 2012)
- Sony Playstation 2
- Sony Playstation 3 (Assassin's Creed: Brotherhood | FIFA 11 | Uncharted 3)
- Xbox One (GTA V | FIFA 14 | Battlefield 4 | Titanfall | Watch Dogs | FIFA 15 | Battlefield 5 | UFC | Need For Speed: Rivals | Dragon Age: Inquisition)
Mr.Hardy is offline   Reply With Quote
Old 02/07/2012, 08:42 AM   #9
ipsBruno
Godfather
 
ipsBruno's Avatar
 
Join Date: Apr 2010
Location: Brazil, Caxias RS
Posts: 6,084
Reputation: 545
Default Respuesta: CNStreamer - O melhor Streamer BR, será? ^^

Quote:
Ambos não deram lag nem crash, mas ainda, como todos os outros Streamer's, ha a possibilidade de dar crash se houver muitos objetos em um local só, isso será corrigido na próxima versão onde será deletado os objetos mais longes do jogador para que não houva uma explosão no limite de objetos por jogador do SA-MP.
Fluxo Stream ??
__________________
https://github.com/ipsBruno
ipsBruno is offline   Reply With Quote
Old 02/07/2012, 10:43 AM   #10
CidadeNovaRP
High-roller
 
CidadeNovaRP's Avatar
 
Join Date: Mar 2012
Posts: 1,120
Reputation: 98
Default Re: Respuesta: CNStreamer - O melhor Streamer BR, será? ^^

Quote:
Originally Posted by [FeK]DraKiNs View Post
Fluxo Stream ??
Nao intendi '-'

Ele suporta quantos objetos voce definir, para trocar do stream basta dar ctrl f e trocar por CreateObject normal
Obrigado a todos!
__________________
Eae Cidade, viu a versão 0.3x do SA-MP?
Onde?
Ta no fórum
To
CidadeNovaRP is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[DUVIDA]sera que tem? billy the kid Português/Portuguese 8 30/06/2012 12:55 AM
[DUV] Sera que tem como? [Ips]Guh Português/Portuguese 19 20/10/2010 11:25 PM
Que bug sera esse? Krypton Português/Portuguese 8 10/02/2010 03:22 PM


All times are GMT. The time now is 10:42 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.