[Ajuda] Sistema de drop no inventбrio nгo estб funcionando
#1

Quando uso a opзгo descartar, quero que o item caia e fique no chгo, para outro player pegar.
Код:
if(playertextid == invText[playerid][14]){

	    new str[180];

		if(InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot] == 19382){

			SendClientMessage(playerid, 0xFF6347AA, "* Nгo hб itens suficientes para ser descartado!");

			for(new i = 7; i < 16; i++){

			PlayerTextDrawHide(playerid, invText[playerid][i]);
			}
			BoxAberto[playerid] = 0;
			return 1;
		}
        format(str, 280, "* Vocк largou um item: %s, com %d unidade(s)", NomeItemInv(InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot]), InventarioInfo[playerid][ItemSelecionado[playerid]][iUnidades]);
		SendClientMessage(playerid, 0x00ccccFF, str);
		InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot] = 19382;
    	InventarioInfo[playerid][ItemSelecionado[playerid]][iUnidades] = 0;
		BoxAberto[playerid] = 0;
    	FecharInventario(playerid);
        AbrirInventario(playerid);
        SetTimerEx("AbrirInventario", 200, false, "i", playerid);
 	}
AQUI A FUNЗГO QUE DROPA ITENS DO INVENTБRIO, NГO SEI COLOCAR PARA DROPAR OS ITENS ALI NESSE CODE
Код:
stock CreateDroppedItem(Item, Amount, Float:gPosX, Float:gPosY, Float:gPosZ)
{
	new f = MAX_OBJ+1;
    for(new a = 0; a < MAX_OBJ; a++)
    {
        if(dItemData[a][ObjtPos][0] == 0.0)
        {
            f = a;
            break;
        }
    }
    if(f > MAX_OBJ) return;

    dItemData[f][droptTimer] = gettime() + (30*60);//30 minutos para o item sumir

    dItemData[f][ObjtData][0] = Item;
	dItemData[f][ObjtData][1] = Amount;
	dItemData[f][ObjtPos][0] = gPosX;
	dItemData[f][ObjtPos][1] = gPosY;
	dItemData[f][ObjtPos][2] = gPosZ;
	dItemData[f][ObjtID] = CreateDynamicObject(Item, dItemData[f][ObjtPos][0], dItemData[f][ObjtPos][1], dItemData[f][ObjtPos][2]-1, 93.7, 120.0, random(360), -1, -1, -1, 80.0);

	new buffer[50];
	format(buffer, sizeof buffer, "Item: %s\nUnidade(s): %d", NomeItemID(dItemData[f][ObjtData][0]), dItemData[f][ObjtData][1]);
 	dItemData[f][textt3d] = CreateDynamic3DTextLabel(buffer, 0xAAAAAAAA, dItemData[f][ObjtPos][0], dItemData[f][ObjtPos][1], dItemData[f][ObjtPos][2]-1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 80.0);

	return;
}
Reply
#2

Uй, simples, sу seguir os parвmetros...

PHP код:
CreateDroppedItem(ItemAmountFloat:gPosXFloat:gPosYFloat:gPosZ)
/*
Item = id do objeto do item
Amount = quantidade
gPosX(Y/Z) = posiзгo X, Y, Z do objeto no caso pode ser a do jogador, basta usar GetPlayerPos e vocк precisa diminuir 0.8 ou 0.9 da posiзгo Z para ficar no chгo.
*/ 
Reply
#3

Isso msm q n sei
Reply
#4

Tenta usar
if(playertextid == invText[playerid][14]){

new str[180];

if(InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot] == 19382){

SendClientMessage(playerid, 0xFF6347AA, "* Nгo hб itens suficientes para ser descartado!");

for(new i = 7; i < 16; i++){

PlayerTextDrawHide(playerid, invText[playerid][i]);
}
BoxAberto[playerid] = 0;
return 1;
}
CreateDroppedItem(Item, Amount, Float:gPosX, Float:gPosY, Float:gPosZ)
format(str, 280, "* Vocк largou um item: %s, com %d unidade(s)",
NomeItemInv(InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot]), InventarioInfo[playerid [ItemSelecionado[playerid]][iUnidades]);
SendClientMessage(playerid, 0x00ccccFF, str);
InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot] = 19382;
InventarioInfo[playerid][ItemSelecionado[playerid]][iUnidades] = 0;
BoxAberto[playerid] = 0;
FecharInventario(playerid);
AbrirInventario(playerid);
SetTimerEx("AbrirInventario", 200, false, "i", playerid);
}
Reply
#5

