Do takich rzeczy używane są pochodne klasy oCNpcMessage, które są zarządzane przez eventmanager i w większości przypadków są kolejkowane, aby rzeczy które robi npc się nie zapętlały lub nie były użyte w złym momencie(np. przed nie załadowaniem w 100% gry). Samo użycie itemu wygląda tak, ale musisz jeszcze wykombinować w jaki sposób zatrzymać gracza (bo warto pogłówkować, a nie używać tylko gotowca), też za pomocą obiektu pochodnego oCNpcMessage, bo inaczej jak będziesz w ruchu to gracza zeświruje i ci będzie szła do przodu, a nie używała itemek.
Polecam także sprawdzić czy player->fmode > NPC_WEAPON_NONE, i wtedy też za pomocą jeszcze innej pochodnej oCNpcMessage schować broń, jak popatrzysz w oNpcMessages.h to powinieneś móc coś pokombinować.
int index = parser->GetIndex("ITPO_HEALTH_01");
//nie ma takiego itemu w skryptach?
if (index < 0) return;
oCItem* item = player->IsInInv(index, 1);
if (item != nullptr) //trzeba sprawdzić czy taki item mamy faktycznie w eq, jak nie znajdzie go w eq to wtedy item to nullptr
{
oCMsgManipulate* msg = nullptr; //tworzymy pusty wskaźnik do klasy oCMsgManipulate, która wykonuje różne działania na obiektach przez gracza, bo musimy określić rodzaj użycia itemu, zanim zaalokujemy pamięć.
//sprawdzamy typ itemu i używamy odpowiedniego konstruktora do użycia itemu
if (item->scemeName.Length()) //jezeli item ma animację użycia jak np. mikstury, mapa itd.
{
//alokujemy pamięć, pierwszy argument mówi co ta klasa ma zrobić z tym itemem, w tym przypadku użyć to jakiegoś stanu,
//drugi to item, a trzeci mówi do jakiego stanu itemu mamy go użyć, w tym przypadku to następnego,
//można to łatwo zobaczyć np. na lutni, która gra dopiero, jak naciśniemy przycisk w i zmienimy jej stan.
msg = new oCMsgManipulate (oCMsgManipulate::EV_USEITEMTOSTATE, item, player->interactItemCurrentState + 1);
}
else //jeżeli item to np. pochodnia lub broń
{
//to equpujemy item
msg = new oCMsgManipulate(oCMsgManipulate::EV_EQUIPITEM, item);
}
///teraz oddajemy kontrolę nad użyciem itemów eventmanagerowi, który zarządza tymi "wiadomościami" i dzięki temu np. używanie itemów odbywa się jeden po drugim, a nie 2 na raz.
player->GetEM()->OnMessage(msg,player);
}