maps/python/dialog/commongive.py

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")