error 017: undefined symbol "Item"
Reply
#6

O comando funcionou, mas por exemplo agora achei outro bug, quando vc descarta um jetpack, aparece a mensagem que foi descartado o jetpack, mas na verdade descarta uma skin, acontece quando descarto qualquer coisa, poderia me ajudar? Tem skype?
Reply
#7

Quote:
Originally Posted by rodrigo147
Посмотреть сообщение
O comando funcionou, mas por exemplo agora achei outro bug, quando vc descarta um jetpack, aparece a mensagem que foi descartado o jetpack, mas na verdade descarta uma skin, acontece quando descarto qualquer coisa, poderia me ajudar? Tem skype?
Mas й claro que isso vai acontecer, pois lhe passaram a forma errada de usar a funзгo, achei que tinha explicado o suficiente...mas vamos lб.

Vocк sabe o que sгo parвmetros? Nada mais й do que uma variбvel declarada por uma funзгo, no qual, a manipulaзгo da mesma sу se darб dentro do escopo da funзгo, exemplo:
PHP код:
/*
Na funзгo SendPrint declarada a baixo, temos junto o parвmetro 'text' que й uma variбvel string sem tamanho definido, pois o tamanho da mesma varia conforme a quantidade de caracteres que vocк passar nesse parвmetro.
A funзгo abaixo enviarб um print da sequкncia de caracteres contida nessa variбvel 'text'. 
*/
SendPrint(text[])
{
    print(
text);
}
/*
Sua utilizaзгo й muito simples, veja:
*/
SendPrint("teste");//isso farб com que seja imprimido do console "teste" 
Apуs ter esclarecido isso creio que seja mais fбcil prosseguir.

Primeiro vamos interpretar o que CreateDroppedItem faz.

Simplesmente cria um objeto do item a ser dropado, uma text label na posiзгo desse objeto, e armazena os dados do item dropado em uma array(matriz/variбvel com tamanho grande). Os dados armazenados sгo:
- O tempo para sumir o item (nгo sei como estб aplicando o timer para deletar esse objeto);
- O id do item que foi dropado (parвmetro Item);
- A quantidade desse item (parвmetro Amount);
- As posiзхes X, Y e Z do objeto do item que foi criado (respectivos parвmetros gPosX, gPosY, gPosZ);
- O id do objeto do item criado (id retornado pela funзгo CreateDynamicObject);
- O id do text label criado na posiзгo do item (id retornado pela funзгo CreateDynamic3DTextLabel).
Agora o que vocк precisa entender й que, o parвmetro Item deve ser o id do objeto do item, se a sua variбvel InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot] armazena o id do objeto, basta passar ela nesse parвmetro, se nгo, vocк terб que criar uma array com todos os itens e seus respectivos ids dos objetos (me avise se iSlot armazena o id do objeto do item que mostro como criar a array).
No parвmetro Amount, vocк deve informar a quantidade desse item, que aparenta estar salvo pela sua variбvel InventarioInfo[playerid][ItemSelecionado[playerid]][iUnidades] e nгo sei porque vocк estб zerando esse valor.
Nos parвmetros gPosX, gPosY, gPosZ, vocк deve passar respectivamente os valores X, Y e Z da posiзгo do objeto, que no caso й a posiзгo do jogador. Lembrando que para o objeto ficar na altura do chгo, vocк deve diminuir 0.8 ou 0.9 da posiзгo Z do jogador. Dependendo do objeto, o valor a ser diminuнdo varia.

Sabendo isso, й muito simples chamar essa funзгo, logo apуs a funзгo AbrirInventario(playerid), vocк deve inserir:
PHP код:
new Float:pos[3];//cria uma array para armazenar a posiзгo X, Y e Z do jogador
GetPlayerPos(playeridpos[0], pos[1], pos[2]);//armazena na variбvel pos a posiзгo do jogador
/*
Cria um item dropado, com o objeto passado pela variбvel iSlot, com a quantidade passado pela
variбvel iUnidades, e as posiзхes passadas pela variбvel pos, com o Z(pos[2]) diminuнdo 0.9
*/
CreateDroppedItem(InventarioInfo[playerid][ItemSelecionado[playerid]][iSlot], InventarioInfo[playerid][ItemSelecionado[playerid]][iUnidades], pos[0], pos[1], pos[2] - 0.9); 
Reply
#8

Cara nem sei como agradecer, vlw
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)