[Ajuda] Dropar Itens
#1

Boa noite, eu to tendo um problema de logica e preciso da ajuda de vcs.

Eu tenho um sistema de itens num server de sobrevivкncia. O server tem itens espalhados pelo mapa (server Dayz), e quando o player chega perto de um local onde tem item, aparece uma td, e tals. Agora eu to na parte em que o player possa dropar esse item, porem eu n sei bem como salvar essa posiзгo para quando outro player chegar perto, aparecer a td e o item que tem nela.

Eu poderia criar uma variбvel de tamanho definido, como 1000 posiзхes, porem, se o server tiver 100 players, e todos inventarem de dropar diversos itens, essa variбvel de 1000 nгo vai dar.

Ai eu queria a ajuda de vcs pra saber se tem como criar uma variбvel de tamanho indefinido e de dados ainda indefinidos tb.

sei q da pra fazer tipo: new Str[] = "oi";

mas eu queria algo do tipo new Str[];

Eu acho q n tem como fazer isso, mas eu queria saber se a unica alternativa й criar uma variбvel de tamanho definido.

Vlw.
Reply
#2

Nгo entendi muito bom o que vocк quis dizer com essa variбvel mas enfim... Eu quando tinha meu servidor de survival usava algo mais ou menos assim para a criaзгo de loot:

