From de8ebe64dfaca4feda58cee7a764bfa7eb311c49 Mon Sep 17 00:00:00 2001 From: alestan Date: Wed, 7 Apr 2010 22:18:35 +0000 Subject: [PATCH] added dir to /python for handling the private shops git-svn-id: svn://svn.code.sf.net/p/crossfire/code/maps/trunk@12871 282e977c-c81d-0410-88c4-b93c2d0d6712 --- python/pshop/Floor.py | 69 +++++ python/pshop/Ice.py | 382 +++++++++++++++++++++++ python/pshop/TODO | 6 + python/pshop/entry.py | 141 +++++++++ python/pshop/pshop.py | 682 ++++++++++++++++++++++++++++++++++++++++++ python/pshop/rent.py | 0 6 files changed, 1280 insertions(+) create mode 100644 python/pshop/Floor.py create mode 100755 python/pshop/Ice.py create mode 100644 python/pshop/TODO create mode 100644 python/pshop/entry.py create mode 100644 python/pshop/pshop.py create mode 100644 python/pshop/rent.py diff --git a/python/pshop/Floor.py b/python/pshop/Floor.py new file mode 100644 index 000000000..86a36a0a6 --- /dev/null +++ b/python/pshop/Floor.py @@ -0,0 +1,69 @@ +import Crossfire,sys +sys.stderr=open('/tmp/output.log','w') +Params=Crossfire.ScriptParameters() +whoami=Crossfire.WhoAmI() +Arch=None +if whoami.Name=="Magic Lever": + Arch=whoami.Map.ObjectAt(49,2) +elif whoami.Name=="Buildable Lever": + Arch=whoami.Map.ObjectAt(49,3) +StartXY=Params.split(":")[0].split(',') +StopXY=Params.split(":")[1].split(',') +Width=int(StopXY[0])-int(StartXY[0]) +Height=int(StopXY[1])-int(StartXY[1]) +Area=Width*Height +XRange=range(int(StartXY[0]),int(StopXY[0])) +YRange=range(int(StartXY[1]),int(StopXY[1])) +def GetObjectByName(Map,X,Y,Name): + Object=Map.ObjectAt(X,Y) + while Object!=None: + if Object.Name==Name: + return Object + else: + Object=Object.Above + return Object +if Arch!=None: + whoami.Value=int(whoami.Value==1) + + Arch.Quantity=Area+1 + + + #def MoveToBottom(object): + #object.Say('s') + #Dict={} + #Counter=0 + #Item=object.Below + #object.Say(str(Item)) + #while Item!=None: + #Dict.update({str(Counter):Item}) + + + #Item=Item.Below + #for i in list(Dict.values()): + #i.Teleport(object.Map,object.X,object.Y) + + + for i in XRange: + for a in YRange: + if whoami.Value==1: + TmpArch=Arch.Split(1) + TmpArch.Teleport(whoami.Map,i,a) + #MoveToBottom(TmpArch) + else: + TmpArch=GetObjectByName(whoami.Map,i,a,Arch.Name) + if TmpArch!=None: + TmpArch.Remove() + else: + whoami.Say("Arch not found at "+str(i)+","+str(a)) + + +else: + for i in XRange: + for a in YRange: + t=whoami.Map.ObjectAt(i,a) + + while t!=None: + if t.Floor==1: + t.Name="Shop Floor" + t=t.Above + diff --git a/python/pshop/Ice.py b/python/pshop/Ice.py new file mode 100755 index 000000000..2d2cb4645 --- /dev/null +++ b/python/pshop/Ice.py @@ -0,0 +1,382 @@ +import Crossfire,random,math +import CFDataBase +CFDB=CFDataBase.CFDataBase("PShop") + +Params=Crossfire.ScriptParameters() + + +def GetObjectByName(object, Name): + while object.Name!=Name: + object=object.Above + if not object: + return 0 + return object +def FindFridge(object): + TRUE=False + while object!=None: + if object.Name=="Shop Floor": + TRUE=True + object=None + else: + object=object.Below + return TRUE +def FindPuddle(object): + a=object + while object!=None: + if object.Name.find("Puddle")>-1: + + return object + else: + object=object.Above + object=a + while object!=None: + if object.Name.find("Puddle")>-1: + + return object + else: + object=object.Below + return None +if Params=="Destroy": + + whoami=Crossfire.WhoAmI() + a=whoami.Inventory + while a !=None: + a.Remove() + a=whoami.Inventory + + + + b=whoami.CreateObject("icecube") + b.Weight=0 + z=b.CreateObject("event_time") + b.Speed=0.0010000000475*4 + if whoami.Map.Path.find("/world_")>-1: + b.Speed=b.Speed*10 + z.Title="Python" + z.Name="Puddle" + z.Slaying="/python/pshop/Ice.py" + z=b.CreateObject("event_destroy") + z.Title="Python" + z.Name="PuddleDeath" + z.Slaying="/python/pshop/Ice.py" + b.NamePl=str(1) + b.Teleport(whoami.Map,whoami.X,whoami.Y) + g=FindPuddle(b) + if g!=None: + b.Remove() + b=g + + b.Weight+=whoami.Weight + b.Name="Puddle" + if b.Weight<2000: + b.Face="rain1.111" + elif b.Weight<20000: + b.Face="rain2.111" + elif b.Weight<200000: + b.Face="rain3.111" + elif b.Weight<2000000: + b.Face="rain4.111" + else: + b.Face="rain5.111" + b.Pickable=0 +elif Params=="FogDeath": + whoami=Crossfire.WhoAmI() + a=whoami.Inventory + + while a !=None: + + a.Remove() + a=whoami.Inventory +elif Params=="Fog": + whoami=Crossfire.WhoAmI() + Rand=random.randint(0,8) + if Rand!=0: + whoami.Move(Rand) + + whoami.Weight-=1 + if whoami.Weight>=0: + Crossfire.SetReturnValue(1) + + +elif Params=="Get": + whoami=Crossfire.WhoAmI() + activator=Crossfire.WhoIsActivator() + + + Dict=CFDB.get("pshop") + + WL=str(whoami.WeightLimit) + Me=Dict.get(WL) + + a=(Me[0],"PickedUp",Me[2]) + + #Me=str(Me[0],(activator.X,activator.Y),Me[1]) + + + Dict.update({str(whoami.WeightLimit):(a[0],a[1],a[2])}) + CFDB.store("pshop",Dict) + + + + +elif Params=="Player": + whoami=Crossfire.WhoAmI() +elif Params=="PuddleDeath": + whoami=Crossfire.WhoAmI() + + Fogs=int(whoami.Weight/1000) + + a=whoami.Inventory + while a !=None: + a.Remove() + a=whoami.Inventory + FogsTmp=Fogs + if whoami.Name=="fog": + FogsTmp=whoami.Value + if Fogs > 50: + z=whoami.CreateObject("temp_fog") + Z=z.CreateObject("event_destroy") + Z.Name="PuddleDeath" + Z.Title="Python" + Z.Slaying="/python/pshop/Ice.py" + z.Weight=(Fogs-50)*1000 + Fogs=50 + z.Speed*=2 + z.Value=FogsTmp + + for i in range(Fogs): + + z=whoami.CreateObject("temp_fog") + z.Weight=(3+random.randint(1,10+int(math.sqrt(FogsTmp)))) + Rand=random.randint(1,2+int(FogsTmp/10)) + z.Speed*=Rand + z.Weight*=int(Rand/10)+1 + + y=z.CreateObject("event_time") + y.Name="Fog" + y.Title="Python" + y.Slaying="/python/pshop/Ice.py" + #y=z.CreateObject("event_destroy") + #y.Name="FogDeath" + #y.Title="Python" + #y.Slaying="/python/pshop/Ice.py" + + + + + +elif Params=="Puddle": + + whoami=Crossfire.WhoAmI() + whoami.Value+=1 + + + + + + #whoami.Speed+=(0.00010000000475/2) + + Mass=int(math.sqrt(whoami.Weight)) + IntMass=int(Mass/1000) + for i in range(IntMass): + z=whoami.CreateObject("temp_fog") + y=z.CreateObject("event_time") + y.Name="Fog" + y.Title="Python" + y.Slaying="/python/pshop/Ice.py" + #y=z.CreateObject("event_destroy") + #y.Name="FogDeath" + #y.Title="Python" + #y.Slaying="/python/pshop/Ice.py" + z.Weight=(3+random.randint(1,int(IntMass)+10)) + z.Speed=5*z.Speed + whoami.Drop(z) + whoami.Weight-=Mass + if whoami.Weight<=0: + + whoami.Remove() + else: + if whoami.Weight>20000: + a=whoami.CreateObject('icecube') + Mass=random.randint(1,int(whoami.Weight/2)) + whoami.Weight-=Mass + + a.Weight=Mass + Direction=random.randint(1,8) + whoami.Drop(a) + tmp=0 + CTRL=0 + + + if whoami.Map.Path.find("/world/world_")>-1: + tmp=0 + CTRL=0 + XY=(whoami.X,whoami.Y) + + while tmp==0: + tmp=whoami.Move(Direction) + Direction+=1 + if Direction==9: + Direction=1 + CTRL+=1 + if CTRL==8: + tmp=2 + a.Teleport(whoami.Map, whoami.X,whoami.Y) + whoami.Teleport(whoami.Map,XY[0],XY[1]) + + else: + while tmp==0: + tmp=a.Move(Direction) + Direction+=1 + if Direction==9: + Direction=1 + CTRL+=1 + if CTRL==8: + tmp=1 + + b=a.Map.ObjectAt(a.X,a.Y) + b=FindPuddle(b) + if b!=None: + b.Weight+=a.Weight + a.Remove() + a=b + + else: + a.Name=whoami.Name + if a.Weight < 1600: + a.Face="rain1.111" + elif a.Weight < 3200: + a.Face="rain2.111" + elif a.Weight<6400: + a.Face="rain3.111" + elif a.Weight<12800: + a.Face="rain4.111" + else: + a.Face="rain5.111" + Z=False + y=a.Inventory + while y!=None: + if y.Name.find("Puddle")>-1: + Z=True + y=None + else: + y=y.Below + if Z==False: + z=a.CreateObject("event_time") + a.Speed=0.0010000000475*4 + + z.Title="Python" + z.Name="Puddle" + z.Slaying="/python/pshop/Ice.py" + z=a.CreateObject("event_destroy") + z.Title="Python" + z.Name="PuddleDeath" + z.Slaying="/python/pshop/Ice.py" + #a.CreateTimer(500,2) + a.NamePl=str(1) + a.Pickable=0 + a.Speed=(0.0010000000475*4) + if whoami.Weight < 1600: + whoami.Face="rain1.111" + elif whoami.Weight < 3200: + whoami.Face="rain2.111" + elif whoami.Weight<6400: + whoami.Face="rain3.111" + elif whoami.Weight<12800: + whoami.Face="rain4.111" + else: + whoami.Face="rain5.111" + whoami.Speed=(0.0010000000475*4)+0.0010000000475*whoami.Value/(whoami.Weight/1000) + + + #whoami.Speed=max(whoami.Speed,0.0010000000475*4) + + +elif Params=="Timer": + whoami=Crossfire.WhoAmI() + + b=FindPuddle(whoami.Map.ObjectAt(whoami.X,whoami.Y)) + + + if b==None: + b=whoami.CreateObject("icecube") + b.Weight=0 + z=b.CreateObject("event_time") + b.Speed=0.0010000000475*4 + if whoami.Map.Path.find("/world_")>-1: + b.Speed=10*b.Speed + z.Title="Python" + z.Name="Puddle" + z.Slaying="/python/pshop/Ice.py" + z=b.CreateObject("event_destroy") + z.Title="Python" + z.Name="PuddleDeath" + z.Slaying="/python/pshop/Ice.py" + #b.CreateTimer(500,2) + b.NamePl=str(1) + + whoami.Drop(b) + #b.Speed+=.00001 + b.Name="Puddle" + Mass=int(100+math.sqrt(whoami.Weight)) + b.Weight+=max(Mass,50) + whoami.Weight-=max(Mass,50) + b.Pickable=0 + + if b.Weight<2000: + b.Face="rain1.111" + elif b.Weight<4000: + b.Face="rain2.111" + elif b.Weight<8000: + b.Face="rain3.111" + elif b.Weight<16000: + b.Face="rain4.111" + else: + b.Face="rain5.111" + if whoami.Weight<=0: + whoami.Quantity=0 + whoami.Speed+=0.00010000000475 +else: + whoami=Crossfire.WhoAmI() + + activator=Crossfire.WhoIsActivator() + mymap=activator.Map + + + + + t=mymap.ObjectAt(activator.X, activator.Y) + + if (FindFridge(t)): + whoami.Speed=0 + + + + Dict=CFDB.get("pshop") + + WL=str(whoami.WeightLimit) + Me=Dict.get(WL) + + a=(Me[0],(activator.X,activator.Y),Me[2]) + + #Me=str(Me[0],(activator.X,activator.Y),Me[1]) + + + Dict.update({str(whoami.WeightLimit):(a[0],a[1],a[2])}) + CFDB.store("pshop",Dict) + + Crossfire.SetReturnValue(0) + + else: + whoami.Speed=0.0010000000475*4 + if activator.Map.Path.find("/world_")>-1: + + #whoami.CreateTimer(1,2) + + whoami.Speed=whoami.Speed*10 + + + Crossfire.SetReturnValue(0) + + + diff --git a/python/pshop/TODO b/python/pshop/TODO new file mode 100644 index 000000000..22e161b14 --- /dev/null +++ b/python/pshop/TODO @@ -0,0 +1,6 @@ +Make buildable switch +Add event_destroy method to duplicate the icecube and mail a note to the owner. +Add event_timer to players on pickup to make the icecubes melt +Reduce description of the items to only non 0 values. +Split script Params so that multiple shops can be run. +Add tag to items for shop and shop name. diff --git a/python/pshop/entry.py b/python/pshop/entry.py new file mode 100644 index 000000000..865c389d2 --- /dev/null +++ b/python/pshop/entry.py @@ -0,0 +1,141 @@ +import Crossfire,datetime,CFDataBase +CFDB=CFDataBase.CFDataBase("PShop") +def GetObjectByWeightLimit(object, WeightLimit): + while object.WeightLimit!=WeightLimit: + object=object.Above + if not object: + return 0 + return object +def GetObjectByName(object, Name): + while object.Name!=Name: + object=object.Above + if not object: + return 0 + return object + +def find_player(object): + while (object.Type != 1) : #1 is type 'Player' + object = object.Above + if not object: + return 0 + return object +def GetObjectAt(Map,X,Y,Name): + Object=Map.ObjectAt(X,Y) + while Object!=None: + if Object.Name==Name: + return Object + else: + Object=Object.Above + return Object +def Expire(): + global Owner + + Inventory=mymap.ObjectAt(43,2) + MailMap=Crossfire.ReadyMap("/planes/IPO_storage") + while Inventory!=None: + if Inventory.Name!="Vault": + package=whoami.CreateObject("package") + package.Name="IPO-package F: Your-Private-Shop T: "+Owner + Inventory.InsertInto(package) + package.Teleport(MailMap,2,2) + + Inventory=Inventory.Above + Inventory=mymap.ObjectAt(43,2) + while Inventory!=None: + if Inventory.Name!="Vault": + package=whoami.CreateObject("package") + package.Name="IPO-package F: Your-Private-Shop T: "+Owner + Inventory.InsertInto(package) + package.Teleport(MailMap,2,2) + + Inventory=Inventory.Below + + Dict=CFDB.get("pshop") + + for i in Dict: + whoami.Say(i) + This=Dict.get(i) + whoami.Say(str(This)) + if This[1]!="PickedUp": + That=mymap.ObjectAt(This[1][0],This[1][1]) + whoami.Say(str(That)) + if That!=None: + That=GetObjectByWeightLimit(That,int(i)) + whoami.Say(str(That)) + if That!=0: + That.Teleport(whoami.Map,37,0) + + CFDB.store('pshop',{}) + Owner="Unowned" + Chest=mymap.ObjectAt(30,8) + Chest=GetObjectByName(Chest, "Rent Box") + if Chest!=0: + Chest.Teleport(mymap, 15,10) + for i in range(0,34): + for a in range(0,35): + b=GetObjectAt(whoami.Map,i,a,'NoBuild') + b.Remove + b=GetObjectAt(whoami.Map,i,a,'NoSpell') + b.Remove() + + GetObjectAt(whoami.Map,30,5,"Brazier material").Remove() + GetObjectAt(whoami.Map,30,6,"Firepot material").Remove() + GetObjectAt(whoami.Map,30,7,"Bright Firepot Material").Remove() + GetObjectAt(whoami.Map,29,8,"Red CWall material").Remove() + whoami.Map.ObjectAt(49,5).Teleport(whoami.Map,30,5) + whoami.Map.ObjectAt(49,4).Teleport(whoami.Map,30,6) + whoami.Map.ObjectAt(49,6).Teleport(whoami.Map,30,7) + whoami.Map.ObjectAt(49,7).Teleport(whoami.Map,29,8) +whoami=Crossfire.WhoAmI() + + + +activator=Crossfire.WhoIsActivator() +activatorname=activator.Name +mymap=activator.Map + +Variables=GetObjectByName(mymap.ObjectAt(49,0),"Variables") + + +VariableList= Variables.Message.split('\n') +Owner=VariableList[0] +Date=VariableList[1] +Days=VariableList[2] + +Owner=Owner.split(": ")[1] +Date=Date.split(": ")[1] + +Days=int(Days.split(": ")[1]) + +Year, Month, Day=Date.split("-") +LastDate=datetime.datetime(int(Year),int(Month),int(Day)) +Today=datetime.date(1,2,3).today() +Today=datetime.datetime(Today.year, Today.month, Today.day) +DaysPast=(Today-LastDate).days +Days-=DaysPast + +if Days<=0: + global Owner + + + Expire() + +Variables.Message="Owner: "+Owner+"\nDate: "+str(Today.year)+"-"+str(Today.month)+"-"+str(Today.day)+"\nDays: "+str(Days) + + +if activatorname==Owner: + message=Crossfire.WhatIsMessage() + if (message.upper().find("ENTER")>-1) or (message.upper().find("YES")>-1): + X=activator.X + Y=activator.Y + activator.Teleport(mymap, 37,3) + activator.Teleport(mymap, X, Y) + whoami.Say("Greetings sire, you have "+str(Days)+" days left.") + else: + whoami.Say("Greetings sire, would you like entry?") +else: + + if Owner!="Unowned": + whoami.Say("You are not alowed beyond this point. The rent will by up in "+str(Days)+" and you may rent it yourself then. If the current owner doesn't pay, that is.") + else: + whoami.Say("You are currently not alowed beyond this point. The rent is past due. If you wish to proceed, place a platinum coin in the deposit box.") \ No newline at end of file diff --git a/python/pshop/pshop.py b/python/pshop/pshop.py new file mode 100644 index 000000000..95cc2f676 --- /dev/null +++ b/python/pshop/pshop.py @@ -0,0 +1,682 @@ + + +import Crossfire,sys,datetime +whoami=Crossfire.WhoAmI() + +import CFDataBase,CFBank +sys.stderr=open("/tmp/output.log",'w') +sys.stdout=open("/tmp/output.log1",'w') +#for i in dir(CFDataBase): + #print i +#print CFDataBase.__file__ + +CFDB=CFDataBase.CFDataBase("PShop") +bank=CFBank.CFBank("ImperialBank_DB") +pshop=whoami.Map.Path.replace("/","_") + + +print CFDB.get(pshop) +print pshop +sys.stdout.flush() + + + +activator=Crossfire.WhoIsActivator() +def Expire(): + global Owner + + Inventory=mymap.ObjectAt(43,2) + MailMap=Crossfire.ReadyMap("/planes/IPO_storage") + while Inventory!=None: + if Inventory.Name!="Vault": + package=whoami.CreateObject("package") + package.Name="IPO-package F: Your-Private-Shop T: "+Owner + Inventory.InsertInto(package) + package.Teleport(MailMap,2,2) + + Inventory=Inventory.Above + Inventory=mymap.ObjectAt(43,2) + while Inventory!=None: + if Inventory.Name!="Vault": + package=whoami.CreateObject("package") + package.Name="IPO-package F: Your-Private-Shop T: "+Owner + Inventory.InsertInto(package) + package.Teleport(MailMap,2,2) + + Inventory=Inventory.Below + + Dict=CFDB.get(pshop) + + for i in Dict: + whoami.Say(i) + This=Dict.get(i) + whoami.Say(str(This)) + if This[1]!="PickedUp": + That=mymap.ObjectAt(This[1][0],This[1][1]) + whoami.Say(str(That)) + if That!=None: + That=GetObjectByWeightLimit(That,int(i)) + whoami.Say(str(That)) + if That!=0: + That.Teleport(whoami.Map,37,0) + + CFDB.store(pshop,{}) + Owner="Unowned" + Chest=mymap.ObjectAt(30,8) + Chest=GetObjectByName(Chest, "Rent Box") + if Chest!=0: + Chest.Teleport(mymap, 15,10) + for i in range(0,34): + for a in range(0,35): + b=GetObjectAt(whoami.Map,i,a,'NoBuild') + b.Remove + b=GetObjectAt(whoami.Map,i,a,'NoSpell') + b.Remove() + + GetObjectAt(whoami.Map,30,5,"Brazier material").Remove() + GetObjectAt(whoami.Map,30,6,"Firepot material").Remove() + GetObjectAt(whoami.Map,30,7,"Bright Firepot Material").Remove() + GetObjectAt(whoami.Map,29,8,"Red CWall material").Remove() + whoami.Map.ObjectAt(49,5).Teleport(whoami.Map,30,5) + whoami.Map.ObjectAt(49,4).Teleport(whoami.Map,30,6) + whoami.Map.ObjectAt(49,6).Teleport(whoami.Map,30,7) + whoami.Map.ObjectAt(49,7).Teleport(whoami.Map,29,8) +def GetObjectByName(object, Name): + while object.Name!=Name: + object=object.Above + if not object: + return 0 + return object +def GetObjectByWeightLimit(object, WeightLimit): + while object.WeightLimit!=WeightLimit: + object=object.Above + if not object: + return 0 + return object +def GetObjectByUID(object, UID): + while object.Name.split()[0]!=UID: + object=object.Above + if not object: + return 0 + return object +def GetInvCount(object): + Inv=object.Inventory + Counter=-1 + while Inv!=None: + Counter+=1 + Inv=Inv.Below + return Counter +mymap=activator.Map +CoinTypes={"SILVER":1,"GOLD":10,"PLATINUM":50,"JADE":5000,"AMBER":500000,"IMPERIAL":10000} +Params=Crossfire.ScriptParameters() +whoami.Say(str(whoami.Name)) +if whoami.Name.find("Store")>-1: + + + InvCount=GetInvCount(whoami) + if InvCount==0: + whoami.Say("Useage: Put an item in me and name a price. For details, ask for 'help'.") + + else: + Message=Crossfire.WhatIsMessage() + Message=Message.split() + Value=0 + for i in range(len(Message)): + CoinType=CoinTypes.get(Message[i].upper()) + if CoinType!=None: + Quantity=int(Message[i-1]) + Value+=Quantity*CoinType + Package=whoami.CreateObject("dust_generic") + Package.Face="package.111" + Package.Teleport(whoami.Map,43,2) + + for i in range(InvCount): + Item=whoami.Inventory + Item.InsertInto(Package) + + Package.Name=str(whoami.Value)+" "+str(Value) + Package.Speed=whoami.Value + Package.WeightLimit=0 + z=Package.CreateObject("event_pickup") + z.Name="Pickup" + z.Title="Python" + z.Slaying="/python/pshop/pshop.py" + + + + + #STRING=STRING.split("Items: ")[1] + + if Item.Name==Crossfire.ScriptParameters(): + Item=Item.Below + + + + GlassReplica=whoami.CreateObject("icecube") + GlassReplica.WeightLimit=whoami.Value + GlassReplica.Weight=max(Item.Weight*Item.Quantity,1) + GlassReplica.Quantity=1 + t=GlassReplica.CreateObject("event_drop") + t.Name="Drop" + t.Value=whoami.Value + t.Title="Python" + t.Slaying="/python/pshop/Ice.py" + t=GlassReplica.CreateObject("event_pickup") + t.Name="Get" + t.Title="Python" + t.Slaying="/python/pshop/Ice.py" + t=GlassReplica.CreateObject("event_destroy") + t.Name="Destroy" + t.Title="Python" + t.Slaying="/python/pshop/Ice.py" + t=GlassReplica.CreateObject("event_time") + t.Name="Timer" + t.Title="Python" + t.Slaying="/python/pshop/Ice.py" + GlassReplica.Speed=0.0010000000475 + + + + + GlassReplica.Face=str(Item.Face) + #GlassReplica.Material=(96,'ice') + + GlassReplica.Name=str(Item.Quantity)+" "+Item.Name+" Price: "+str(Value) + GlassReplica.NamePl="0" + + + Message="Name: "+str(Item.Name) + Message+="\nTitle: "+str(Item.Title) + Message+="\nMaterial: "+str(Item.Material.get("MaterialName")) + Message+="\nQuantity: "+str(Item.Quantity) + if Item.Cursed==1: + Message+="\nCursed: True" + Message+="\nWeight: "+str(Item.Weight) + + if Item.Dam!=0: + Message+="\nDam: "+str(Item.Dam) + if Item.AC!=0: + Message+="\nAC: "+str(Item.AC) + if Item.WC!=0: + Message+="\nWC: "+str(Item.WC) + if Item.Wis!=0: + Message+="\nWis: "+str(Item.Wis) + if Item.Str!=0: + Message+="\nStr: "+str(Item.Str) + + if Item.Pow!=0: + Message+="\nPow: "+str(Item.Pow) + if Item.Int!=0: + Message+="\nInt: "+str(Item.Int) + if Item.Dex!=0: + Message+="\nDex: "+str(Item.Dex) + if Item.Con!=0: + Message+="\nCon: "+str(Item.Con) + if Item.Cha!=0: + Message+="\nCha: "+str(Item.Cha) + if Item.Value!=0: + Message+="\nValue: "+str(Item.Value) + GlassReplica.Message=Message + Dict=CFDB.get(pshop) + if Dict==0: + Dict={} + if Dict==None: + Dict={} + Dict.update({str(whoami.Value):(Value,"PickedUp",Message)}) + + + CFDB.store(pshop,Dict) + + whoami.Value+=1 +elif whoami.Name.find("Rent Box")>-1: + whoami.Say('g') + Value=0 + Inventory=whoami.Inventory + + while Inventory!=None: + + if Inventory.ArchName=="event_close": + Inventory=Inventory.Above + else: + Value+=Inventory.Value*Inventory.Quantity + + Inventory.Teleport(whoami.Map,37,5) + Inventory=whoami.Inventory + Variables=whoami.Map.ObjectAt(49,0) + Variables=GetObjectByName(Variables,"Variables") + VariableList= Variables.Message.split('\n') + Owner=VariableList[0].split(": ")[1] + Date=VariableList[1].split(": ")[1] + Days=int(VariableList[2].split(": ")[1]) + + + + Year, Month, Day=Date.split("-") + LastDate=datetime.datetime(int(Year),int(Month),int(Day)) + Today=datetime.date(1,2,3).today() + Today=datetime.datetime(Today.year, Today.month, Today.day) + DaysPast=(Today-LastDate).days + Days-=DaysPast + MaxDays=int(Params) + if Owner!="Unowned": + if Days<30: + DT30=30-Days + if DT30<=Value/50: + Value-=DT30*50 + Days=30 + else: + Days+=int(Value/50) + Value-=int(Value/50)*50 + + + + if Value>=100: + if Days<60: + DT60=60-Days + if DT60<=Value/100: + Value-=DT60*100 + Days=60 + else: + Days+=int(Value/100) + Value-=int(Value/100)*100 + + if Value>=200: + if Days<90: + DT90=90-Days + if DT90<=Value/200: + Value-=DT90*200 + Days=90 + else: + Days+=int(Value/200) + Value-=int(Value/200)*200 + if Value>=400: + if Days<120: + DT120=120-Days + if DT120<=Value/400: + Value-=DT120*400 + Days=120 + else: + Days+=int(Value/400) + Value-=int(Value/400)*400 + if Value>=800: + if Days<150: + DT150=150-Days + if DT150<=Value/800: + Value-=DT150*800 + Days=150 + else: + Days+=int(Value/800) + Value-=int(Value/800)*800 + if Value>=1600: + if Days<180: + DT180=180-Days + if DT90<=Value/1600: + Value-=DT180*1600 + Days=180 + else: + Days+=int(Value/1600) + Value-=int(Value/1600)*1600 + if Value>=3200: + if Days<210: + DT210=210-Days + if DT210<=Value/3200: + Value-=DT210*3200 + Days=210 + else: + Days+=int(Value/3200) + Value-=int(Value/3200)*3200 + if Value>=6400: + if Days<240: + DT240=240-Days + if DT240<=Value/6400: + Value-=DT240*6400 + Days=240 + else: + Days+=int(Value/6400) + Value-=int(Value/6400)*6400 + if Value>=12800: + if Days<270: + DT270=270-Days + if DT270<=Value/12800: + Value-=DT270*12800 + Days=270 + else: + Days+=int(Value/12800) + Value-=int(Value/12800)*12800 + if Value>=25600: + if Days<300: + DT300=300-Days + if DT300<=Value/25600: + Value-=DT300*25600 + Days=300 + else: + Days+=int(Value/25600) + Value-=int(Value/25600)*25600 + + if Value>=51200: + if Days<330: + DT330=330-Days + if DT330<=Value/51200: + Value-=DT330*51200 + Days=330 + else: + Days+=int(Value/51200) + Value-=int(Value/51200)*51200 + if Value>=102400: + if Days<366: + DT366=366-Days + if DT366<=Value/102400: + Value-=DT366*102400 + Days=366 + else: + Days+=int(Value/102400) + Value-=int(Value/102400)*102400 + tmp=whoami.CreateObject("silvercoin") + tmp.Quantity=Value + Days=min(Days,MaxDays) + else: + DT30=30 + Owner=activator.Name + if DT30<=Value/50: + Value-=DT30*50 + Days=30 + else: + Days+=int(Value/50) + Value-=int(Value/50) + if Value>0: + tmp=whoami.CreateObject("silvercoin") + tmp.Quantity=Value + if Days>=1: + whoami.Teleport(whoami.Map,30,8) + else: + whoami.Teleport(whoami.Map,15,10) + Variables.Message="Owner: "+Owner+"\nDate: "+str(Today.year)+"-"+str(Today.month)+"-"+str(Today.day)+"\nDays: "+str(Days) +elif Params=="Trade": + Message=Crossfire.WhatIsMessage().split() + if Message[0].upper()=='TRADE': + Name='' + Title='' + Quantity=0 + for i in range(len(Message)): + + if Message[i].upper()=="NAME": + Name=Message[i+1] + elif Message[i].upper()=='TITLE': + Title=Message[i+1] + elif Message[i].upper()=='QUANTITY': + Quantity=int(Message[i+1]) +elif Params=="Exchange": + pass +elif Params=="InventorySay": + + Message=Crossfire.WhatIsMessage().split() + if Message[0]=="Remove": + + CFDB.store(pshop,None) + if Message[0].upper().find("DETAIL")>-1: + Item=' '.join(Message[1:]) + + Dict=CFDB.get(pshop) + + if Dict==0: + Dict={} + + Ctrl=1 + for i in Dict: + Str=Dict.get(str(i)) + Name=Str[2].split('\n')[0].split("Name: ")[1] + + if Item==Name: + + Message="\n"+str(Dict.get(i)[2]) + + Message+=("\nAsking Price: "+str(Dict.get(i)[0])+"\nLocation: ") + + if Dict.get(i)[1]=="PickedUp": + + Message+="Not on store floor" + + elif Dict.get(i)[1][1]<=9: + Message+="In employee only area." + else: + Message+=str(Dict.get(i)[1]) + Message+="\n(You are at ("+str(whoami.X)+","+str(whoami.Y)+")." + whoami.Say(Message) + Ctrl=0 + if Ctrl==1: + + + Item=int(Message[1]) + + + Item=list(Dict)[Item-1] + + Item=Dict.get(str(Item))[2].split('\n')[0].split('Name: ')[1] + + for i in Dict: + Str=Dict.get(str(i)) + Name=Str[2].split('\n')[0].split("Name: ")[1] + + if Item==Name: + + Message="\n"+str(Dict.get(i)[2]) + + Message+=("\nAsking Price: "+str(Dict.get(i)[0])+"\nLocation: ") + + if Dict.get(i)[1]=="PickedUp": + + Message+="Not on store floor" + + elif Dict.get(i)[1][1]<=9: + Message+="In employee only area." + else: + Message+=str(Dict.get(i)[1]) + Message+="\n(You are at ("+str(whoami.X)+","+str(whoami.Y)+")." + whoami.Say(Message) + Ctrl=0 +elif Params=="AutoCheckout": + Dict=CFDB.get(pshop) + Inv=activator.Inventory + Items=[] + RealItems=[] + MissingItems=[] + Price=0 + + while Inv!=None: + + if (Inv.Name.find("Price: ")>-1) and (Inv.Message.find("Value: ")>-1): + + Items=Items.__add__([Inv]) + + Inv=Inv.Below + + for i in Items: + Item=(activator.Map.ObjectAt(43,2)) + + + + Item=GetObjectByUID(Item,str(i.WeightLimit)) + + if Item!=0: + + Price+=int(Item.Name.split()[1]) + RealItems=RealItems.__add__([Item]) + else: + + whoami.Say("Item "+i.Name+" missing.") + MissingItems=MissingItems.__add__([i]) + if activator.PayAmount(Price): + for i in RealItems: + i.InsertInto(activator) + tmp=Dict.pop((str(i.Name.split()[0]))) + for i in Items: + i.Teleport(activator.Map, 37,0) + i.Speed+=(0.00010000000475*2) + + for i in MissingItems: + i.Teleport(activator.Map,37,0) + i.Speed+=(0.00010000000475*2) + tmp=Dict.pop((str(i.WeightLimit))) + + + CFDB.store(pshop,Dict) + + Variables=GetObjectByName(mymap.ObjectAt(49,0),"Variables") + + + + VariableList= Variables.Message.split('\n') + Owner=VariableList[0] + Date=VariableList[1] + Days=VariableList[2] + + Owner=Owner.split(": ")[1] + Date=Date.split(": ")[1] + + Days=int(Days.split(": ")[1]) + + Year, Month, Day=Date.split("-") + LastDate=datetime.datetime(int(Year),int(Month),int(Day)) + Today=datetime.date(1,2,3).today() + Today=datetime.datetime(Today.year, Today.month, Today.day) + DaysPast=(Today-LastDate).days + Days-=DaysPast + + if Days<30: + DT30=30-Days + if DT30<=Price/50: + Price-=DT30*50 + Days=30 + else: + Days+=int(Price/50) + Price-=int(Price/50) + + if Days<=0: + global Owner + + + Expire() + + Variables.Message="Owner: "+Owner+"\nDate: "+str(Today.year)+"-"+str(Today.month)+"-"+str(Today.day)+"\nDays: "+str(Days) + bank.deposit(Owner, int(Price/1.01)) + + else: + whoami.Say("You do not have enough cash, "+str(Price)+" silver needed.") +elif Params=="BankCheckout": + Dict=CFDB.get(pshop) + Inv=activator.Inventory + Items=[] + RealItems=[] + MissingItems=[] + Price=0 + + while Inv!=None: + + if (Inv.Name.find("Price: ")>-1) and (Inv.Message.find("Value: ")>-1): + + Items=Items.__add__([Inv]) + + Inv=Inv.Below + + for i in Items: + Item=(activator.Map.ObjectAt(43,2)) + + + + Item=GetObjectByUID(Item,str(i.WeightLimit)) + + if Item!=0: + + Price+=int(Item.Name.split()[1]) + RealItems=RealItems.__add__([Item]) + else: + + whoami.Say("Item "+i.Name+" missing.") + MissingItems=MissingItems.__add__([i]) + if bank.getbalance(activator.Name)>=Price: + bank.withdraw(activator.Name, Price) + for i in RealItems: + i.InsertInto(activator) + tmp=Dict.pop((str(i.Name.split()[0]))) + for i in Items: + i.Teleport(activator.Map, 37,0) + i.Speed+=(0.00010000000475*2) + + for i in MissingItems: + i.Teleport(activator.Map,37,0) + i.Speed+=(0.00010000000475*2) + tmp=Dict.pop((str(i.WeightLimit))) + + + CFDB.store(pshop,Dict) + + Variables=GetObjectByName(mymap.ObjectAt(49,0),"Variables") + + + + VariableList= Variables.Message.split('\n') + Owner=VariableList[0] + Date=VariableList[1] + Days=VariableList[2] + + Owner=Owner.split(": ")[1] + Date=Date.split(": ")[1] + + Days=int(Days.split(": ")[1]) + + Year, Month, Day=Date.split("-") + LastDate=datetime.datetime(int(Year),int(Month),int(Day)) + Today=datetime.date(1,2,3).today() + Today=datetime.datetime(Today.year, Today.month, Today.day) + DaysPast=(Today-LastDate).days + Days-=DaysPast + + if Days<30: + DT30=30-Days + if DT30<=Price/50: + Price-=DT30*50 + Days=30 + else: + Days+=int(Price/50) + Price-=int(Price/50) + + if Days<=0: + global Owner + + + Expire() + + Variables.Message="Owner: "+Owner+"\nDate: "+str(Today.year)+"-"+str(Today.month)+"-"+str(Today.day)+"\nDays: "+str(Days) + bank.deposit(Owner, int(Price/1.01)) + + else: + whoami.Say("You do not have enough funds in the bank. "+str(Price)+" needed.") +elif Params=="TrashOpen": + Trash=whoami.Map.ObjectAt(37,0) + while Trash!=None: + Trash1=Trash.Above + Trash.InsertInto(whoami) + Trash=Trash1 +elif Params=="TrashClose": + Trash=whoami.Inventory + while Trash!=None: + if (Trash.Name=="TrashClose") or (Trash.Name=="TrashOpen"): + Trash=Trash.Above + else: + Trash.Teleport(whoami.Map,37,0) + + if Trash.ArchName=="icecube": + Trash.Speed+=(0.00010000000475*2) + Trash=whoami.Inventory + +else: + whoami.Message="xyzzy" + Dict=CFDB.get(pshop) + if Dict==0: + Dict={} + whoami.Message='' + for i in Dict: + Str=Dict.get(i)[2].split('\n')[0] + + whoami.Message+=str(Str) + diff --git a/python/pshop/rent.py b/python/pshop/rent.py new file mode 100644 index 000000000..e69de29bb