Code:
objectdef AuctionHouse
{
variable string QueryText
method Query(string Name, int Page=0)
{
This:Reset
QueryText:Set[${Name}]
WoWScript QueryAuctionItems(\"${QueryText}\",\"\",\"\",nil,nil,nil,${Page},nil,nil);
}
member Count()
{
return ${WoWScript["GetNumAuctionItems(\"list\")",2]}
}
member Pages()
{
return ${Math.Calc[${This.Count} / 50].Int}
}
member NaturalPrice(int Price)
{
variable int gold = 0
variable int silver = 0
variable int copper = 0
gold:Set[${Math.Calc[${Price} / 10000].Int}]
silver:Set[${Math.Calc[(${Price} / 100) % 100].Int}]
copper:Set[${Math.Calc[${Price} % 100].Int}]
return "${gold}g ${silver}s ${copper}c"
}
;
;
;
;
method PlaceBid(int Index, int Bid)
{
WoWScript "PlaceAuctionBid(\"list\",${Index},${Bid})"
}
method BuyOut(int Index)
{
This:PlaceBid[${Index},${This.BuyoutPrice[${Index}]}]
}
;
;
;
;
member AuctionItemCount()
{
return "${WoWScript[GetAuctionSellItemInfo(),3]}"
}
;
;
;
;
member TimeLeft(int Index)
{
return ${WoWScript["GetAuctionTimeLeft(\"list\",${Index})",1]}
}
member HighBidder(int Index)
{
return "${WoWScript["GetAuctionItemInfo(\"list\",${Index})",11].Equal[1]}"
}
member ItemName(int Index)
{
return "${WoWScript["GetAuctionItemInfo(\"list\",${Index})",1]}"
}
member Owner(int Index)
{
return "${WoWScript["GetAuctionItemInfo(\"list\",${Index})",12]}"
}
member StackCount(int Index)
{
return ${WoWScript["GetAuctionItemInfo(\"list\",${Index})",3]}
}
;
;
;
;
member MinBid(int Index)
{
return ${Math.Calc[${WoWScript["GetAuctionItemInfo(\"list\",${Index})",7]}].Int}
}
member MinIncrement(int Index)
{
return ${Math.Calc[${WoWScript["GetAuctionItemInfo(\"list\",${Index})",8]}].Int}
}
member CurrentBid(int Index)
{
return ${Math.Calc[${WoWScript["GetAuctionItemInfo(\"list\",${Index})",10]}].Int}
}
member CurrentPrice(int Index)
{
variable int price
if ${This.CurrentBid[${Index}]} == 0
{
price:Set[${This.MinBid[${Index}]}]
}
else
{
price:Set[${This.CurrentBid[${Index}]}]
}
if ${This.StackCount[${Index}]} > 1
{
price:Set[${price} / ${This.StackCount[${Index}]}]
}
if ${This.CurrentBid[${Index}]} != 0
{
price:Inc[${This.MinIncrement[${Index}]}]
}
return ${price}
}
member BuyoutPrice(int Index)
{
;gold = / 10000
echo ${Math.Calc[${WoWScript["GetAuctionItemInfo(\"list\",${Index})",9]}].Int}
return ${Math.Calc[${WoWScript["GetAuctionItemInfo(\"list\",${Index})",9]}].Int}
}
;
;
;
;
method Reset()
{
QueryText:Set[""]
Count:Set[0]
Pages:Set[0]
}
member Busy()
{
if ${WoWScript["CanSendAuctionQuery()",1]} == 1
{
return FALSE
}
return TRUE
}
}
function WalkTo(float X, float Y)
{
face ${X} ${Y}
wait 30 !${ISXWoW.Facing}
if ${Math.Distance[${Me.X},${Me.Y},${X},${Y}]} > 2
{
wowpress -hold moveforward
do
{
waitframe
if ${Movement.Moving} == 0
{
wowpress -hold moveforward
}
}
while ${Math.Distance[${Me.X},${Me.Y},${X},${Y}]} > 2
wowpress -release moveforward
}
}
function FetchMail()
{
variable float X
variable float Y
if ${Object["Mailbox"].Distance} > 5
{
X:Set[-4937]
Y:Set[-934]
call WalkTo ${X} ${Y}
call WalkTo ${Object["Mailbox"].X} ${Object["Mailbox"].Y}
}
if ${Object["Mailbox"].Distance} < 5
{
Object["Mailbox"]:Use
wait 100 ${WoWScript[InboxFrame:IsShown()].Equal[1]}
WoWScript "CheckInbox()"
wait 30
while ${WoWScript[GetInboxNumItems()]} > 0
{
WoWScript Postal_OpenAll:OpenAll()
wait 300
}
}
}
function OpenAuctionHouse()
{
variable float X
variable float Y
if ${Unit["Auctioneer Redmuse"].Distance} > 5
{
X:Set[-4937]
Y:Set[-934]
call WalkTo ${X} ${Y}
call WalkTo ${Unit["Auctioneer Redmuse"].X} ${Unit["Auctioneer Redmuse"].Y}
}
if ${Unit["Auctioneer Redmuse"].Distance} < 5
{
Unit["Auctioneer Redmuse"]:Use
wait 100 ${WoWScript[AuctionFrameBrowse:IsShown()].Equal[1]}
wait 20
wait 300 !${ah.Busy}
}
}
function Log(string Text)
{
UIElement[Status@monopoly]:Echo["${Time.Time24} ${Text}"]
}
function PlaceAuctionItem(string ItemName)
{
variable int BagIndex = 0
variable int SlotIndex = 0
variable int FreeSlots = 0
if !${Item[${ItemName}](exists)}
{
return
}
do
{
FreeSlots:Inc[${Me.Bag[${BagIndex}].EmptySlots}]
}
while ${Me.Bag[${BagIndex:Inc}](exists)}
BagIndex:Set[0]
do
{
SlotIndex:Set[1]
do
{
if ${Me.Bag[${BagIndex}].Item[${SlotIndex}].Name(exists)} && ${Me.Bag[${BagIndex}].Item[${SlotIndex}].Name.Equal[${ItemName}]} && ${FreeSlots} > 5
{
Me.Bag[${BagIndex}].Item[${SlotIndex}]:PickUp
wait 5
WoWScript ClickAuctionSellItemButton()
return
}
}
while ${SlotIndex:Inc} <= ${Me.Bag[${BagIndex}].Slots}
}
while ${Me.Bag[${BagIndex:Inc}](exists)} && ${FreeSlots} > 5
}
function main()
{
variable string ConfigDir = "c:/program files/innerspace/scripts/monopoly/"
variable string ConfigFile = "monopoly.xml"
variable settingsetref AuctionItems
variable settingsetref AuctionItem
variable iterator AuctionItemIterator
variable AuctionHouse ah
variable int Page = 0
variable int Index = 0
variable int AuctionPrice = 0
variable int SellPrice = 0
variable bool Quit = FALSE
echo "Monopoly starting."
LavishSettings:Clear
LavishSettings:AddSet["monopoly"]
LavishSettings["monopoly"]:Import[${ConfigDir}${ConfigFile}]
AuctionItems:Set[${LavishSettings["monopoly"].FindSet["AuctionItems"]}]
UI -load "c:/program files/innerspace/scripts/monopoly/gui.xml"
do
{
if ${WoWScript[HasNewMail()].Equal[1]}
{
call Log "Fetching mail"
call FetchMail
}
if !${WoWScript[AuctionFrame:IsShown()].Equal[1]}
{
call Log "Opening auction house"
call OpenAuctionHouse
}
AuctionItems:GetSetIterator[AuctionItemIterator]
if ${AuctionItemIterator:First(exists)}
{
do
{
call Log "Scanning for ${AuctionItemIterator.Key}"
AuctionItem:Set[${AuctionItems.FindSet[${AuctionItemIterator.Key}]}]
AuctionPrice:Set[${AuctionItem.FindSetting["Sell Price"].Int}]
ah:Query[${AuctionItemIterator.Key}]
wait 300 !${ah.Busy}
if ${ah.Count}
{
Page:Set[0]
do
{
Index:Set[1]
ah:Query[${AuctionItemIterator.Key},${Page}]
wait 300 !${ah.Busy}
do
{
if !${ah.Owner[${Index}].Equal["Ritur"]} && !${ah.Owner[${Index}].Equal["Isje"]} && !${ah.Owner[${Index}].Equal[${Me.Name}]} && ${ah.ItemName[${Index}].Equal[${AuctionItemIterator.Key}]} && ${ah.CurrentPrice[${Index}]} < ${AuctionPrice} && !${ah.HighBidder[${Index}]} && ${Math.Calc[${Me.Coinage}/10000]} > 30
{
if ${ah.BuyoutPrice[${Index}]} < ${AuctionPrice} && ${ah.BuyoutPrice[${Index}]} != 0
{
call Log "Buying out ${AuctionItemIterator.Key} from ${ah.Owner[${Index}]}, price ${ah.NaturalPrice[${Math.Calc[${ah.CurrentPrice[${Index}]} * ${ah.StackCount[${Index}]}]}]}"
ah:BuyOut[${Index}]
}
else
{
call Log "Placing bid on ${AuctionItemIterator.Key} from ${ah.Owner[${Index}]}, price ${ah.NaturalPrice[${Math.Calc[${ah.CurrentPrice[${Index}]} * ${ah.StackCount[${Index}]}]}]}"
;ah:PlaceBid[${Index},${Math.Calc[${ah.CurrentPrice[${Index}]} * ${ah.StackCount[${Index}]}]}]
}
wait 10
}
}
while !${ah.Owner[${Index:Inc}].Equal["NULL"]}
}
while ${Page:Inc} <= ${ah.Pages}
}
;
; Sell here
;
if ${Item[${AuctionItemIterator.Key}](exists)} && ${Math.Calc[${Me.Coinage}/10000]} > 1
{
call PlaceAuctionItem "${AuctionItemIterator.Key}"
wait 30
SellPrice:Set[${Math.Calc[${AuctionPrice} * ${ah.AuctionItemCount}]}]
call Log "Creating auction ${AuctionItemIterator.Key} x ${ah.AuctionItemCount} for ${ah.NaturalPrice[${SellPrice}]}"
WoWScript StartAuction(${SellPrice},${SellPrice},24*60)
}
}
while ${AuctionItemIterator:Next(exists)}
}
ISXWoW:ResetIdle
call Log "Sleeping..."
wait 1200
}
while !${Quit}
}
function atexit()
{
UI -unload "c:/program files/innerspace/scripts/monopoly/gui.xml"
echo "Monopoly exiting"
}