import Crossfire,sys,datetime whoami=Crossfire.WhoAmI() activator=Crossfire.WhoIsActivator() import CFDataBase,CFBank #for i in dir(CFDataBase): #print i #print CFDataBase.__file__ CFDB=CFDataBase.CFDataBase("PShop") PicDB=CFDataBase.CFDataBase("PicDB") PicDict=PicDB.get("Dict") bank=CFBank.CFBank("ImperialBank_DB") pshop=whoami.Map.Path.replace("/","_") #print CFDB.get(pshop) #print pshop 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: This=Dict.get(i) if This[1]!="PickedUp": That=mymap.ObjectAt(This[1][0],This[1][1]) if That!=None: That=GetObjectByWeightLimit(That,int(i)) 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): for obj in [GetObjectAt(whoami.Map,i,a,'NoBuild'), GetObjectAt(whoami.Map,i,a,'NoSpell')]: if obj: obj.Remove() for obj in [GetObjectAt(whoami.Map,30,5,"Brazier material"), GetObjectAt(whoami.Map,30,6,"Firepot material"), GetObjectAt(whoami.Map,30,7,"Bright Firepot Material"), GetObjectAt(whoami.Map,29,8,"Red CWall material")]: if obj: obj.Remove() for pos_from, pos_to in [((49, 5), (30, 5)), ((49, 4), (30, 6)), ((49, 6), (30, 7)), ((49, 7), (29, 8))]: obj = whoami.Map.ObjectAt(*pos_from) if obj: obj.Teleport(whoami.Map, *pos_to) def GetObjectByName(object, Name): while object.Name!=Name: 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 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=whoami.Map CoinTypes={"SILVER":1,"GOLD":10,"PLATINUM":50,"JADE":5000,"AMBER":500000,"IMPERIAL":10000} Params=Crossfire.ScriptParameters() 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, {}) Dict.update({str(whoami.Value):(Value,"PickedUp",Message)}) CFDB.store(pshop,Dict) whoami.Value+=1 elif whoami.Name.find("Rent Box")>-1: Value=0 Inventory=whoami.Inventory while Inventory!=None: if Inventory.ArchName=="event_close": Inventory=Inventory.Below 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.remove_record(pshop) if Message[0].upper().find("DETAIL")>-1: Item=' '.join(Message[1:]) Dict=CFDB.get(pshop, {}) 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): 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): 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, {}) whoami.Message='' for i in Dict: Str=Dict.get(i)[2].split('\n')[0] whoami.Message+=str(Str)