Moin,
habt ihr euch schonmal damit auseinander gesetzt, dass geuppte Items die Projektion beibehalten? Habs mal versucht, komme aber nicht wirklich weiter.
Für die, die es auch machen wollen, geht in eure char_item.cpp geht in die
und sucht dort
Und passt die Funktion etwa so an:
Code
- if (prob <= prt->prob)
- {
- // ¼º°ø! ¸ðµç ¾ÆÀÌÅÛÀÌ »ç¶óÁö°í, °°Àº ¼Ó¼ºÀÇ ´Ù¸¥ ¾ÆÀÌÅÛ È¹µæ
- LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false);
- if (pkNewItem)
- {
- #ifdef ENABLE_TRANSMUTATION
- pkNewItem->SetTransmutation(item->GetTransmutation());
- #endif
- ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem);
- LogManager::instance().ItemLog(this, pkNewItem, "REFINE SUCCESS", pkNewItem->GetName());
- BYTE bCell = item->GetCell();
- // DETAIL_REFINE_LOG
- NotifyRefineSuccess(this, item, IsRefineThroughGuild() ? "GUILD" : "POWER");
- DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -cost);
- ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE SUCCESS)");
- // END_OF_DETAIL_REFINE_LOG
- pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell));
- ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);
- sys_log(0, "Refine Success %d", cost);
- pkNewItem->AttrLog();
- //PointChange(POINT_GOLD, -cost);
- sys_log(0, "PayPee %d", cost);
- PayRefineFee(cost);
- sys_log(0, "PayPee End %d", cost);
- }
- else
- {
- // DETAIL_REFINE_LOG
- // ¾ÆÀÌÅÛ »ý¼º¿¡ ½ÇÆÐ -> °³·® ½ÇÆзΠ°£ÁÖ
- sys_err("cannot create item %u", result_vnum);
- NotifyRefineFail(this, item, IsRefineThroughGuild() ? "GUILD" : "POWER");
- // END_OF_DETAIL_REFINE_LOG
- }
- }
Anschließend noch in der
Code
- if (prob <= success_prob)
- {
- // ¼º°ø! ¸ðµç ¾ÆÀÌÅÛÀÌ »ç¶óÁö°í, °°Àº ¼Ó¼ºÀÇ ´Ù¸¥ ¾ÆÀÌÅÛ È¹µæ
- LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false);
- if (pkNewItem)
- {
- ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem);
- LogManager::instance().ItemLog(this, pkNewItem, "REFINE SUCCESS", pkNewItem->GetName());
- BYTE bCell = item->GetCell();
- NotifyRefineSuccess(this, item, szRefineType);
- DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -prt->cost);
- ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE SUCCESS)");
- #ifdef ENABLE_TRANSMUTATION
- pkNewItem->SetTransmutation(item->GetTransmutation());
- #endif
- pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell));
- ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);
- pkNewItem->AttrLog();
- //PointChange(POINT_GOLD, -prt->cost);
- PayRefineFee(prt->cost);
- }
- else
- {
- // ¾ÆÀÌÅÛ »ý¼º¿¡ ½ÇÆÐ -> °³·® ½ÇÆзΠ°£ÁÖ
- sys_err("cannot create item %u", result_vnum);
- NotifyRefineFail(this, item, szRefineType);
- }
- }
- else if (!bDestroyWhenFail && result_fail_vnum)
- {
- // ½ÇÆÐ! ¸ðµç ¾ÆÀÌÅÛÀÌ »ç¶óÁö°í, °°Àº ¼Ó¼ºÀÇ ³·Àº µî±ÞÀÇ ¾ÆÀÌÅÛ È¹µæ
- LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_fail_vnum, 1, 0, false);
- if (pkNewItem)
- {
- ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem);
- LogManager::instance().ItemLog(this, pkNewItem, "REFINE FAIL", pkNewItem->GetName());
- BYTE bCell = item->GetCell();
- DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -prt->cost);
- NotifyRefineFail(this, item, szRefineType, -1);
- ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE FAIL)");
- #ifdef ENABLE_TRANSMUTATION
- pkNewItem->SetTransmutation(item->GetTransmutation());
- #endif
- pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell));
- ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);
- pkNewItem->AttrLog();
- //PointChange(POINT_GOLD, -prt->cost);
- PayRefineFee(prt->cost);
- }
- else
- {
- // ¾ÆÀÌÅÛ »ý¼º¿¡ ½ÇÆÐ -> °³·® ½ÇÆзΠ°£ÁÖ
- sys_err("cannot create item %u", result_fail_vnum);
- NotifyRefineFail(this, item, szRefineType);
- }
- }
Passt es eventuell noch an oder auf eure Projektionen thanks to .colossus. für den Gedankengang.