*Problemă/Întrebare: Buna . Implementat pana la capat . Fara erori sysser db etc. singura problema este ca nu culege itemele din ceva motiv .
Am golit inventarul etc. dar nu am idee dece nu vrea .
*Resursă folosită (sistem/funcție/modificare): pet-pickup-t4362.html
*Syserr: 0
*Fișier(e) cu problema (link pastebin / code): 0
*Poze / Video: 0
Am golit inventarul etc. dar nu am idee dece nu vrea .
*Resursă folosită (sistem/funcție/modificare): pet-pickup-t4362.html
*Syserr: 0
*Fișier(e) cu problema (link pastebin / code): 0
*Poze / Video: 0
🔥 Hai pe Discord! - Chat activ și support direct
Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.
Alătură-te acum!1300+ de membri activi!
Roboțelu'
Anunț
Salut, Angelic!
Îți recomand câteva link-uri utile care te pot ajuta să rezolvi problema mai rapid:
- Alte probleme rezolvate
- Fixuri Metin2
- Tutoriale
- Cum resetez parola MySQL
- Compilare sursă Metin2
- Lista FreeBSD pentru compilare
Și dacă vrei ajutor direct, te așteptăm pe serverul nostru de Discord — chat activ, suport live și o comunitate faină gata să te ajute! Pentru a intra pe serverul de Discord: Click aici
Îți recomand câteva link-uri utile care te pot ajuta să rezolvi problema mai rapid:
- Alte probleme rezolvate
- Fixuri Metin2
- Tutoriale
- Cum resetez parola MySQL
- Compilare sursă Metin2
- Lista FreeBSD pentru compilare
Și dacă vrei ajutor direct, te așteptăm pe serverul nostru de Discord — chat activ, suport live și o comunitate faină gata să te ajute! Pentru a intra pe serverul de Discord: Click aici
Contact:
Lasa ne un video. Ce behaviour are pet-ul? chiar daca nu aduna, se duce macar catre iteme? poate nu face call-ul cum trebuie catre faza de ridicat iteme. sau poate sunt probleme pe partea de isi da seama daca sunt iteme pe jos sau nu.
in char item, inlocuieste cu varianta asta, si vezi ce loguri ai syser si syslog:
Same mai jos in Petsystem.cpp:
in char item, inlocuieste cu varianta asta, si vezi ce loguri ai syser si syslog:
Code:
#ifdef __PET_PICKUP
bool CHARACTER::PickupItemByPet(DWORD dwVID)
{
sys_log(0, "PET_PICKUP: Called by PID(%u), dwVID(%u)", GetPlayerID(), dwVID);
LPITEM item = ITEM_MANAGER::instance().FindByVID(dwVID);
if (IsObserverMode())
{
sys_err("PET_PICKUP: PID(%u) failed - ObserverMode active", GetPlayerID());
return false;
}
if (!item || !item->GetSectree())
{
sys_err("PET_PICKUP: PID(%u) failed - Item not found or no sectree (VID:%u)", GetPlayerID(), dwVID);
return false;
}
if (item->IsOwnership(this))
{
sys_log(0, "PET_PICKUP: PID(%u) has ownership of item (VID:%u, VNUM:%u, NAME:%s)",
GetPlayerID(), dwVID, item->GetVnum(), item->GetName());
if (item->GetType() == ITEM_ELK)
{
sys_log(0, "PET_PICKUP: PID(%u) picked up Yang (%u)", GetPlayerID(), item->GetCount());
GiveGold(item->GetCount());
item->RemoveFromGround();
M2_DESTROY_ITEM(item);
Save();
}
else
{
if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
{
sys_log(0, "PET_PICKUP: PID(%u) trying to stack item VNUM:%u", GetPlayerID(), item->GetVnum());
BYTE bCount = item->GetCount();
for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
{
LPITEM item2 = GetInventoryItem(i);
if (!item2)
continue;
if (item2->GetVnum() == item->GetVnum())
{
int j;
for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
if (item2->GetSocket(j) != item->GetSocket(j))
break;
if (j != ITEM_SOCKET_MAX_NUM)
continue;
BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
bCount -= bCount2;
item2->SetCount(item2->GetCount() + bCount2);
sys_log(0, "PET_PICKUP: PID(%u) stacked %u items into slot %d (now %u)",
GetPlayerID(), bCount2, i, item2->GetCount());
if (bCount == 0)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ss %s"), item2->GetName());
sys_log(0, "PET_PICKUP: PID(%u) destroyed item after stacking (VID:%u, VNUM:%u)",
GetPlayerID(), dwVID, item->GetVnum());
M2_DESTROY_ITEM(item);
if (item2->GetType() == ITEM_QUEST)
quest::CQuestManager::instance().PickupItem(GetPlayerID(), item2);
return true;
}
}
}
item->SetCount(bCount);
}
int iEmptyCell;
if (item->IsDragonSoul())
{
if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
{
sys_err("PET_PICKUP: PID(%u) failed - No empty DS inventory (ItemVNUM:%u, ItemID:%u)",
GetPlayerID(), item->GetVnum(), item->GetID());
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ss2"));
return false;
}
}
else
{
if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
{
sys_err("PET_PICKUP: PID(%u) failed - No empty inventory (ItemVNUM:%u, ItemID:%u)",
GetPlayerID(), item->GetVnum(), item->GetID());
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ss3"));
return false;
}
}
item->RemoveFromGround();
if (item->IsDragonSoul())
item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
else
item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
sys_log(0, "PET_PICKUP: PID(%u) added item to inventory (VNUM:%u, NAME:%s, COUNT:%u)",
GetPlayerID(), item->GetVnum(), item->GetName(), item->GetCount());
char szHint[32 + 1];
snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
LogManager::instance().ItemLog(this, item, "GET", szHint);
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ss4 %s"), item->GetName());
if (item->GetType() == ITEM_QUEST)
quest::CQuestManager::instance().PickupItem(GetPlayerID(), item);
}
return true;
}
sys_err("PET_PICKUP: PID(%u) failed - No ownership of item (VID:%u, VNUM:%u)", GetPlayerID(), dwVID, item->GetVnum());
return false;
}
#endif
Same mai jos in Petsystem.cpp:
Code:
#ifdef __PET_PICKUP
struct PetPickUpItemStruct
{
CPetActor * pet;
int range;
PetPickUpItemStruct(CPetActor * p, int r)
{
pet = p;
range = r;
}
void operator()(LPENTITY pEnt)
{
if (!pet->GetOwner() || !pet->GetCharacter())
{
sys_err("PET_PICKUP: Invalid pet state (Owner or Character missing)");
return;
}
if (pet->IsPickup())
{
sys_log(0, "PET_PICKUP: Pet already busy picking up an item");
return;
}
if (pEnt->IsType(ENTITY_ITEM) == true)
{
LPITEM item = (LPITEM)pEnt;
LPCHARACTER player = pet->GetOwner();
if (!item->GetSectree())
{
sys_err("PET_PICKUP: Item has no sectree (VID:%u VNUM:%u)", item->GetVID(), item->GetVnum());
return;
}
if (!item->IsOwnership(player))
{
sys_log(0, "PET_PICKUP: Player PID(%u) has no ownership of item VID:%u VNUM:%u", player->GetPlayerID(), item->GetVID(), item->GetVnum());
return;
}
int iDist = DISTANCE_APPROX(item->GetX() - player->GetX(), player->GetY() - player->GetY());
if (iDist > range)
{
sys_log(0, "PET_PICKUP: Item too far (Dist:%d, Range:%d, PID:%u, ItemVID:%u)", iDist, range, player->GetPlayerID(), item->GetVID());
return;
}
sys_log(0, "PET_PICKUP: Pet started picking up item (VID:%u, VNUM:%u, OwnerPID:%u)", item->GetVID(), item->GetVnum(), player->GetPlayerID());
pet->SetPickup(true);
pet->SetPickupItem(item);
}
}
};
void CPetActor::PickUpItems(int range)
{
if (IsPickup())
{
sys_log(0, "PET_PICKUP: Pet already in pickup state, skipping search");
return;
}
long map = m_pkChar->GetMapIndex();
PIXEL_POSITION m = m_pkChar->GetXYZ();
LPSECTREE tree = SECTREE_MANAGER::instance().Get(map, m.x, m.y);
if (!tree)
{
sys_err("PET_PICKUP: Cannot find sectree at (%d, %d), MapIndex:%ld", m.x, m.y, map);
return;
}
sys_log(0, "PET_PICKUP: Searching items around (%d,%d) Map:%ld Range:%d", m.x, m.y, map, range);
PetPickUpItemStruct f(this, range);
tree->ForEachAround(f);
}
void CPetActor::BringItem()
{
if (!IsPickup())
{
sys_log(0, "PET_PICKUP: BringItem called but no item is set for pickup");
return;
}
LPITEM item = GetPickupItem();
if (!m_pkOwner || !m_pkChar || !item || !item->GetSectree())
{
sys_err("PET_PICKUP: BringItem failed - invalid state (Owner:%p Char:%p Item:%p Sectree:%p)", m_pkOwner, m_pkChar, item, item ? item->GetSectree() : NULL);
return;
}
float fMinDistance = 20.0;
float fPetX = m_pkChar->GetX();
float fPetY = m_pkChar->GetY();
float itemX = item->GetX();
float itemY = item->GetY();
float fDist = DISTANCE_SQRT(itemX - fPetX, itemY - fPetY);
sys_log(0, "PET_PICKUP: BringItem - Dist:%.2f, Pet(%.0f,%.0f), Item(%.0f,%.0f), PID:%u ItemVID:%u",
fDist, fPetX, fPetY, itemX, itemY, m_pkOwner->GetPlayerID(), item->GetVID());
if (fDist <= 250.0)
{
sys_log(0, "PET_PICKUP: Item within range, sending pickup request (ItemVID:%u, VNUM:%u)", item->GetVID(), item->GetVnum());
SetPickup(false);
m_pkOwner->PickupItemByPet(item->GetVID());
SetPickupItem(NULL);
m_pkChar->SendMovePacket(FUNC_WAIT, 0, 0, 0, 0, 0);
return;
}
m_pkChar->SetRotationToXY(itemX, itemY);
float fx, fy;
float fDistToGo = fDist - fMinDistance;
GetDeltaByDegree(m_pkChar->GetRotation(), fDistToGo, &fx, &fy);
if (!m_pkChar->Goto((int)(fPetX + fx + 0.5f), (int)(fPetY + fy + 0.5f)))
{
sys_err("PET_PICKUP: Pet failed to move towards item (VID:%u, VNUM:%u)", item->GetVID(), item->GetVnum());
return;
}
sys_log(0, "PET_PICKUP: Pet moving towards item (ItemVID:%u, Target:(%.0f,%.0f))", item->GetVID(), itemX, itemY);
m_pkChar->SendMovePacket(FUNC_WAIT, 0, 0, 0, 0, 0);
}
#endif
Kolen's Assets - NPCs, Gr2 Objects, Characters Animations, Free stuff
Discord: https://discord.gg/wDKzjDvVkj
In Progress: ~ Althaia Project ~
Discord: https://discord.gg/wDKzjDvVkj
In Progress: ~ Althaia Project ~
See full signature
🔥 Hai pe Discord! - Chat activ și support direct
Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.
Alătură-te acum!1300+ de membri activi!
Roboțelu'
Anunț
-
Subiecte similare
Informații
Utilizatori ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori
Discord ID copiat:


