rendered paste bodyIndex: src/server/adminmanager.cpp
===================================================================
--- src/server/adminmanager.cpp (Revision 1702)
+++ src/server/adminmanager.cpp (Arbeitskopie)
@@ -5968,7 +5968,7 @@
if (data.value == 0 || data.item.IsEmpty())
{
- psserver->SendSystemError(me->clientnum, "Syntax: \"/[giveitem|takeitem] [target] [quantity|'all'|''] [item]\"");
+ psserver->SendSystemError(me->clientnum, "Syntax: \"/[giveitem|takeitem] [target] [quantity|'all'|''] [item|tria]\"");
return;
}
@@ -5982,71 +5982,103 @@
psCharacter* targetchar = target->GetCharacterData();
psCharacter* sourcechar = source->GetCharacterData();
- InventoryTransaction srcTran( &sourcechar->Inventory() );
+
//int slot = sourcechar->Inventory().FindItemInTopLevelBulkWithStats(itemstats);
size_t slot = sourcechar->Inventory().FindItemStatIndex(itemstats);
- if (slot == SIZET_NOT_FOUND)
+
+ if (slot != SIZET_NOT_FOUND)
{
- psserver->SendSystemError(me->clientnum, "Cannot find any %s in %s's inventory.",
- data.item.GetData(), source->GetActor()->GetName() );
- return;
- }
+ InventoryTransaction srcTran( &sourcechar->Inventory() );
+ psItem* item;
+ item = sourcechar->Inventory().RemoveItemIndex(slot,data.value); // data.value is the stack count to move, or -1
+ if (!item)
+ {
+ Error2("Cannot RemoveItemIndex on slot %zu.\n", slot);
+ psserver->SendSystemError(me->clientnum, "Cannot remove %s from %s's inventory.",
+ data.item.GetData(), source->GetActor()->GetName() );
+ return;
+ }
+ psserver->GetCharManager()->UpdateItemViews(source->GetClientNum());
- psItem* item;
- item = sourcechar->Inventory().RemoveItemIndex(slot,data.value); // data.value is the stack count to move, or -1
- if (!item)
- {
- Error2("Cannot RemoveItemIndex on slot %zu.\n", slot);
- psserver->SendSystemError(me->clientnum, "Cannot remove %s from %s's inventory.",
- data.item.GetData(), source->GetActor()->GetName() );
- return;
- }
- psserver->GetCharManager()->UpdateItemViews(source->GetClientNum());
+ if (item->GetStackCount() < data.value)
+ {
+ psserver->SendSystemError(me->clientnum, "There are only %d, not %d in the stack.", item->GetStackCount(), data.value );
+ return;
+ }
- if (item->GetStackCount() < data.value)
- {
- psserver->SendSystemError(me->clientnum, "There are only %d, not %d in the stack.", item->GetStackCount(), data.value );
- return;
- }
+ bool wasEquipped = item->IsEquipped();
- bool wasEquipped = item->IsEquipped();
+ // Now here we handle the target machine
+ InventoryTransaction trgtTran( &targetchar->Inventory() );
- // Now here we handle the target machine
- InventoryTransaction trgtTran( &targetchar->Inventory() );
+ if (!targetchar->Inventory().Add(item))
+ {
+ psserver->SendSystemError(me->clientnum, "Target inventory is too full to accept item transfer.");
+ return;
+ }
+ psserver->GetCharManager()->UpdateItemViews(target->GetClientNum());
- if (!targetchar->Inventory().Add(item))
- {
- psserver->SendSystemError(me->clientnum, "Target inventory is too full to accept item transfer.");
+ // Inform the GM doing the transfer
+ psserver->SendSystemOK(me->clientnum, "%s transferred from %s's %s to %s",
+ item->GetName(),
+ source->GetActor()->GetName(),
+ wasEquipped?"equipment":"inventory",
+ target->GetActor()->GetName() );
+
+ // If we're giving to someone else, notify them
+ if (target->GetClientNum() != me->clientnum)
+ {
+ psserver->SendSystemOK(target->GetClientNum(), "You were given %s by GM %s.",
+ item->GetName(),
+ source->GetActor()->GetName() );
+ }
+
+ // If we're taking from someone else, notify them
+ if (source->GetClientNum() != me->clientnum)
+ {
+ psserver->SendSystemResult(source->GetClientNum(), "%s was taken by GM %s.",
+ item->GetName(),
+ target->GetActor()->GetName() );
+ }
+
+ trgtTran.Commit();
+ srcTran.Commit();
return;
}
- psserver->GetCharManager()->UpdateItemViews(target->GetClientNum());
-
- // Inform the GM doing the transfer
- psserver->SendSystemOK(me->clientnum, "%s transferred from %s's %s to %s",
- item->GetName(),
- source->GetActor()->GetName(),
- wasEquipped?"equipment":"inventory",
- target->GetActor()->GetName() );
-
- // If we're giving to someone else, notify them
- if (target->GetClientNum() != me->clientnum)
+ else if (data.item == "tria")
{
- psserver->SendSystemOK(target->GetClientNum(), "You were given %s by GM %s.",
- item->GetName(),
- source->GetActor()->GetName() );
+ psMoney srcMoney = sourcechar->Money();
+ psMoney targetMoney = targetchar->Money();
+ int value = data.value;
+ if (value == -1)
+ {
+ value = srcMoney.GetTotal();
+ }
+ else if (value > srcMoney.GetTotal())
+ {
+ value = srcMoney.GetTotal();
+ psserver->SendSystemError(me->clientnum, "Only %d tria taken.",srcMoney.GetTotal());
+ }
+ psMoney transferMoney(0, 0, 0, value);
+ transferMoney = transferMoney.Normalized();
+ sourcechar->SetMoney( srcMoney - transferMoney );
+ targetchar->SetMoney( targetMoney + transferMoney );
+ // If we're taking from someone else, notify them
+ if (source->GetClientNum() != me->clientnum)
+ {
+ psserver->SendSystemResult(source->GetClientNum(), "%d tria was taken by %s.",
+ value,
+ target->GetActor()->GetName() );
+ }
+ return;
}
-
- // If we're taking from someone else, notify them
- if (source->GetClientNum() != me->clientnum)
+ else
{
- psserver->SendSystemResult(source->GetClientNum(), "%s was taken by GM %s.",
- item->GetName(),
- target->GetActor()->GetName() );
+ psserver->SendSystemError(me->clientnum, "Cannot find any %s in %s's inventory.",
+ data.item.GetData(), source->GetActor()->GetName() );
+ return;
}
-
- trgtTran.Commit();
- srcTran.Commit();
}
void AdminManager::FreezeClient(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client, Client* target)