1. PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
  2. {
  3. TItemPos Cell;
  4. switch (PyTuple_Size(poArgs))
  5. {
  6. case 1:
  7. if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
  8. return Py_BuildException();
  9. break;
  10. case 2:
  11. if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
  12. return Py_BuildException();
  13. if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
  14. return Py_BuildException();
  15. break;
  16. default:
  17. return Py_BuildException();
  18. }
  19. const TItemData * pPlayerItem = CPythonPlayer::Instance().GetItemData(Cell);
  20. CItemData * pItemData = NULL;
  21. char buf[1024];
  22. if (pPlayerItem && CItemManager::Instance().GetItemDataPointer(pPlayerItem->vnum, &pItemData))
  23. {
  24. char itemlink[256];
  25. int len;
  26. bool isAttr = false;
  27. len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%d:%d",
  28. pPlayerItem->vnum, pPlayerItem->flags,
  29. pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2], pPlayerItem->alSockets[3], pPlayerItem->evolution, pPlayerItem->transmutation);
  30. for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
  31. {
  32. len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
  33. pPlayerItem->aAttr[i].bType, pPlayerItem->aAttr[i].sValue);
  34. isAttr = true;
  35. }
  36. char szText[1024];
  37. if (pItemData->GetIndex() == 50300)
  38. {
  39. CPythonSkill::SSkillData * c_pSkillData;
  40. CPythonSkill::Instance().GetSkillData(pPlayerItem->alSockets[0], &c_pSkillData);
  41. sprintf(szText, "%s %s", c_pSkillData->strName.c_str(), pItemData->GetName());
  42. }
  43. else if (pItemData->GetType() == 19)
  44. {
  45. CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
  46. sprintf(szText, "%s %s", rkNonPlayer.GetMonsterName(pPlayerItem->alSockets[0]), pItemData->GetName());
  47. }
  48. else
  49. {
  50. sprintf(szText, "%s", pItemData->GetName());
  51. }
  52. if (pPlayerItem->count > 1)
  53. if (isAttr)
  54. snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s x%d]|h|r", itemlink, pItemData->GetName(),pPlayerItem->count);
  55. else
  56. snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s x%d]|h|r", itemlink, pItemData->GetName(),pPlayerItem->count);
  57. else
  58. if (isAttr)
  59. snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", szText, itemlink);
  60. else
  61. snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", szText, itemlink);
  62. }
  63. else
  64. buf[0] = '\0';
  65. return Py_BuildValue("s", buf);
  66. }