PHP Code:
CreateLoot(idamountFloat:xFloat:yFloat:z)
{
    new 
        
_Name[MAX_ITEM_NAME];

    
GetNameFromID(id_Name);
    
_Loot[id_][Loot_Object] = CreateDynamicObject(GetItemModemFromID(id), xyz000, -1, -1, -1600.00600.00);
    
_Loot[id_][Loot_Alife] = true;
    
_Loot[id_][Loot_ItemID] = id;
    
_Loot[id_][Loot_Amount] = amount;
    
_Loot[id_][Loot_X] = x;
    
_Loot[id_][Loot_Y] = y;
    
_Loot[id_][Loot_Z] = z;

    
format(_Loot[id_][Loot_Name], MAX_ITEM_NAME"%s"_Name);
    
//Nгo sei se como vocк cria o botгo, mas vocк coloca ele por aqui.
    
return id_;

Eu tambйm usava uma include do South tambйm para criar essa TD de quando chegar perto de um item, nгo me lembro qual era mas era igual a dos S&S, sempre usei o jeito parecido com o exemplo que botei acima e nunca me deu nenhum problema...
Reply
#3

Quote:
Originally Posted by Malandrin
View Post
Nгo entendi muito bom o que vocк quis dizer com essa variбvel mas enfim... Eu quando tinha meu servidor de survival usava algo mais ou menos assim para a criaзгo de loot:

PHP Code:
CreateLoot(idamountFloat:xFloat:yFloat:z)
{
    new 
        
_Name[MAX_ITEM_NAME];
    
GetNameFromID(id_Name);
    
_Loot[id_][Loot_Object] = CreateDynamicObject(GetItemModemFromID(id), xyz000, -1, -1, -1600.00600.00);
    
_Loot[id_][Loot_Alife] = true;
    
_Loot[id_][Loot_ItemID] = id;
    
_Loot[id_][Loot_Amount] = amount;
    
_Loot[id_][Loot_X] = x;
    
_Loot[id_][Loot_Y] = y;
    
_Loot[id_][Loot_Z] = z;
    
format(_Loot[id_][Loot_Name], MAX_ITEM_NAME"%s"_Name);
    
//Nгo sei se como vocк cria o botгo, mas vocк coloca ele por aqui.
    
return id_;

Eu tambйm usava uma include do South tambйm para criar essa TD de quando chegar perto de um item, nгo me lembro qual era mas era igual a dos S&S, sempre usei o jeito parecido com o exemplo que botei acima e nunca me deu nenhum problema...
Entendi, mas essa variavel: _Loot tem um tamanho, essa й minha pergunta, eu terei que criar uma variavel com um tamanho x, qual o tamanho seria necessario? n ficaria muito lento pra o sistema verificar uma matriz de mais de 1000 posiзхes a cada 200ms(tempo em que meu sv verifica se tem player perto de algum local de loot)?
Reply
#4

Quote:
Originally Posted by Scorpion659
View Post
Entendi, mas essa variavel: _Loot tem um tamanho, essa й minha pergunta, eu terei que criar uma variavel com um tamanho x, qual o tamanho seria necessario? n ficaria muito lento pra o sistema verificar uma matriz de mais de 1000 posiзхes a cada 200ms(tempo em que meu sv verifica se tem player perto de algum local de loot)?
Й assim que eu criava a variбvel:

PHP Code:
#define MAX_LOTS (800) // Mбximo de LOOT que poderб ficar no chгo e que o sistema irб percorrer.
static enum LootFloor
{
    
Loot_ID,
    
Loot_Name[MAX_ITEM_NAME],
    
Loot_ItemID,
    
Loot_Amount,
    
Loot_Object,
    
bool:Loot_Alife,
    
Float:Loot_X,
    
Float:Loot_Y,
    
Float:Loot_Z
};
new 
_Loot[MAX_LOTS][LootFloor]; 
Sobre pesar o servidor, cara sinceramente isso varia muito pela HOST que vocк vai usar, mas creio que nгo irб lagar muito, claro irб gerar um pequeno LAG, mas irб aguentar...
Reply
#5

Quote:
Originally Posted by Malandrin
View Post
Й assim que eu criava a variбvel:

PHP Code:
#define MAX_LOTS (800) // Mбximo de LOOT que poderб ficar no chгo e que o sistema irб percorrer.
static enum LootFloor
{
    
Loot_ID,
    
Loot_Name[MAX_ITEM_NAME],
    
Loot_ItemID,
    
Loot_Amount,
    
Loot_Object,
    
bool:Loot_Alife,
    
Float:Loot_X,
    
Float:Loot_Y,
    
Float:Loot_Z
};
new 
_Loot[MAX_LOTS][LootFloor]; 
Sobre pesar o servidor, cara sinceramente isso varia muito pela HOST que vocк vai usar, mas creio que nгo irб lagar muito, claro irб gerar um pequeno LAG, mas irб aguentar...
Blz, tu tem um vetor de 800, й isso oq eu queria saber. Vlw mano. Eu pensava q poderia ter uma outra alternativa q eu n tava pensando, mas esse vetor de 800 ou 1000 da bem, pq o sv n vai percorrer todo o vetor sempre, sу vai percorrer ate chegar na posicao q o player estб.

Enfim, vlw.

@edit

Entгo, eu fiz de uma maneira legal e quero repassar pra alguem que tiver com a mesma duvida:

PHP Code:
stock CriarItemDrop(playerid){
    new 
Float:PosJOGdrop[3], SairWhile 0;
    
GetPlayerPos(playeridPosJOGdrop[0], PosJOGdrop[1], PosJOGdrop[2]);
    while(
SairWhile != -1){
        for(new 
i=0sizeof(InfoDrops); i++){
            if(
InfoDrops[i][dropAtivo] == SairWhile){
                if(
SairWhile 0){
                    
DestroyDynamicObject(InfoDrops[i][dropID]);
                }
                
InfoDrops[i][dropID] = CreateDynamicObject(NomeItens[GetPVarInt(playerid"itemSlct")][iModelID], PosJOGdrop[0], PosJOGdrop[1], PosJOGdrop[2] - 0.990.00.00.0, -1, -1, -1300);
                
InfoDrops[i][dropPosX] = PosJOGdrop[0];
                
InfoDrops[i][dropPosY] = PosJOGdrop[1];
                
InfoDrops[i][dropPosZ] = PosJOGdrop[2];
                
InfoDrops[i][dropAtivo] = SairWhile 1;
                
SairWhile = -1;
                return 
1;
            }
        }
        
SairWhile ++;
    }
    return 
1;

Com essa funзгo, mesmo que o vetor acabe, ele cria novos drops apagando os drops mais antigos, e assim por diante, sendo assim, os drops nunca acabam. E para destruir o item:

PHP Code:
stock DestroirItemDrop(playerididDrop){
    
InfoDrops[idDrop][dropAtivo] = 0;
    
DestroyDynamicObject(InfoDrops[idDrop][dropID]);
    return 
1;

vlw gente.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)