All pastes #1044022 Raw Edit

Unbenannt

public text v1 · immutable
#1044022 ·published 2008-06-10 17:48 UTC
rendered paste body
Index: 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)