62 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
| # -*- coding: utf-8 -*-
 | |
| # commongive.py
 | |
| # This is a common block of 'give' code to handle give item and give contents.
 | |
| 
 | |
| itemname = args[0]
 | |
| if len(args) == 2:
 | |
|     quantity = int(args[1])
 | |
| else:
 | |
|     quantity = 1
 | |
| if itemname == "money":
 | |
|     # we can't guarentee that the player has any particular type of coin already
 | |
|     # so create the object first, then add 1 less than the total.
 | |
|     if quantity >= 50:
 | |
|         id = character.CreateObject('platinum coin')
 | |
|         CFItemBroker.Item(id).add(int(quantity/50))
 | |
|     if quantity % 50 > 0:
 | |
|         id = character.CreateObject('gold coin')
 | |
|         CFItemBroker.Item(id).add(int((quantity % 50)/10))
 | |
|     if quantity % 50 > 0:
 | |
|         id = character.CreateObject('silver coin')
 | |
|         CFItemBroker.Item(id).add(int(quantity % 10))
 | |
| else:
 | |
|     # what we will do, is increase the number of items the NPC is holding, then
 | |
|     # split the stack into the players inventory.
 | |
|     # first we will check if there is an NPC_Gift_Box, and look in there.
 | |
|     lookin = speaker.CheckInventory("NPC_Gift_Box")
 | |
|     if lookin:
 | |
|         inv = lookin.CheckInventory(itemname)
 | |
|         if not inv:
 | |
|             # ok, the NPC has no 'Gift Box', we'll check the other items.
 | |
|             inv = speaker.CheckInventory(itemname)
 | |
|     else:
 | |
|         inv = speaker.CheckInventory(itemname)
 | |
| 
 | |
|     if inv:
 | |
|         if contents:
 | |
|             nextob=inv.Inventory
 | |
|             while nextob:
 | |
|                 # when giving the contents of a container, always give the
 | |
|                 # number of items in the container, not the quantity number.
 | |
|                 quantity = nextob.Quantity
 | |
|                 if quantity == 0:
 | |
|                     # if quantity is 0, then we need to set it to one, otherwise bad things happen.
 | |
|                     nextob.Quantity = 1
 | |
|                     quantity = 1
 | |
|                 newob = nextob.Clone(0)
 | |
|                 newob.Quantity = quantity
 | |
|                 newob.InsertInto(character)
 | |
|                 nextob=nextob.Below
 | |
|         else:
 | |
|             if quantity == 0:
 | |
|                 nextob.Quantity = 2
 | |
|                 quantity = 1
 | |
|             else:
 | |
|                 CFItemBroker.Item(inv).add(quantity+1)
 | |
|             newob = inv.Split(quantity)
 | |
| 
 | |
|             newob.InsertInto(character)
 | |
|     else:
 | |
|         # ok, we didn't find any
 | |
|         Crossfire.Log(Crossfire.LogError, "Dialog script tried to give a non-existant item to a player")
 |