Merge pull request #36 from MindRapist/mr-3
This commit is contained in:
@@ -114,6 +114,9 @@ CHARACTER::CHARACTER()
|
|||||||
m_stateIdle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateIdle, &CHARACTER::EndStateEmpty);
|
m_stateIdle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateIdle, &CHARACTER::EndStateEmpty);
|
||||||
m_stateMove.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateMove, &CHARACTER::EndStateEmpty);
|
m_stateMove.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateMove, &CHARACTER::EndStateEmpty);
|
||||||
m_stateBattle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateBattle, &CHARACTER::EndStateEmpty);
|
m_stateBattle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateBattle, &CHARACTER::EndStateEmpty);
|
||||||
|
#ifdef FIX_POS_SYNC
|
||||||
|
m_stateSyncing.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateSyncing, &CHARACTER::EndStateEmpty);
|
||||||
|
#endif
|
||||||
|
|
||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
@@ -658,6 +661,25 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MR-3: Deactivate auto potions if active and being sold
|
||||||
|
switch (pkItem->GetVnum())
|
||||||
|
{
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_X:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_X:
|
||||||
|
if (pkItem->GetSocket(0) == 1)
|
||||||
|
pkItem->SetSocket(0, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// MR-3: -- END OF -- Deactivate auto potions if active and being sold
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
itemkind[pkItem->GetVnum()] = (pTable + i)->price / pkItem->GetCount();
|
itemkind[pkItem->GetVnum()] = (pTable + i)->price / pkItem->GetCount();
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
|||||||
@@ -1077,6 +1077,25 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller)
|
|||||||
if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
|
if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// MR-3: Auto-deactivate auto potions before dropping (death penalty)
|
||||||
|
switch (pkItem->GetVnum())
|
||||||
|
{
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_X:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_X:
|
||||||
|
if (pkItem->GetSocket(0) == 1)
|
||||||
|
pkItem->SetSocket(0, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// MR-3: -- END OF -- Auto-deactivate auto potions before dropping (death penalty)
|
||||||
|
|
||||||
SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
|
SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
|
||||||
vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), INVENTORY));
|
vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), INVENTORY));
|
||||||
}
|
}
|
||||||
@@ -1108,16 +1127,34 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller)
|
|||||||
if (iQty)
|
if (iQty)
|
||||||
iQty = number(1, iQty);
|
iQty = number(1, iQty);
|
||||||
|
|
||||||
for (i = 0; i < iQty; ++i)
|
for (i = 0; i < iQty; ++i)
|
||||||
{
|
{
|
||||||
pkItem = GetWear(vec_bSlots[i]);
|
pkItem = GetWear(vec_bSlots[i]);
|
||||||
|
|
||||||
if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
|
if (IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_PKDROP))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
|
// MR-3: Auto-deactivate auto potions before dropping (death penalty)
|
||||||
vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), EQUIPMENT));
|
switch (pkItem->GetVnum())
|
||||||
}
|
{
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_X:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_X:
|
||||||
|
if (pkItem->GetSocket(0) == 1)
|
||||||
|
pkItem->SetSocket(0, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncQuickslot(QUICKSLOT_TYPE_ITEM, vec_bSlots[i], 255);
|
||||||
|
vec_item.push_back(std::make_pair(pkItem->RemoveFromCharacter(), EQUIPMENT));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -233,29 +233,32 @@ LPITEM CHARACTER::GetItem(TItemPos Cell) const
|
|||||||
{
|
{
|
||||||
if (!IsValidItemPosition(Cell))
|
if (!IsValidItemPosition(Cell))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
WORD wCell = Cell.cell;
|
WORD wCell = Cell.cell;
|
||||||
BYTE window_type = Cell.window_type;
|
BYTE window_type = Cell.window_type;
|
||||||
|
|
||||||
switch (window_type)
|
switch (window_type)
|
||||||
{
|
{
|
||||||
case INVENTORY:
|
case INVENTORY:
|
||||||
case EQUIPMENT:
|
case EQUIPMENT:
|
||||||
if (wCell >= INVENTORY_AND_EQUIP_SLOT_MAX)
|
if (wCell >= INVENTORY_AND_EQUIP_SLOT_MAX)
|
||||||
{
|
{
|
||||||
sys_err("CHARACTER::GetInventoryItem: invalid item cell %d", wCell);
|
sys_err("CHARACTER::GetInventoryItem: invalid item cell %d", wCell);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return m_pointsInstant.pItems[wCell];
|
return m_pointsInstant.pItems[wCell];
|
||||||
case DRAGON_SOUL_INVENTORY:
|
case DRAGON_SOUL_INVENTORY:
|
||||||
if (wCell >= DRAGON_SOUL_INVENTORY_MAX_NUM)
|
if (wCell >= DRAGON_SOUL_INVENTORY_MAX_NUM)
|
||||||
{
|
{
|
||||||
sys_err("CHARACTER::GetInventoryItem: invalid DS item cell %d", wCell);
|
sys_err("CHARACTER::GetInventoryItem: invalid DS item cell %d", wCell);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return m_pointsInstant.pDSItems[wCell];
|
return m_pointsInstant.pDSItems[wCell];
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5652,6 +5655,28 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
|
|||||||
{
|
{
|
||||||
sys_log(0, "%s: ITEM_MOVE %s (window: %d, cell : %d) -> (window:%d, cell %d) count %d", GetName(), item->GetName(), Cell.window_type, Cell.cell,
|
sys_log(0, "%s: ITEM_MOVE %s (window: %d, cell : %d) -> (window:%d, cell %d) count %d", GetName(), item->GetName(), Cell.window_type, Cell.cell,
|
||||||
DestCell.window_type, DestCell.cell, count);
|
DestCell.window_type, DestCell.cell, count);
|
||||||
|
|
||||||
|
// MR-3: Auto-deactivate auto potions before moving to safebox or myshop
|
||||||
|
if (item && DestCell.window_type == SAFEBOX)
|
||||||
|
{
|
||||||
|
switch (item->GetVnum())
|
||||||
|
{
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_X:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_X:
|
||||||
|
if (item->GetSocket(0) == 1)
|
||||||
|
item->SetSocket(0, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// MR-3: -- END OF -- Auto-deactivate auto potions before moving to safebox or myshop
|
||||||
|
|
||||||
item->RemoveFromCharacter();
|
item->RemoveFromCharacter();
|
||||||
SetItem(DestCell, item);
|
SetItem(DestCell, item);
|
||||||
@@ -6689,6 +6714,26 @@ bool CHARACTER::GiveItem(LPCHARACTER victim, TItemPos Cell)
|
|||||||
|
|
||||||
LPITEM item = GetItem(Cell);
|
LPITEM item = GetItem(Cell);
|
||||||
|
|
||||||
|
// MR-3: Auto-deactivate auto potions before trading/transferring
|
||||||
|
if (item) {
|
||||||
|
switch (item->GetVnum()) {
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_HP_RECOVERY_X:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_S:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_M:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_L:
|
||||||
|
case ITEM_AUTO_SP_RECOVERY_X:
|
||||||
|
if (item->GetSocket(0) == 1)
|
||||||
|
item->SetSocket(0, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// MR-3: -- END OF -- Auto-deactivate auto potions before trading/transferring
|
||||||
|
|
||||||
if (item && !item->IsExchanging())
|
if (item && !item->IsExchanging())
|
||||||
{
|
{
|
||||||
if (victim->CanReceiveItem(this, item))
|
if (victim->CanReceiveItem(this, item))
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ LPITEM CItem::RemoveFromCharacter()
|
|||||||
|
|
||||||
LPCHARACTER pOwner = m_pOwner;
|
LPCHARACTER pOwner = m_pOwner;
|
||||||
|
|
||||||
if (m_bEquipped) // 장착되었는가?
|
if (m_bEquipped) // 장착되었는가?
|
||||||
{
|
{
|
||||||
Unequip();
|
Unequip();
|
||||||
//pOwner->UpdatePacket();
|
//pOwner->UpdatePacket();
|
||||||
@@ -323,6 +323,21 @@ LPITEM CItem::RemoveFromCharacter()
|
|||||||
sys_err("CItem::RemoveFromCharacter: Invalid Item Position");
|
sys_err("CItem::RemoveFromCharacter: Invalid Item Position");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// MR-3: Auto-deactivate auto potions before selling to vendors/removing
|
||||||
|
// Auto potion deactivation for NPC sell and similar removals
|
||||||
|
// Only deactivate if not from safebox or mall
|
||||||
|
if (GetWindow() != SAFEBOX && GetWindow() != MALL)
|
||||||
|
{
|
||||||
|
// Check for auto potion vnums (50200, 50201, 50202)
|
||||||
|
DWORD vnum = GetVnum();
|
||||||
|
if (vnum == 50200 || vnum == 50201 || vnum == 50202)
|
||||||
|
{
|
||||||
|
// Set socket 0 to 0 (deactivate)
|
||||||
|
SetSocket(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// MR-3: -- END OF -- Auto-deactivate auto potions before selling to vendors/removing
|
||||||
|
|
||||||
pOwner->SetItem(cell, NULL);
|
pOwner->SetItem(cell, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user