Dropar Itens -
Scorpion659 - 16.03.2019
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.
Re: Dropar Itens -
Malandrin - 16.03.2019
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(id, amount, Float:x, Float:y, Float:z)
{
new
_Name[MAX_ITEM_NAME];
GetNameFromID(id, _Name);
_Loot[id_][Loot_Object] = CreateDynamicObject(GetItemModemFromID(id), x, y, z, 0, 0, 0, -1, -1, -1, 600.00, 600.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...
Re: Dropar Itens -
Scorpion659 - 16.03.2019
Quote:
Originally Posted by Malandrin
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(id, amount, Float:x, Float:y, Float:z)
{
new
_Name[MAX_ITEM_NAME];
GetNameFromID(id, _Name);
_Loot[id_][Loot_Object] = CreateDynamicObject(GetItemModemFromID(id), x, y, z, 0, 0, 0, -1, -1, -1, 600.00, 600.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)?
Re: Dropar Itens -
Malandrin - 16.03.2019
Quote:
Originally Posted by Scorpion659
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...
Re: Dropar Itens -
Scorpion659 - 16.03.2019
Quote:
Originally Posted by Malandrin
Й 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(playerid, PosJOGdrop[0], PosJOGdrop[1], PosJOGdrop[2]);
while(SairWhile != -1){
for(new i=0; i < sizeof(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.9, 90.0, 0.0, 0.0, -1, -1, -1, 300);
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(playerid, idDrop){
InfoDrops[idDrop][dropAtivo] = 0;
DestroyDynamicObject(InfoDrops[idDrop][dropID]);
return 1;
}
vlw gente.