Portal SAMP
[Pedido] Itens próximo no chão. - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Itens próximo no chão. (/showthread.php?tid=4842)



Itens próximo no chão. - Alfarr Heimrik - 15/07/2024

Bom dia. Suponhamos que eu utilize um comando (zcmd) para criar um DynamicObject na posição atual do player e depois eu me afasto determinada área. Como eu posso criar um comando que verifica os objetos que estão próximos a mim?
Dei uma olhada no open mp, mas esta muito difícil de entender o GetObjectPos .

Na realidade, estou com um sistema de inventario onde o player dropa um item no chão. Preciso verificar os itens que esse player jogou no chão.

Dropar o Item: Dropar Item no chão. - Pastebin.com
Pegar o Item: Pegar o Item do chão. - Pastebin.com

O sistema de inventario eu peguei já pronto, por isso não tenho muito conhecimento das funções, ainda estou estudando.


RE: Itens próximo no chão. - Vel - 15/07/2024

Código PHP:
new gPlayerListedItems[MAX_PLAYERS][MAX_OBJECTS],
    gPlayerListedItemsCount[MAX_PLAYERS];

CMD:itens(playerid) {
    new Floatx,
        Floaty,
        Floatz,
        items[MAX_OBJECTS],
        list[1024];

    GetPlayerPos(playeridxyz);

    gPlayerListedItemsCount[playerid] = 0;

    for (new icount Streamer_GetNearbyItems(xyzSTREAMER_TYPE_OBJECTitems, .range 3.0); counti++) {
        new itemid items[i];

        for (new jMAX_OBJECTSj++) {
            if (DropItemSlot[j][DropItem] == itemid) {
                format(list, sizeof(list), "%s\n%d\t%s", list, gPlayerListedItemsCount[playerid] + 1ItemNomeInv(DropItemSlot[j][DropItemID]));

                gPlayerListedItems[playerid][gPlayerListedItemsCount[playerid]++] = j;
                break;
            }
        }
    }

    if (!gPlayerListedItemsCount[playerid]) {
        SendClientMessage(playerid, -1"Não há itens perto de você.");
        return 1;
    }

    ShowPlayerDialog(playerid77935DIALOG_STYLE_LIST"Itens próximos", list, "Pegar""Fechar");
    return 1;
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[]) {
    if (dialogid == 77935) {
        if (!response) {
            return 1;
        }

        new slot gPlayerListedItems[playerid][listitem];

        if (!CheckInventario(playeridDropItemSlot[slot][DropItemID])) return SendClientMessage(playeridCOLOR_VERM"[!] {FFFFFF}Sua mochila esta cheia.");
        GanharItem(playeridDropItemSlot[slot][DropItemID], DropItemSlot[slot][DropItemUni]);
        format(str64"{C2A2DA}*%s pegou um(a) %s do chao."pName(playerid), ItemNomeInv(DropItemSlot[slot][DropItemID]));
        ProxDetectorSilva(playerid12.00xD7D7D7FFstr);
        DestroyDynamicObject(DropItemSlot[slot][DropItem]);
        DestroyDynamic3DTextLabel(DropItemSlot[slot][LabelItem]);
        DropItemSlot[slot][DropItem] = 0;
        DropItemSlot[slot][DropItemID] = -1;
        DropItemSlot[slot][DropItemUni] = 0;
        DropItemSlot[slot][Interior] = 0;
        DropItemSlot[slot][Virtual] = 0;
        ApplyAnimation(playerid"BOMBER""BOM_Plant"4.1000001);
    }
    return 1;




RE: Itens próximo no chão. - Alfarr Heimrik - 16/07/2024

(15/07/2024 15:09)Vel Escreveu:
Código PHP:
new gPlayerListedItems[MAX_PLAYERS][MAX_OBJECTS],
    gPlayerListedItemsCount[MAX_PLAYERS];

CMD:itens(playerid) {
    new Floatx,
        Floaty,
        Floatz,
        items[MAX_OBJECTS],
        list[1024];

    GetPlayerPos(playeridxyz);

    gPlayerListedItemsCount[playerid] = 0;

    for (new icount Streamer_GetNearbyItems(xyzSTREAMER_TYPE_OBJECTitems, .range 3.0); counti++) {
        new itemid items[i];

        for (new jMAX_OBJECTSj++) {
            if (DropItemSlot[j][DropItem] == itemid) {
                format(list, sizeof(list), "%s\n%d\t%s", list, gPlayerListedItemsCount[playerid] + 1ItemNomeInv(DropItemSlot[j][DropItemID]));

                gPlayerListedItems[playerid][gPlayerListedItemsCount[playerid]++] = j;
                break;
            }
        }
    }

    if (!gPlayerListedItemsCount[playerid]) {
        SendClientMessage(playerid, -1"Não há itens perto de você.");
        return 1;
    }

    ShowPlayerDialog(playerid77935DIALOG_STYLE_LIST"Itens próximos", list, "Pegar""Fechar");
    return 1;
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[]) {
    if (dialogid == 77935) {
        if (!response) {
            return 1;
        }

        new slot gPlayerListedItems[playerid][listitem];

        if (!CheckInventario(playeridDropItemSlot[slot][DropItemID])) return SendClientMessage(playeridCOLOR_VERM"[!] {FFFFFF}Sua mochila esta cheia.");
        GanharItem(playeridDropItemSlot[slot][DropItemID], DropItemSlot[slot][DropItemUni]);
        format(str64"{C2A2DA}*%s pegou um(a) %s do chao."pName(playerid), ItemNomeInv(DropItemSlot[slot][DropItemID]));
        ProxDetectorSilva(playerid12.00xD7D7D7FFstr);
        DestroyDynamicObject(DropItemSlot[slot][DropItem]);
        DestroyDynamic3DTextLabel(DropItemSlot[slot][LabelItem]);
        DropItemSlot[slot][DropItem] = 0;
        DropItemSlot[slot][DropItemID] = -1;
        DropItemSlot[slot][DropItemUni] = 0;
        DropItemSlot[slot][Interior] = 0;
        DropItemSlot[slot][Virtual] = 0;
        ApplyAnimation(playerid"BOMBER""BOM_Plant"4.1000001);
    }
    return 1;


Obrigado. Terei que atualizar o streamer. Otimo código.
Vou estudar e implementar a meu gosto, muito obrigado. +rep