65 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.6 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))
 | 
						|
    character.Write("{} gives you {}".format(speaker.Name, Crossfire.CostStringFromValue(quantity)))
 | 
						|
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
 | 
						|
                character.Write("{} gives you {} {}".format(speaker.Name, quantity, newob.Name))
 | 
						|
                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)
 | 
						|
 | 
						|
            character.Write("{} gives you {} {}".format(speaker.Name, quantity, newob.Name))
 | 
						|
            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")
 |