[Ajuda] Streamer
#10

Provavelmente й problema no foreach, lembro que teve algum problema assim .. Vou dar uma olhada aqui


EDIT:

Em streamer.pwn deixe da seguinte maneira:

pawn Код:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//    [iPs]TeaM Object Streamer 0.3d (V2)
//          Author: Bruno da Silva
//       http://www.ips-team.blogspot.com
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#include <a_samp>


#define MAX_STREAM          05000
#define MIN_INTERVAL        00500

#define function%0(%1)      %0(%1); public %0(%1)

static i ;

#define foreach() \
            for( i = MaxPlayers; i > -1; i--) if(IsPlayerConnected(i))
           
// ===================== [ Declarar Variaveis ] ================================

stock static
    MaxPlayers,
    bool:objetoDeletado[MAX_PLAYERS][MAX_STREAM],
    objetoCriado[MAX_STREAM],
    Float:objetoDistancia[MAX_PLAYERS],
    structObject[MAX_STREAM char],
    objetoIdd[MAX_STREAM],
    Float:dataObject[MAX_STREAM][7],
    objetoConfigs[MAX_STREAM][2],
    objetosCriados[MAX_PLAYERS],
    objetoNumero[MAX_PLAYERS],
    objectModel[MAX_STREAM],
    objdetoIdd[MAX_STREAM],
    objCriados = 0;

// ========================== [ Funзхes ] ======================================

public OnFilterScriptInit()
{
    MaxPlayers = GetMaxPlayers();

    return SetTimer("ObjectUpdate", MIN_INTERVAL, true);
}


function createObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ, Float:DrawDistance, interior, worldids)
{
    if(MAX_STREAM - 1 == objCriados) {
        print("[ERRO] Informaзгo acessada invбlida (objeto numero " #MAX_STREAM - 1 " )");

        return false;
    }

    ++objCriados;

    objectModel[objCriados] = modelid;

    dataObject[objCriados][0] = X;
    dataObject[objCriados][1] = Y;
    dataObject[objCriados][2] = Z;

    dataObject[objCriados][3] = rX;
    dataObject[objCriados][4] = rY;
    dataObject[objCriados][5] = rZ;

    objetoConfigs[objCriados][0] = worldids;
    objetoConfigs[objCriados][1] = interior;
   
    dataObject[objCriados][6] = DrawDistance;

    structObject{objCriados} = 1;

    return objCriados;
}


function deleteObject(objectid)
{
    foreach()
    {
        DestroyPlayerObject(i, objectid);

        dataObject[objectid][0] = 0;
        dataObject[objectid][1] = 0;
        dataObject[objectid][2] = 0;

        dataObject[objectid][3] = 0;
        dataObject[objectid][4] = 0;
        dataObject[objectid][5] = 0;

        dataObject[objectid][6] = 0;

        objetoIdd[objectid] = 0;

        objectModel[objectid] = 0;
       
        objetoConfigs[objectid][0] = 0;
        objetoConfigs[objectid][1] = 0;
       
        structObject{objectid} = 0;

    }
    return true;
}


function moveObject(objectid, Float:pX, Float:pY, Float:pZ, Float:Speed, Float:rotX, Float:rotY, Float:rotZ)
{
    foreach() {
        dataObject[objectid][0] = pX;
        dataObject[objectid][1] = pY;
        dataObject[objectid][2] = pZ;

        #if defined PlayAudioStreamForPlayer
        {
            MovePlayerObject(i, objectid, pX, pY, pZ, Speed, rotX, rotY, rotZ);
        }
        #else
        {
            MovePlayerObject(i, objectid, pX, pY, pZ, Speed);
        }
        #endif
    }
    return 1;
}



function ObjectUpdate()
{
    static objetoPerto;

    foreach()
    {
        for(new o ; o != MAX_STREAM; o++)
        {
            if(structObject{o})
            {
                objetoPerto = IsPlayerInRangeOfPoint(i, dataObject[o][6], dataObject[o][0], dataObject[o][1], dataObject[o][2]);

                if(objetoPerto && !objetoCriado[o] && GetPlayerVirtualWorld(i) == objetoConfigs[o][0] && GetPlayerInterior(i) == objetoConfigs[o][1]) {
                    static
                        Float: px,
                        Float: py,

                        Float: pz,
                        Float: pd;

                    GetPlayerPos(i, px, py, pz);

                    px -= dataObject[o][0];
                    py -= dataObject[o][1];
                    pz -= dataObject[o][2];

                    pd = floatsqroot((px * px) + (py * py) + (pz * pz));

                    if(pd > objetoDistancia[i]) {
                        objetoDistancia[i] = pd;
                        objetoNumero[i] = o;
                    }

        // criar ojeto
                    ++objetoCriado[o];
                    ++objetosCriados[i];

                    objetoIdd[o] = CreatePlayerObject(i, objectModel[o], dataObject[o][0], dataObject[o][1], dataObject[o][2], dataObject[o][3], dataObject[o][4], dataObject[o][5], dataObject[o][6]);

        // tirar objeto caso limite for ultrapssado
                    if(objetosCriados[i] > (MAX_OBJECTS - 50)) {         // PREVENT CRASH
                        DestroyPlayerObject(i, objetoIdd[objetoNumero[i]]);
                        objetoDistancia[i] = 0.0;

                        --objetosCriados[i];
                        --objetoCriado[o];
                    }

                    continue;
                }
                if(objetoPerto && !objetoCriado[o]) {
                    DestroyPlayerObject(i, objetoIdd[o]);

                    --objetoCriado[o];
                    --objetosCriados[i];
                }
            }
        }
    }
    return true;
}


// streamer.pwn

Aqui funcionou corretamente sem deletar objetos. Era o foreach mesmo, vou atualizar para deixar isto rбpido.

Abraзos

carregou uma cidade inteira aqui.


EDIT 2:
Coloquei um sistema de loops simples e rбpido, sу testar agora rapaz!
Reply


Messages In This Thread
Streamer - by EditPawn - 05.01.2013, 08:09
Respuesta: Streamer - by ipsBruno - 05.01.2013, 08:10
Re: Respuesta: Streamer - by EditPawn - 05.01.2013, 08:15
Respuesta: Streamer - by ipsBruno - 05.01.2013, 08:16
Re: Respuesta: Streamer - by EditPawn - 05.01.2013, 08:22
Respuesta: Streamer - by ipsBruno - 05.01.2013, 08:23
Re: Respuesta: Streamer - by EditPawn - 05.01.2013, 08:30
Respuesta: Streamer - by ipsBruno - 05.01.2013, 08:37
Re: Respuesta: Streamer - by EditPawn - 05.01.2013, 08:40
Respuesta: Streamer - by ipsBruno - 05.01.2013, 08:44

Forum Jump:


Users browsing this thread: 2 Guest(s)