Lots of bug fixes: make it work with new Python plugin, fix truncated help message, set plural names of created objects, reword messages, prevent re-use of already sent packets, add safeguards for array-access; make source-code formatting consistent.
git-svn-id: svn://svn.code.sf.net/p/crossfire/code/trunk/maps@4024 282e977c-c81d-0410-88c4-b93c2d0d6712master
parent
d198652a0b
commit
0a48aa8c1e
|
@ -26,10 +26,10 @@
|
|||
# mailscroll <friend> - drops mailscroll to <friend> on the floor
|
||||
# mailwarning <foo> - drops mailwarning to <foo> on the floor
|
||||
|
||||
# Constant price values
|
||||
priceWritingPen=100
|
||||
priceScrollOfLiteracy=5000
|
||||
priceMailScroll=5
|
||||
# Constant price values (all prices in platinum coins)
|
||||
priceWritingPen = 100
|
||||
priceScrollOfLiteracy = 5000
|
||||
priceMailScroll = 5
|
||||
priceBag = 5
|
||||
pricePackage = 50
|
||||
priceCarton = 200
|
||||
|
@ -47,74 +47,85 @@ import Crossfire
|
|||
import string
|
||||
import CFLog
|
||||
|
||||
activator=Crossfire.WhoIsActivator()
|
||||
activatorname=activator.Name
|
||||
whoami=Crossfire.WhoAmI()
|
||||
x=activator.X
|
||||
y=activator.Y
|
||||
activator = Crossfire.WhoIsActivator()
|
||||
activatorname = activator.Name
|
||||
whoami = Crossfire.WhoAmI()
|
||||
x = activator.X
|
||||
y = activator.Y
|
||||
|
||||
log = CFLog.CFLog()
|
||||
text = string.split(Crossfire.WhatIsMessage())
|
||||
|
||||
if text[0] == 'help' or text[0] == 'yes':
|
||||
message = 'How can I help you ? Here is a quick list of commands:\n\n- pen (%s platinum)\n- literacy (%s platinum)\n- mailscroll <friend> (%s platinum)\n- bag <friend> (%s platinum)\n- package <friend> (%s platinum)\n- carton <friend> (%s platinum)\n- send <friend>\n- receive'%(priceWritingPen,priceScrollOfLiteracy,priceMailScroll,priceBag,pricePackage,priceCarton)
|
||||
whoami.Say(message)
|
||||
|
||||
# split the help message in two parts to prevent the server from truncating it.
|
||||
message = 'How can I help you?\nHere is a quick list of commands I understand:\n\n- pen (%s platinum)\n- literacy (%s platinum)\n- mailscroll <friend> (%s platinum)\n- bag <friend> (%s platinum)\n- package <friend> (%s platinum)'%(priceWritingPen, priceScrollOfLiteracy, priceMailScroll, priceBag, pricePackage)
|
||||
whoami.Say(message)
|
||||
|
||||
message = '- carton <friend> (%s platinum)\n- send <friend>\n- receive'%(priceCarton)
|
||||
if activator.DungeonMaster:
|
||||
message += '\n- mailwarning <player>'
|
||||
whoami.Say(message)
|
||||
|
||||
|
||||
elif text[0] == 'pen':
|
||||
if (activator.PayAmount(priceWritingPen*priceFactor)):
|
||||
if activator.PayAmount(priceWritingPen*priceFactor):
|
||||
whoami.Say('Here is your IPO Writing Pen')
|
||||
id = activator.Map.CreateObject('writing pen', x, y)
|
||||
id.Name='IPO Writing Pen'
|
||||
id.Value=0
|
||||
id.Name = 'IPO Writing Pen'
|
||||
id.Value = 0
|
||||
else:
|
||||
whoami.Say('You need %s platinum for an IPO Writing Pen'%priceWritingPen)
|
||||
|
||||
|
||||
elif text[0] == 'literacy':
|
||||
if (activator.PayAmount(priceScrollOfLiteracy*priceFactor)):
|
||||
if activator.PayAmount(priceScrollOfLiteracy*priceFactor):
|
||||
whoami.Say('Here is your IPO Scroll of Literacy')
|
||||
id = activator.Map.CreateObject('scroll of literacy', x, y)
|
||||
id.SetName='IPO Scroll of Literacy'
|
||||
id.SetValue=0
|
||||
id.Name = 'IPO Scroll of Literacy'
|
||||
id.NamePl = 'IPO Scrolls of Literacy'
|
||||
id.Value = 0
|
||||
else:
|
||||
whoami.Say('You need %s platinum for an IPO Scroll of Literacy'%priceScrollOfLiteracy)
|
||||
|
||||
|
||||
elif text[0] == 'mailscroll':
|
||||
if len(text)==2:
|
||||
if len(text) == 2:
|
||||
if log.info(text[1]):
|
||||
if (activator.PayAmount(priceMailScroll*priceFactor)):
|
||||
if activator.PayAmount(priceMailScroll*priceFactor):
|
||||
whoami.Say('Here is your mailscroll')
|
||||
id = activator.Map.CreateObject('scroll', x, y)
|
||||
id.Name='mailscroll T: '+text[1]+' F: '+ activatorname
|
||||
id.Value=0
|
||||
id.Name = 'mailscroll T: '+text[1]+' F: '+activatorname
|
||||
id.NamePl = 'mailscrolls T: '+text[1]+' F: '+activatorname
|
||||
id.Value = 0
|
||||
else:
|
||||
whoami.Say('You need %s platinum for a mailscroll'%priceMailScroll)
|
||||
else:
|
||||
whoami.Say('I don\'t know any %s'%text[1])
|
||||
whoami.Say('I don\'t know %s'%text[1])
|
||||
|
||||
else:
|
||||
whoami.Say('Usage "mailscroll <friend>"')
|
||||
|
||||
|
||||
elif text[0] == 'mailwarning':
|
||||
if (activator.IsDungeonMaster):
|
||||
if len(text)==2:
|
||||
if activator.DungeonMaster:
|
||||
if len(text) == 2:
|
||||
if log.info(text[1]):
|
||||
whoami.Say('Here is your mailwarning')
|
||||
id = activator.Map.CreateObject('diploma', x, y)
|
||||
id.Name='mailwarning T: '+text[1]+' F: '+ activatorname
|
||||
id.Value=0
|
||||
id.Name = 'mailwarning T: '+text[1]+' F: '+activatorname
|
||||
id.NamePl = 'mailwarnings T: '+text[1]+' F: '+activatorname
|
||||
id.Value = 0
|
||||
else:
|
||||
whoami.Say('I don\'t know any %s'%text[1])
|
||||
|
||||
else:
|
||||
whoami.Say('Usage "mailwarning <foo>"')
|
||||
whoami.Say('Usage "mailwarning <player>"')
|
||||
else:
|
||||
whoami.Say('You need to be DM to be able to use this command')
|
||||
|
||||
|
||||
elif text[0] == 'bag' or text[0] == 'package' or text[0] == 'carton':
|
||||
if (len(text) == 2):
|
||||
if len(text) == 2:
|
||||
if log.info(text[1]):
|
||||
if text[0] == 'bag':
|
||||
price = priceBag
|
||||
|
@ -129,15 +140,14 @@ elif text[0] == 'bag' or text[0] == 'package' or text[0] == 'carton':
|
|||
max = 100000
|
||||
item = 'r_sack'
|
||||
|
||||
if ( activator.PayAmount(price*priceFactor) ):
|
||||
box = activator.Map.CreateObject(item, x, y)
|
||||
box.Name=sackName + ' T: ' + text[1] + ' F: ' + activatorname
|
||||
box.WeightLimit=max
|
||||
box.Strength=0
|
||||
whoami.Say(whoami, 'Here is your %s'%text[0])
|
||||
activator.InsertObject(box)
|
||||
if activator.PayAmount(price*priceFactor):
|
||||
box = activator.CreateObject(item)
|
||||
box.Name = sackName+' T: '+text[1]+' F: '+activatorname
|
||||
box.WeightLimit = max
|
||||
box.Str = 0
|
||||
whoami.Say('Here is your %s'%text[0])
|
||||
else:
|
||||
whoami.Say('You need %s platinum to buy a %s'%( price, text[0] ) )
|
||||
whoami.Say('You need %s platinum to buy a %s'%(price, text[0]))
|
||||
|
||||
else:
|
||||
whoami.Say('I don\'t know any %s'%text[1])
|
||||
|
@ -145,44 +155,55 @@ elif text[0] == 'bag' or text[0] == 'package' or text[0] == 'carton':
|
|||
else:
|
||||
whoami.Say('Send a %s to who?'%text[0] )
|
||||
|
||||
|
||||
elif text[0] == 'send':
|
||||
if len(text) == 2:
|
||||
count = 0
|
||||
inv = activator.CheckInventory(sackName)
|
||||
map = 0
|
||||
if inv != 0:
|
||||
while inv:
|
||||
next = inv.Below
|
||||
text2=string.split(inv.Name)
|
||||
if text2[0]==sackName and text2[1]=='T:' and text2[3]=='F:' and text2[2] == text[1]:
|
||||
map = Crossfire.ReadyMap(storage_map)
|
||||
if map == 0:
|
||||
whoami.Say('I\'m sorry but the post can\'t send your package now.')
|
||||
else:
|
||||
inv.Teleport(map, storage_x, storage_y)
|
||||
whoami.Say('Package sent')
|
||||
inv = next
|
||||
else:
|
||||
while inv:
|
||||
next = inv.Below
|
||||
text2 = string.split(inv.Name)
|
||||
if len(text2) == 5 and text2[0] == sackName and text2[1] == 'T:' and text2[3] == 'F:' and text2[2] == text[1]:
|
||||
map = Crossfire.ReadyMap(storage_map)
|
||||
if map:
|
||||
# rename container to prevent sending it multiple times
|
||||
inv.Name = sackName+' F: '+text2[4]+' T: '+text2[2]
|
||||
|
||||
inv.Teleport(map, storage_x, storage_y)
|
||||
count = count+1
|
||||
else:
|
||||
whoami.Say('I\'m sorry but the post can\'t send your package now.')
|
||||
inv = next
|
||||
if count <= 0:
|
||||
whoami.Say('No package to send.')
|
||||
elif count == 1:
|
||||
whoami.Say('Package sent.')
|
||||
else:
|
||||
whoami.Say('%d packages sent.'%count)
|
||||
else:
|
||||
whoami.Say('Send packages to who?')
|
||||
|
||||
|
||||
elif text[0] == 'receive':
|
||||
map = Crossfire.ReadyMap(storage_map)
|
||||
if ( map != 0 ):
|
||||
item = map.ObjectAt(storage_x, storage_y)
|
||||
if map:
|
||||
count = 0
|
||||
item = map.ObjectAt(storage_x, storage_y)
|
||||
while item:
|
||||
previous = item.Above
|
||||
text2 = string.split(item.Name)
|
||||
if ( len(text2) == 5 ) and ( text2[0] == sackName ) and ( text2[2] == activatorname ):
|
||||
activator.InsertObjectInside(item)
|
||||
count = count + 1
|
||||
if len(text2) == 5 and text2[0] == sackName and text2[4] == activatorname:
|
||||
item.InsertInto(activator)
|
||||
count = count+1
|
||||
item = previous
|
||||
if ( count == 0 ):
|
||||
if count <= 0:
|
||||
whoami.Say('No package for you, sorry.')
|
||||
else:
|
||||
whoami.Say('Here you go.')
|
||||
else:
|
||||
whoami.Say('Sorry, our package delivery service is currently in strike. Please come back later.')
|
||||
|
||||
|
||||
else:
|
||||
whoami.Say('Do you need help?')
|
||||
Crossfire.SetReturnValue(1)
|
||||
|
|
|
@ -27,55 +27,33 @@ from time import localtime, strftime, time
|
|||
|
||||
mail = CFMail.CFMail()
|
||||
date = strftime("%a, %d %b %Y %H:%M:%S CEST", localtime(time()))
|
||||
activator=Crossfire.WhoIsActivator()
|
||||
activatorname=activator.Name
|
||||
whoami=Crossfire.WhoAmI()
|
||||
idlist=[]
|
||||
activator = Crossfire.WhoIsActivator()
|
||||
activatorname = activator.Name
|
||||
whoami = Crossfire.WhoAmI()
|
||||
idlist = []
|
||||
|
||||
inv = whoami.CheckInventory("mailscroll")
|
||||
if inv != None:
|
||||
while inv!=None:
|
||||
print("INV:%s" %inv.Name)
|
||||
text=string.split(inv.Name)
|
||||
if text[0]=='mailscroll' and text[1]=='T:' and text[3]=='F:':
|
||||
idlist.append(inv)
|
||||
toname=text[2]
|
||||
fromname=text[4]
|
||||
message='From: %s\nTo: %s\nDate: %s\n\n%s\n' % (fromname, toname, date, inv.Message[:-1])
|
||||
activator.Write('mailscroll to '+toname+' sent.')
|
||||
mail.send(1, toname, fromname, message)
|
||||
elif text[0]=='mailscroll' and text[1]=='F:' and text[3]=='T:':
|
||||
idlist.append(inv)
|
||||
fromname=text[2]
|
||||
toname=text[4]
|
||||
message=inv.Message[:-1]+'\n'
|
||||
mail.send(1, toname, fromname, message)
|
||||
inv = whoami.Inventory
|
||||
while inv:
|
||||
text = string.split(inv.Name)
|
||||
if text[0] == 'mailscroll' or text[0] == 'mailwarning':
|
||||
if text[0] == 'mailscroll':
|
||||
type = 1
|
||||
else:
|
||||
print "ID: %d"%inv
|
||||
print "Name: "+inv.Name
|
||||
inv=inv.Below
|
||||
|
||||
inv = whoami.CheckInventory("mailwarning")
|
||||
if inv != None:
|
||||
while inv!=None:
|
||||
text=string.split(inv.Name)
|
||||
if text[0]=='mailwarning' and text[1]=='T:' and text[3]=='F:':
|
||||
type = 3
|
||||
if text[1] == 'T:' and text[3] == 'F:':
|
||||
idlist.append(inv)
|
||||
toname=text[2]
|
||||
fromname=text[4]
|
||||
message='From: %s\nTo: %s\nDate: %s\n\n%s\n' % (fromname, toname, date, inv.Message[:-1])
|
||||
activator.Write('mailwarning to '+toname+' sent.')
|
||||
mail.send(3, toname, fromname, message)
|
||||
elif text[0]=='mailwarning' and text[1]=='F:' and text[3]=='T:':
|
||||
toname = text[2]
|
||||
fromname = text[4]
|
||||
message = 'From: %s\nTo: %s\nDate: %s\n\n%s\n'%(fromname, toname, date, inv.Message[:-1])
|
||||
activator.Write(text[0]+' to '+toname+' sent.')
|
||||
mail.send(type, toname, fromname, message)
|
||||
elif text[1] == 'F:' and text[3] == 'T:':
|
||||
idlist.append(inv)
|
||||
fromname=text[2]
|
||||
toname=text[4]
|
||||
message=inv.Message[:-1]+'\n'
|
||||
mail.send(3, toname, fromname, message)
|
||||
else:
|
||||
print "ID: %d"%inv
|
||||
print "Name: "+inv.Name
|
||||
inv=inv.Below
|
||||
fromname = text[2]
|
||||
toname = text[4]
|
||||
message = inv.Message[:-1]+'\n'
|
||||
mail.send(type, toname, fromname, message)
|
||||
inv = inv.Below
|
||||
|
||||
for inv in idlist:
|
||||
inv.Remove()
|
||||
|
|
Loading…
Reference in New Issue