diff options
author | Stefan Beller <stefanbeller@googlemail.com> | 2011-08-21 21:06:02 +0200 |
---|---|---|
committer | Stefan Beller <stefanbeller@googlemail.com> | 2011-08-21 21:06:02 +0200 |
commit | 16cff2426df9bbad4682fa6fe9fd2808cd009e93 (patch) | |
tree | 2f7379884f6799d30a33458cf36d0355ea9ef518 /main.py | |
parent | 8cbb45acaa00150a831d804cf08a967b30a4c7f8 (diff) | |
download | manamarket-16cff2426df9bbad4682fa6fe9fd2808cd009e93.tar.gz manamarket-16cff2426df9bbad4682fa6fe9fd2808cd009e93.tar.bz2 manamarket-16cff2426df9bbad4682fa6fe9fd2808cd009e93.tar.xz manamarket-16cff2426df9bbad4682fa6fe9fd2808cd009e93.zip |
Remove tabs by spaces and remove config file
Diffstat (limited to 'main.py')
-rw-r--r-- | main.py | 1348 |
1 files changed, 674 insertions, 674 deletions
@@ -19,7 +19,7 @@ import time import string from being import * -from config import * +from data.config import * from net.packet import * from net.protocol import * from net.packet_out import * @@ -43,451 +43,451 @@ def process_whisper(nick, msg, mapserv): if user != -10: if int(user.get("accesslevel")) == -1: # A user who has been blocked for abuse. - mapserv.sendall(whisper(nick, "You can no longer use the bot. If you feel this is in error, please contact <administrator>.")) - return + mapserv.sendall(whisper(nick, "You can no longer use the bot. If you feel this is in error, please contact <administrator>.")) + return if msg == "!list": - # Sends the list of items for sale. - if len(sale_tree.root) != 0: - mapserv.sendall(whisper(nick, "The following items are on sale:")) - else: - mapserv.sendall(whisper(nick, "No items for sale.")) - - for elem in sale_tree.root: - if time.time() - float(elem.get('add_time')) < 604800: # Check if an items time is up. - msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + \ - elem.get("itemId") + "|" + ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" - mapserv.sendall(whisper(nick, msg)) + # Sends the list of items for sale. + if len(sale_tree.root) != 0: + mapserv.sendall(whisper(nick, "The following items are on sale:")) + else: + mapserv.sendall(whisper(nick, "No items for sale.")) + + for elem in sale_tree.root: + if time.time() - float(elem.get('add_time')) < 604800: # Check if an items time is up. + msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + \ + elem.get("itemId") + "|" + ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" + mapserv.sendall(whisper(nick, msg)) elif broken_string[0] == '!selllist': - # Support for 4144's shop (Sell list) + # Support for 4144's shop (Sell list) data = '\302\202B1' - for elem in sale_tree.root: - data += utils.encode_str(int(elem.get("itemId")), 2) + for elem in sale_tree.root: + data += utils.encode_str(int(elem.get("itemId")), 2) data += utils.encode_str(int(elem.get("price")), 4) - data += utils.encode_str(int(elem.get("amount")), 3) - mapserv.sendall(whisper(nick, data)) + data += utils.encode_str(int(elem.get("amount")), 3) + mapserv.sendall(whisper(nick, data)) elif broken_string[0] == '!buyitem': - # 4144 buy command - if len(broken_string) == 4: - if broken_string[1].isdigit() and broken_string[2].isdigit() and broken_string[3].isdigit(): - # Traditional 4144 shop. - item_id = int(broken_string[1]) - price = int(broken_string[2]) - amount = int(broken_string[3]) - for elem in sale_tree.root: + # 4144 buy command + if len(broken_string) == 4: + if broken_string[1].isdigit() and broken_string[2].isdigit() and broken_string[3].isdigit(): + # Traditional 4144 shop. + item_id = int(broken_string[1]) + price = int(broken_string[2]) + amount = int(broken_string[3]) + for elem in sale_tree.root: if int(elem.get('amount')) >= amount and int(elem.get('price')) == price and int(elem.get('itemId')) == item_id: - process_whisper(nick, '!buy ' + str(amount) + " " + elem.get('uid'), mapserv) - return - mapserv.sendall(whisper(nick, "Item not found. Please check and try again.")) - else: - mapserv.sendall(whisper(nick, "Syntax incorrect")) + process_whisper(nick, '!buy ' + str(amount) + " " + elem.get('uid'), mapserv) + return + mapserv.sendall(whisper(nick, "Item not found. Please check and try again.")) + else: + mapserv.sendall(whisper(nick, "Syntax incorrect")) elif msg == "!info": # Send information related to a player. - if user == -10: - mapserv.sendall(whisper(nick, "Your current access level is 0.")) - elif int(user.get('accesslevel')) > 0: - mapserv.sendall(whisper(nick, "Your current access level is " + user.get('accesslevel') + ".")) - mapserv.sendall(whisper(nick, "Your have the following items for sale:")) - for elem in sale_tree.root: - if elem.get('name') == nick: - if time.time() - float(elem.get('add_time')) > 604800: - msg = "[expired] [" - else: - msg = "[selling] [" - - msg += elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" + \ - ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" - mapserv.sendall(whisper(nick, msg)) - - money = int(user.get('money')) - mapserv.sendall(whisper(nick, "You have " + str(money) + "gp to collect.")) - stall_msg = "You have " + str(int(user.get('stalls')) - int(user.get('used_stalls'))) + " free slots." - mapserv.sendall(whisper(nick, stall_msg)) + if user == -10: + mapserv.sendall(whisper(nick, "Your current access level is 0.")) + elif int(user.get('accesslevel')) > 0: + mapserv.sendall(whisper(nick, "Your current access level is " + user.get('accesslevel') + ".")) + mapserv.sendall(whisper(nick, "Your have the following items for sale:")) + for elem in sale_tree.root: + if elem.get('name') == nick: + if time.time() - float(elem.get('add_time')) > 604800: + msg = "[expired] [" + else: + msg = "[selling] [" + + msg += elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" + \ + ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" + mapserv.sendall(whisper(nick, msg)) + + money = int(user.get('money')) + mapserv.sendall(whisper(nick, "You have " + str(money) + "gp to collect.")) + stall_msg = "You have " + str(int(user.get('stalls')) - int(user.get('used_stalls'))) + " free slots." + mapserv.sendall(whisper(nick, stall_msg)) elif broken_string[0] == "!help": - # Sends help information - if len(broken_string) == 1: + # Sends help information + if len(broken_string) == 1: mapserv.sendall(whisper(nick, "Welcome to ManaMarket!")) - mapserv.sendall(whisper(nick, "The basic commands for the bot are: !list, !find <id> or <Item Name>, !buy <amount> <uid>, !add <amount> <price> <Item Name>, !money, !relist <uid>, !info, !getback <uid> ")) - mapserv.sendall(whisper(nick, "For a detailed description of each command, type !help <command> e.g. !help !buy")) - mapserv.sendall(whisper(nick, "For example:- to purchase an item shown in the list as:")) - mapserv.sendall(whisper(nick, "[selling] [6] 5 [@@640|Iron Ore@@] for 1000gp each")) - mapserv.sendall(whisper(nick, "you would type /whisper ManaMarket !buy 1 6" )) - mapserv.sendall(whisper(nick, "This will purchase one of item 6 (Iron Ore).")) - - elif len(broken_string) == 2: - if broken_string[1] == '!buy': - mapserv.sendall(whisper(nick, "!buy <amount> <uid> - Request the purchase of an item or items.")) - elif broken_string[1] == '!list': - mapserv.sendall(whisper(nick, "!list - Displays a list of all items for sale.")) - elif broken_string[1] == '!find': - mapserv.sendall(whisper(nick, "!find <id> or <Item Name> - Simple search to locate an item.")) - elif broken_string[1] == '!buy': - mapserv.sendall(whisper(nick, "!buy <amount> <uid> - Request the purchase of an item or items.")) - elif broken_string[1] == '!add': - mapserv.sendall(whisper(nick, "!add <amount> <price> <Item Name> - Add an item to the sell list (requires that you have an account).")) - elif broken_string[1] == '!money': - mapserv.sendall(whisper(nick, "!money - Allows you to collect money for any sales made on your behalf.")) - elif broken_string[1] == '!relist': - mapserv.sendall(whisper(nick, "!relist <uid> - Allows you to relist an item which has expired.")) - elif broken_string[1] == '!info': - mapserv.sendall(whisper(nick, "!info - Displays basic information about your account.")) - elif broken_string[1] == '!getback': - mapserv.sendall(whisper(nick, "!getback <uid> - Allows you to retrieve an item that has expired or you no longer wish to sell.")) + mapserv.sendall(whisper(nick, "The basic commands for the bot are: !list, !find <id> or <Item Name>, !buy <amount> <uid>, !add <amount> <price> <Item Name>, !money, !relist <uid>, !info, !getback <uid> ")) + mapserv.sendall(whisper(nick, "For a detailed description of each command, type !help <command> e.g. !help !buy")) + mapserv.sendall(whisper(nick, "For example:- to purchase an item shown in the list as:")) + mapserv.sendall(whisper(nick, "[selling] [6] 5 [@@640|Iron Ore@@] for 1000gp each")) + mapserv.sendall(whisper(nick, "you would type /whisper ManaMarket !buy 1 6" )) + mapserv.sendall(whisper(nick, "This will purchase one of item 6 (Iron Ore).")) + + elif len(broken_string) == 2: + if broken_string[1] == '!buy': + mapserv.sendall(whisper(nick, "!buy <amount> <uid> - Request the purchase of an item or items.")) + elif broken_string[1] == '!list': + mapserv.sendall(whisper(nick, "!list - Displays a list of all items for sale.")) + elif broken_string[1] == '!find': + mapserv.sendall(whisper(nick, "!find <id> or <Item Name> - Simple search to locate an item.")) + elif broken_string[1] == '!buy': + mapserv.sendall(whisper(nick, "!buy <amount> <uid> - Request the purchase of an item or items.")) + elif broken_string[1] == '!add': + mapserv.sendall(whisper(nick, "!add <amount> <price> <Item Name> - Add an item to the sell list (requires that you have an account).")) + elif broken_string[1] == '!money': + mapserv.sendall(whisper(nick, "!money - Allows you to collect money for any sales made on your behalf.")) + elif broken_string[1] == '!relist': + mapserv.sendall(whisper(nick, "!relist <uid> - Allows you to relist an item which has expired.")) + elif broken_string[1] == '!info': + mapserv.sendall(whisper(nick, "!info - Displays basic information about your account.")) + elif broken_string[1] == '!getback': + mapserv.sendall(whisper(nick, "!getback <uid> - Allows you to retrieve an item that has expired or you no longer wish to sell.")) elif msg == "!money": - # Trades any money earned through item sales. - if user == -10: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return - - amount = int(user.get('money')) - if amount == 0: - mapserv.sendall(whisper(nick, "You have no money to collect.")) - else: - trader_state.money = nick - if not trader_state.Trading.testandset(): - mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) - return + # Trades any money earned through item sales. + if user == -10: + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return + + amount = int(user.get('money')) + if amount == 0: + mapserv.sendall(whisper(nick, "You have no money to collect.")) + else: + trader_state.money = nick + if not trader_state.Trading.testandset(): + mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) + return player_id = beingManager.findId(nick) - if player_id != -10: - mapserv.sendall(trade_request(player_id)) + if player_id != -10: + mapserv.sendall(trade_request(player_id)) trader_state.timer = time.time() - else: - mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) - trader_state.reset() + else: + mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) + trader_state.reset() elif broken_string[0] == "!find": - # Returns a list of items, with the corresponding Item Id - !find <id> or <item name>. - if len(broken_string) < 2: + # Returns a list of items, with the corresponding Item Id - !find <id> or <item name>. + if len(broken_string) < 2: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return + return - items_found = False - item = " ".join(broken_string[1:]) # could be an id or an item name + items_found = False + item = " ".join(broken_string[1:]) # could be an id or an item name - if item.isdigit(): # an id - for elem in sale_tree.root: - if ((time.time() - float(elem.get('add_time'))) < 604800) \ - and int(elem.get("itemId")) == int(item): # Check if an items time is up. - msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" \ + if item.isdigit(): # an id + for elem in sale_tree.root: + if ((time.time() - float(elem.get('add_time'))) < 604800) \ + and int(elem.get("itemId")) == int(item): # Check if an items time is up. + msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" \ + ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" - mapserv.sendall(whisper(nick, msg)) - items_found = True - else: # an item name - for elem in sale_tree.root: - if ((time.time() - float(elem.get('add_time'))) < 604800) \ - and item.lower() in ItemDB.getItem(int(elem.get("itemId"))).name.lower(): # Check if an items time is up. - msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" \ + mapserv.sendall(whisper(nick, msg)) + items_found = True + else: # an item name + for elem in sale_tree.root: + if ((time.time() - float(elem.get('add_time'))) < 604800) \ + and item.lower() in ItemDB.getItem(int(elem.get("itemId"))).name.lower(): # Check if an items time is up. + msg = "[selling] [" + elem.get("uid") + "] " + elem.get("amount") + " [@@" + elem.get("itemId") + "|" \ + ItemDB.getItem(int(elem.get("itemId"))).name + "@@] for " + elem.get("price") + "gp each" - mapserv.sendall(whisper(nick, msg)) - items_found = True + mapserv.sendall(whisper(nick, msg)) + items_found = True - if not items_found: - mapserv.sendall(whisper(nick, "Item not found.")) + if not items_found: + mapserv.sendall(whisper(nick, "Item not found.")) elif msg == '!listusers': - # Admin command - shows a list of all user. + # Admin command - shows a list of all user. if user == -10: - return + return if int(user.get("accesslevel")) != 20: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return - data = '' + data = '' - for user in user_tree.root: + for user in user_tree.root: name = user.get('name') accesslevel = user.get('accesslevel') - slots = user.get('stalls') - used_slots = user.get('used_stalls') - money = user.get('money') - data += name+" ("+accesslevel+") "+used_slots+"/"+slots+" "+money+'gp, ' - # Format ManaMarket (20) 2/5 100000gp, + slots = user.get('stalls') + used_slots = user.get('used_stalls') + money = user.get('money') + data += name+" ("+accesslevel+") "+used_slots+"/"+slots+" "+money+'gp, ' + # Format ManaMarket (20) 2/5 100000gp, - if len(data) > 400: - mapserv.sendall(whisper(nick, data[0:len(data)-2]+".")) - data = '' + if len(data) > 400: + mapserv.sendall(whisper(nick, data[0:len(data)-2]+".")) + data = '' mapserv.sendall(whisper(nick, data[0:len(data)-2]+".")) elif broken_string[0] == '!setslots': - # Change the number of slots a user has - !setslots <slots> <name> + # Change the number of slots a user has - !setslots <slots> <name> if user == -10: - return + return if int(user.get("accesslevel")) != 20: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return - if len(broken_string) < 3: + if len(broken_string) < 3: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return + return - if broken_string[1].isdigit(): - slot = int(broken_string[1]) - name = " ".join(broken_string[2:]) + if broken_string[1].isdigit(): + slot = int(broken_string[1]) + name = " ".join(broken_string[2:]) - user_info = user_tree.get_user(name) + user_info = user_tree.get_user(name) - if user_info == -10: - mapserv.sendall(whisper(nick, "User not found, check and try again.")) - return + if user_info == -10: + mapserv.sendall(whisper(nick, "User not found, check and try again.")) + return - user_tree.get_user(name).set('stalls', str(slot)) - mapserv.sendall(whisper(nick, "Slots changed: "+name+" "+str(slot))) - user_tree.save() - else: + user_tree.get_user(name).set('stalls', str(slot)) + mapserv.sendall(whisper(nick, "Slots changed: "+name+" "+str(slot))) + user_tree.save() + else: mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == '!setaccess': - # Change someones access level - !setaccess <access level> <name> + # Change someones access level - !setaccess <access level> <name> if user == -10: - return + return if int(user.get("accesslevel")) != 20: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return - if len(broken_string) < 3: + if len(broken_string) < 3: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return + return - if (broken_string[1][0] == '-' and broken_string[1][1:].isdigit()) or broken_string[1].isdigit(): - accesslevel = int(broken_string[1]) - name = " ".join(broken_string[2:]) + if (broken_string[1][0] == '-' and broken_string[1][1:].isdigit()) or broken_string[1].isdigit(): + accesslevel = int(broken_string[1]) + name = " ".join(broken_string[2:]) - user_info = user_tree.get_user(name) + user_info = user_tree.get_user(name) - if user_info == -10: - mapserv.sendall(whisper(nick, "User not found, check and try again.")) - return + if user_info == -10: + mapserv.sendall(whisper(nick, "User not found, check and try again.")) + return - if int(user_info.get('accesslevel')) < int(user.get("accesslevel")) and accesslevel <= int(user.get("accesslevel")): - user_tree.get_user(name).set('accesslevel', str(accesslevel)) - mapserv.sendall(whisper(nick, "Access level changed:"+name+ " ("+str(accesslevel)+").")) - user_tree.save() - else: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + if int(user_info.get('accesslevel')) < int(user.get("accesslevel")) and accesslevel <= int(user.get("accesslevel")): + user_tree.get_user(name).set('accesslevel', str(accesslevel)) + mapserv.sendall(whisper(nick, "Access level changed:"+name+ " ("+str(accesslevel)+").")) + user_tree.save() + else: + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return else: mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == "!adduser": - # A command to give a user access to the bot - !adduser <access level> <stall> <player name>. + # A command to give a user access to the bot - !adduser <access level> <stall> <player name>. if user == -10: - return + return if int(user.get("accesslevel")) != 20: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return - if len(broken_string) < 3: + if len(broken_string) < 3: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return + return if broken_string[1].isdigit() and broken_string[2].isdigit(): al = int(broken_string[1]) stalls = int(broken_string[2]) player_name = " ".join(broken_string[3:]) - user_tree.add_user(player_name, stalls, al) - mapserv.sendall(whisper(nick, "User Added with " + str(stalls) + " slots.")) + user_tree.add_user(player_name, stalls, al) + mapserv.sendall(whisper(nick, "User Added with " + str(stalls) + " slots.")) else: mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == "!add": - # Allows a player with the correct permissions to add an item for sale - !add <amount> <price> <item name> - if user == -10: - mapserv.sendall(whisper(nick, "You are unable to add items.")) - return + # Allows a player with the correct permissions to add an item for sale - !add <amount> <price> <item name> + if user == -10: + mapserv.sendall(whisper(nick, "You are unable to add items.")) + return - if len(broken_string) < 3: + if len(broken_string) < 3: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return - - if int(user.get("accesslevel")) < 5: - mapserv.sendall(whisper(nick, "You are unable to add items.")) - return - - if int(user.get("used_stalls")) >= int(user.get("stalls")): - mapserv.sendall(whisper(nick, "You have no free slots. You may remove an item or wait for something to be sold.")) - return - - if broken_string[1].isdigit() and broken_string[2].isdigit(): - amount = int(broken_string[1]) - price = int(broken_string[2]) - item_name = " ".join(broken_string[3:]) - item_id = ItemDB.findId(item_name) - if item_id == -10: - mapserv.sendall(whisper(nick, "Item not found, check spelling.")) - return - - item = Item() - item.player = nick - item.get = 1 # 1 = get, 0 = give - item.id = item_id - item.amount = amount - item.price = price - trader_state.item = item - - if not trader_state.Trading.testandset(): - mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) - return + return + + if int(user.get("accesslevel")) < 5: + mapserv.sendall(whisper(nick, "You are unable to add items.")) + return + + if int(user.get("used_stalls")) >= int(user.get("stalls")): + mapserv.sendall(whisper(nick, "You have no free slots. You may remove an item or wait for something to be sold.")) + return + + if broken_string[1].isdigit() and broken_string[2].isdigit(): + amount = int(broken_string[1]) + price = int(broken_string[2]) + item_name = " ".join(broken_string[3:]) + item_id = ItemDB.findId(item_name) + if item_id == -10: + mapserv.sendall(whisper(nick, "Item not found, check spelling.")) + return + + item = Item() + item.player = nick + item.get = 1 # 1 = get, 0 = give + item.id = item_id + item.amount = amount + item.price = price + trader_state.item = item + + if not trader_state.Trading.testandset(): + mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) + return player_id = beingManager.findId(nick) - if player_id != -10: - mapserv.sendall(trade_request(player_id)) + if player_id != -10: + mapserv.sendall(trade_request(player_id)) trader_state.timer = time.time() - else: - mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) - trader_state.reset() - else: - mapserv.sendall(whisper(nick, "Syntax incorrect.")) + else: + mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) + trader_state.reset() + else: + mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == "!buy": - # Buy a given quantity of an item - !buy <amount> <uid> - if len(broken_string) != 3: - mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return - - if broken_string[1].isdigit() and broken_string[2].isdigit(): - amount = int(broken_string[1]) - uid = int(broken_string[2]) - item_info = sale_tree.get_uid(uid) - - if item_info == -10: - mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) - return - - if amount > int(item_info.get("amount")): - mapserv.sendall(whisper(nick, "I do not have that many.")) - return - - item = Item() - item.get = 0 # 1 = get, 0 = give - item.player = nick - item.id = int(item_info.get("itemId")) - item.uid = uid - item.amount = amount - item.price = int(item_info.get("price")) - trader_state.item = item - - if not trader_state.Trading.testandset(): - mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) - return + # Buy a given quantity of an item - !buy <amount> <uid> + if len(broken_string) != 3: + mapserv.sendall(whisper(nick, "Syntax incorrect.")) + return + + if broken_string[1].isdigit() and broken_string[2].isdigit(): + amount = int(broken_string[1]) + uid = int(broken_string[2]) + item_info = sale_tree.get_uid(uid) + + if item_info == -10: + mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) + return + + if amount > int(item_info.get("amount")): + mapserv.sendall(whisper(nick, "I do not have that many.")) + return + + item = Item() + item.get = 0 # 1 = get, 0 = give + item.player = nick + item.id = int(item_info.get("itemId")) + item.uid = uid + item.amount = amount + item.price = int(item_info.get("price")) + trader_state.item = item + + if not trader_state.Trading.testandset(): + mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) + return player_id = beingManager.findId(nick) - if player_id != -10: - mapserv.sendall(trade_request(player_id)) + if player_id != -10: + mapserv.sendall(trade_request(player_id)) trader_state.timer = time.time() - mapserv.sendall(whisper(nick, "That will be " + str(item.price * item.amount) + "gp.")) - else: - mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) - trader_state.reset() - else: - mapserv.sendall(whisper(nick, "Syntax incorrect.")) + mapserv.sendall(whisper(nick, "That will be " + str(item.price * item.amount) + "gp.")) + else: + mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) + trader_state.reset() + else: + mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == "!removeuser": - # Remove a user, for whatever reason - !removeuser <player name> + # Remove a user, for whatever reason - !removeuser <player name> if user == -10: - return + return - if len(broken_string) < 2: - mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return + if len(broken_string) < 2: + mapserv.sendall(whisper(nick, "Syntax incorrect.")) + return if int(user.get("accesslevel")) != 20: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return player_name = " ".join(broken_string[1:]) - check = user_tree.remove_user(player_name) - if check == 1: - mapserv.sendall(whisper(nick, "User Removed.")) - elif check == -10: - mapserv.sendall(whisper(nick, "User removal failed. Please check spelling.")) + check = user_tree.remove_user(player_name) + if check == 1: + mapserv.sendall(whisper(nick, "User Removed.")) + elif check == -10: + mapserv.sendall(whisper(nick, "User removal failed. Please check spelling.")) elif broken_string[0] == "!relist": # Relist an item which has expired - !relist <uid>. - if user == -10 or len(broken_string) != 2: + if user == -10 or len(broken_string) != 2: mapserv.sendall(whisper(nick, "Syntax incorrect.")) return - if int(user.get("accesslevel")) < 5: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return + if int(user.get("accesslevel")) < 5: + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return - if broken_string[1].isdigit(): - uid = int(broken_string[1]) - item_info = sale_tree.get_uid(uid) + if broken_string[1].isdigit(): + uid = int(broken_string[1]) + item_info = sale_tree.get_uid(uid) - if item_info == -10: - mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) - return + if item_info == -10: + mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) + return - if item_info.get('name') != nick: - mapserv.sendall(whisper(nick, "That doesn't belong to you!")) - return + if item_info.get('name') != nick: + mapserv.sendall(whisper(nick, "That doesn't belong to you!")) + return time_relisted = int(item_info.get('relisted')) - if int(item_info.get('relisted')) < 3: - sale_tree.get_uid(uid).set('add_time', str(time.time())) - sale_tree.get_uid(uid).set('relisted', str(time_relisted + 1)) - sale_tree.save() - mapserv.sendall(whisper(nick, "The item has been successfully relisted.")) - else: + if int(item_info.get('relisted')) < 3: + sale_tree.get_uid(uid).set('add_time', str(time.time())) + sale_tree.get_uid(uid).set('relisted', str(time_relisted + 1)) + sale_tree.save() + mapserv.sendall(whisper(nick, "The item has been successfully relisted.")) + else: mapserv.sendall(whisper(nick, "This item can no longer be relisted. Please collect it using !getback "+str(uid)+".")) - return + return else: - mapserv.sendall(whisper(nick, "Syntax incorrect.")) + mapserv.sendall(whisper(nick, "Syntax incorrect.")) elif broken_string[0] == "!getback": - # Trade the player back uid, remove from sale_items if trade successful - !getback <uid>. - if user == -10 or len(broken_string) != 2: + # Trade the player back uid, remove from sale_items if trade successful - !getback <uid>. + if user == -10 or len(broken_string) != 2: mapserv.sendall(whisper(nick, "Syntax incorrect.")) - return - - if int(user.get("accesslevel")) < 5: - mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) - return - - if broken_string[1].isdigit(): - uid = int(broken_string[1]) - item_info = sale_tree.get_uid(uid) - - if item_info == -10: - mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) - return - - if item_info.get('name') != nick: - mapserv.sendall(whisper(nick, "That doesn't belong to you!")) - return - - item = Item() - item.get = 0 - item.player = nick - item.id = int(item_info.get("itemId")) - item.uid = uid - item.amount = int(item_info.get("amount")) - item.price = 0 - trader_state.item = item - - if not trader_state.Trading.testandset(): - mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) - return + return + + if int(user.get("accesslevel")) < 5: + mapserv.sendall(whisper(nick, "You don't have the correct permissions.")) + return + + if broken_string[1].isdigit(): + uid = int(broken_string[1]) + item_info = sale_tree.get_uid(uid) + + if item_info == -10: + mapserv.sendall(whisper(nick, "Item not found. Please check the uid number and try again.")) + return + + if item_info.get('name') != nick: + mapserv.sendall(whisper(nick, "That doesn't belong to you!")) + return + + item = Item() + item.get = 0 + item.player = nick + item.id = int(item_info.get("itemId")) + item.uid = uid + item.amount = int(item_info.get("amount")) + item.price = 0 + trader_state.item = item + + if not trader_state.Trading.testandset(): + mapserv.sendall(whisper(nick, "I'm currently busy with a trade. Try again shortly")) + return player_id = beingManager.findId(nick) - if player_id != -10: - mapserv.sendall(trade_request(player_id)) + if player_id != -10: + mapserv.sendall(trade_request(player_id)) trader_state.timer = time.time() - else: - mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) - trader_state.reset() + else: + mapserv.sendall(whisper(nick, "Where are you?!? I can't trade with somebody who isn't here!")) + trader_state.reset() def main(): logging.basicConfig(filename='data/logs/activity.log', level=logging.INFO, format='%(asctime)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') @@ -514,19 +514,19 @@ def main(): charport = 0 # Login server packet loop. while True: - #time.sleep(0.1) + #time.sleep(0.1) data = login.recv(1500) if not data: break pb.feed(data) for packet in pb: if packet.is_type(SMSG_LOGIN_DATA): # login succeeded - packet.skip(2) - id1 = packet.read_int32() - accid = packet.read_int32() - id2 = packet.read_int32() - packet.skip(30) - player_node.sex = packet.read_int8() + packet.skip(2) + id1 = packet.read_int32() + accid = packet.read_int32() + id2 = packet.read_int32() + packet.skip(30) + player_node.sex = packet.read_int8() charip = utils.parse_ip(packet.read_int32()) charport = packet.read_int16() login.close() @@ -559,39 +559,39 @@ def main(): pb.feed(data) for packet in pb: if packet.is_type(SMSG_CHAR_LOGIN): - packet.skip(2) - slots = packet.read_int16() - packet.skip(18) - count = (len(packet.data)-22) / 106 - for i in range(count): - player_node.id = packet.read_int32() - player_node.EXP = packet.read_int32() - player_node.MONEY = packet.read_int32() - packet.skip(30) - player_node.HP = packet.read_int16() - player_node.MAX_HP = packet.read_int16() - player_node.MP = packet.read_int16() - player_node.MAX_MP = packet.read_int16() - packet.skip(8) - player_node.LEVEL = packet.read_int16() - packet.skip(14) - player_node.name = packet.read_string(24) - packet.skip(6) + packet.skip(2) + slots = packet.read_int16() + packet.skip(18) + count = (len(packet.data)-22) / 106 + for i in range(count): + player_node.id = packet.read_int32() + player_node.EXP = packet.read_int32() + player_node.MONEY = packet.read_int32() + packet.skip(30) + player_node.HP = packet.read_int16() + player_node.MAX_HP = packet.read_int16() + player_node.MP = packet.read_int16() + player_node.MAX_MP = packet.read_int16() + packet.skip(8) + player_node.LEVEL = packet.read_int16() + packet.skip(14) + player_node.name = packet.read_string(24) + packet.skip(6) slot = packet.read_int8() - packet.skip(1) - print "Character information recieved:" - print "Name: %s, Id: %s, EXP: %s, MONEY: %s, HP: %s/%s, MP: %s/%s, LEVEL: %s"\ + packet.skip(1) + print "Character information recieved:" + print "Name: %s, Id: %s, EXP: %s, MONEY: %s, HP: %s/%s, MP: %s/%s, LEVEL: %s"\ % (player_node.name, player_node.id, player_node.EXP, player_node.MONEY, player_node.HP, player_node.MAX_HP, player_node.MP, player_node.MAX_MP, player_node.LEVEL) - if slot == int(character): - break + if slot == int(character): + break - char_select_packet = PacketOut(CMSG_CHAR_SELECT) - char_select_packet.write_int8(int(character)) - char.sendall(str(char_select_packet)) + char_select_packet = PacketOut(CMSG_CHAR_SELECT) + char_select_packet.write_int8(int(character)) + char.sendall(str(char_select_packet)) elif packet.is_type(SMSG_CHAR_MAP_INFO): - player_node.id = packet.read_int32() - player_node.map = packet.read_string(16) + player_node.id = packet.read_int32() + player_node.map = packet.read_string(16) mapip = utils.parse_ip(packet.read_int32()) mapport = packet.read_int16() char.close() @@ -633,379 +633,379 @@ def main(): for packet in pb: if packet.is_type(SMSG_MAP_LOGIN_SUCCESS): # connected - logging.info("Map login success.") - packet.skip(4) - coord_data = packet.read_coord_dir() - player_node.x = coord_data[0] - player_node.y = coord_data[1] - player_node.direction = coord_data[2] - print "Starting Postion: %s %s %s" % (player_node.map, player_node.x, player_node.y) + logging.info("Map login success.") + packet.skip(4) + coord_data = packet.read_coord_dir() + player_node.x = coord_data[0] + player_node.y = coord_data[1] + player_node.direction = coord_data[2] + print "Starting Postion: %s %s %s" % (player_node.map, player_node.x, player_node.y) mapserv.sendall(str(PacketOut(CMSG_MAP_LOADED))) # map loaded - # A Thread to send a shop broadcast: also keeps the network active to prevent timeouts. - shop_broadcaster.start() + # A Thread to send a shop broadcast: also keeps the network active to prevent timeouts. + shop_broadcaster.start() elif packet.is_type(SMSG_WHISPER): - msg_len = packet.read_int16() - 26 + msg_len = packet.read_int16() - 26 nick = packet.read_string(24) message = packet.read_raw_string(msg_len) - logging.info("Whisper: " + nick + ": " + message) - if nick != "guild": - process_whisper(nick, utils.remove_colors(message), mapserv) + logging.info("Whisper: " + nick + ": " + message) + if nick != "guild": + process_whisper(nick, utils.remove_colors(message), mapserv) elif packet.is_type(SMSG_PLAYER_CHAT): # server speech - msg_len = packet.read_int16() - 2 - being_id = packet.read_int32() + msg_len = packet.read_int16() - 2 + being_id = packet.read_int32() message = packet.read_string(msg_len) if "automaticly banned for spam" in message: time.sleep(3) elif packet.is_type(SMSG_BEING_CHAT): # char speech - msg_len = packet.read_int16() - 2 - being_id = packet.read_int32() + msg_len = packet.read_int16() - 2 + being_id = packet.read_int32() message = packet.read_string(msg_len) elif packet.is_type(SMSG_WALK_RESPONSE): - packet.read_int32() - coord_data = packet.read_coord_pair() - player_node.x = coord_data[2] - player_node.y = coord_data[3] + packet.read_int32() + coord_data = packet.read_coord_pair() + player_node.x = coord_data[2] + player_node.y = coord_data[3] elif packet.is_type(SMSG_PLAYER_STAT_UPDATE_1): - stat_type = packet.read_int16() - value = packet.read_int32() - if stat_type == 0x0005: - player_node.HP = value - elif stat_type == 0x0006: - player_node.MaxHP = value - elif stat_type == 0x0007: - player_node.MP = value - elif stat_type == 0x0008: - player_node.MaxMP = value - elif stat_type == 0x000b: - player_node.LEVEL = value - print "Level changed: %s" % value - elif stat_type == 0x0018: - print "Weight changed from %s/%s to %s/%s" % (player_node.WEIGHT, player_node.MaxWEIGHT, value, player_node.MaxWEIGHT) - logging.info("Weight changed from %s/%s to %s/%s", player_node.WEIGHT, player_node.MaxWEIGHT, value, player_node.MaxWEIGHT) - player_node.WEIGHT = value - elif stat_type == 0x0019: - print "Max Weight: %s" % value - player_node.MaxWEIGHT = value + stat_type = packet.read_int16() + value = packet.read_int32() + if stat_type == 0x0005: + player_node.HP = value + elif stat_type == 0x0006: + player_node.MaxHP = value + elif stat_type == 0x0007: + player_node.MP = value + elif stat_type == 0x0008: + player_node.MaxMP = value + elif stat_type == 0x000b: + player_node.LEVEL = value + print "Level changed: %s" % value + elif stat_type == 0x0018: + print "Weight changed from %s/%s to %s/%s" % (player_node.WEIGHT, player_node.MaxWEIGHT, value, player_node.MaxWEIGHT) + logging.info("Weight changed from %s/%s to %s/%s", player_node.WEIGHT, player_node.MaxWEIGHT, value, player_node.MaxWEIGHT) + player_node.WEIGHT = value + elif stat_type == 0x0019: + print "Max Weight: %s" % value + player_node.MaxWEIGHT = value elif packet.is_type(SMSG_PLAYER_STAT_UPDATE_2): - stat_type = packet.read_int16() - value = packet.read_int32() - if stat_type == 0x0001: - player_node.EXP = value - elif stat_type == 0x0014: - logging.info("Money Changed from %s, to %s", player_node.MONEY, value) - print "Money Changed from %s, to %s" % (player_node.MONEY, value) - player_node.MONEY = value - elif stat_type == 0x0016: - player_node.EXP_NEEDED = value - print "Exp Needed: %s" % player_node.EXP_NEEDED + stat_type = packet.read_int16() + value = packet.read_int32() + if stat_type == 0x0001: + player_node.EXP = value + elif stat_type == 0x0014: + logging.info("Money Changed from %s, to %s", player_node.MONEY, value) + print "Money Changed from %s, to %s" % (player_node.MONEY, value) + player_node.MONEY = value + elif stat_type == 0x0016: + player_node.EXP_NEEDED = value + print "Exp Needed: %s" % player_node.EXP_NEEDED elif packet.is_type(SMSG_BEING_MOVE) or packet.is_type(SMSG_BEING_VISIBLE)\ or packet.is_type(SMSG_PLAYER_MOVE) or packet.is_type(SMSG_PLAYER_UPDATE_1)\ or packet.is_type(SMSG_PLAYER_UPDATE_2): - being_id = packet.read_int32() + being_id = packet.read_int32() packet.skip(8) - job = packet.read_int16() - if being_id not in beingManager.container: - if job == 0 and id >= 110000000 and (packet.is_type(SMSG_BEING_MOVE)\ + job = packet.read_int16() + if being_id not in beingManager.container: + if job == 0 and id >= 110000000 and (packet.is_type(SMSG_BEING_MOVE)\ or packet.is_type(SMSG_BEING_VISIBLE)): - continue - # Add the being to the BeingManager, and request name. - beingManager.container[being_id] = Being(being_id, job) - requestName = PacketOut(0x0094) - requestName.write_int32(being_id) - mapserv.sendall(str(requestName)) - - packet.skip(8) - - if (packet.is_type(SMSG_BEING_MOVE) or packet.is_type(SMSG_PLAYER_MOVE)): - packet.read_int32() - - packet.skip(22) - - if (packet.is_type(SMSG_BEING_MOVE) or packet.is_type(SMSG_PLAYER_MOVE)): - coord_data = packet.read_coord_pair() - beingManager.container[being_id].dst_x = coord_data[2] - beingManager.container[being_id].dst_y = coord_data[3] - else: - coord_data = packet.read_coord_dir() - beingManager.container[being_id].x = coord_data[0] + continue + # Add the being to the BeingManager, and request name. + beingManager.container[being_id] = Being(being_id, job) + requestName = PacketOut(0x0094) + requestName.write_int32(being_id) + mapserv.sendall(str(requestName)) + + packet.skip(8) + + if (packet.is_type(SMSG_BEING_MOVE) or packet.is_type(SMSG_PLAYER_MOVE)): + packet.read_int32() + + packet.skip(22) + + if (packet.is_type(SMSG_BEING_MOVE) or packet.is_type(SMSG_PLAYER_MOVE)): + coord_data = packet.read_coord_pair() + beingManager.container[being_id].dst_x = coord_data[2] + beingManager.container[being_id].dst_y = coord_data[3] + else: + coord_data = packet.read_coord_dir() + beingManager.container[being_id].x = coord_data[0] beingManager.container[being_id].y = coord_data[1] - beingManager.container[being_id].direction = coord_data[2] - - elif packet.is_type(SMSG_BEING_NAME_RESPONSE): - being_id = packet.read_int32() - if being_id in beingManager.container: - beingManager.container[being_id].name = packet.read_string(24) - - elif packet.is_type(SMSG_BEING_REMOVE): - being_id = packet.read_int32() - if being_id in beingManager.container: - del beingManager.container[being_id] - - elif packet.is_type(SMSG_PLAYER_WARP): - player_node.map = packet.read_string(16) - player_node.x = packet.read_int16() - player_node.y = packet.read_int16() - logging.info("Player warped.") + beingManager.container[being_id].direction = coord_data[2] + + elif packet.is_type(SMSG_BEING_NAME_RESPONSE): + being_id = packet.read_int32() + if being_id in beingManager.container: + beingManager.container[being_id].name = packet.read_string(24) + + elif packet.is_type(SMSG_BEING_REMOVE): + being_id = packet.read_int32() + if being_id in beingManager.container: + del beingManager.container[being_id] + + elif packet.is_type(SMSG_PLAYER_WARP): + player_node.map = packet.read_string(16) + player_node.x = packet.read_int16() + player_node.y = packet.read_int16() + logging.info("Player warped.") mapserv.sendall(str(PacketOut(CMSG_MAP_LOADED))) - elif packet.is_type(SMSG_BEING_ACTION): - src_being = packet.read_int32() - dst_being = packet.read_int32() - packet.skip(12) - param1 = packet.read_int16() - packet.skip(2) - action_type = packet.read_int8() + elif packet.is_type(SMSG_BEING_ACTION): + src_being = packet.read_int32() + dst_being = packet.read_int32() + packet.skip(12) + param1 = packet.read_int16() + packet.skip(2) + action_type = packet.read_int8() - if src_being in beingManager.container: - if action_type == 0: # Damage - beingManager.container[src_being].action = "attack" - beingManager.container[src_being].target = dst_being + if src_being in beingManager.container: + if action_type == 0: # Damage + beingManager.container[src_being].action = "attack" + beingManager.container[src_being].target = dst_being - elif action_type == 0x02: # Sit - beingManager.container[src_being].action = "sit" + elif action_type == 0x02: # Sit + beingManager.container[src_being].action = "sit" - elif action_type == 0x03: # Stand up - beingManager.container[src_being].action = "stand" + elif action_type == 0x03: # Stand up + beingManager.container[src_being].action = "stand" elif packet.is_type(SMSG_PLAYER_INVENTORY_ADD): - item = Item() + item = Item() item.index = packet.read_int16() - inventory_offset - item.amount = packet.read_int16() - item.itemId = packet.read_int16() - item.identified = packet.read_int8() - packet.read_int8() - item.refine = packet.read_int8() - packet.skip(8) - item.equipType = packet.read_int16() - item.itemType = packet.read_int8() - err = packet.read_int8() + item.amount = packet.read_int16() + item.itemId = packet.read_int16() + item.identified = packet.read_int8() + packet.read_int8() + item.refine = packet.read_int8() + packet.skip(8) + item.equipType = packet.read_int16() + item.itemType = packet.read_int8() + err = packet.read_int8() if err == 0: - if item.index in player_node.inventory: - player_node.inventory[item.index].amount += item.amount - else: - player_node.inventory[item.index] = item + if item.index in player_node.inventory: + player_node.inventory[item.index].amount += item.amount + else: + player_node.inventory[item.index] = item - print "Picked up: %s, Amount: %s" % (ItemDB.getItem(item.itemId).name, item.amount) - logging.info("Picked up: %s, Amount: %s", ItemDB.getItem(item.itemId).name, str(item.amount)) + print "Picked up: %s, Amount: %s" % (ItemDB.getItem(item.itemId).name, item.amount) + logging.info("Picked up: %s, Amount: %s", ItemDB.getItem(item.itemId).name, str(item.amount)) elif packet.is_type(SMSG_PLAYER_INVENTORY_REMOVE): - index = packet.read_int16() - inventory_offset + index = packet.read_int16() - inventory_offset amount = packet.read_int16() - print "Remove item: %s, Amount: %s" % (ItemDB.getItem(player_node.inventory[index].itemId).name, amount) - logging.info("Remove item: %s, Amount: %s", ItemDB.getItem(player_node.inventory[index].itemId).name, str(amount)) - if index in player_node.inventory: - player_node.inventory[index].amount -= amount - if player_node.inventory[index].amount == 0: - del player_node.inventory[index] + print "Remove item: %s, Amount: %s" % (ItemDB.getItem(player_node.inventory[index].itemId).name, amount) + logging.info("Remove item: %s, Amount: %s", ItemDB.getItem(player_node.inventory[index].itemId).name, str(amount)) + if index in player_node.inventory: + player_node.inventory[index].amount -= amount + if player_node.inventory[index].amount == 0: + del player_node.inventory[index] elif packet.is_type(SMSG_PLAYER_INVENTORY): - player_node.inventory.clear() # Clear the inventory - incase of new index. - packet.skip(2) - number = (len(packet.data)-2) / 18 + player_node.inventory.clear() # Clear the inventory - incase of new index. + packet.skip(2) + number = (len(packet.data)-2) / 18 for loop in range(number): - item = Item() - item.index = packet.read_int16() - inventory_offset - item.itemId = packet.read_int16() - item.itemType = packet.read_int8() - item.identified = packet.read_int8() - item.amount = packet.read_int16() - item.arrow = packet.read_int16() - packet.skip(8) # Cards - player_node.inventory[item.index] = item + item = Item() + item.index = packet.read_int16() - inventory_offset + item.itemId = packet.read_int16() + item.itemType = packet.read_int8() + item.identified = packet.read_int8() + item.amount = packet.read_int16() + item.arrow = packet.read_int16() + packet.skip(8) # Cards + player_node.inventory[item.index] = item elif packet.is_type(SMSG_PLAYER_EQUIPMENT): - packet.read_int16() - number = (len(packet.data)) / 20 + packet.read_int16() + number = (len(packet.data)) / 20 for loop in range(number): - item = Item() - item.index = packet.read_int16() - inventory_offset - item.itemId = packet.read_int16() - item.itemType = packet.read_int8() - item.identified = packet.read_int8() - packet.skip(2) - item.equipType = packet.read_int16() - packet.skip(1) - item.refine = packet.read_int8() - packet.skip(8) - item.amount = 1 - player_node.inventory[item.index] = item - - for item in player_node.inventory: - print "Name: %s, Id: %s, Index: %s, Amount: %s." % \ + item = Item() + item.index = packet.read_int16() - inventory_offset + item.itemId = packet.read_int16() + item.itemType = packet.read_int8() + item.identified = packet.read_int8() + packet.skip(2) + item.equipType = packet.read_int16() + packet.skip(1) + item.refine = packet.read_int8() + packet.skip(8) + item.amount = 1 + player_node.inventory[item.index] = item + + for item in player_node.inventory: + print "Name: %s, Id: %s, Index: %s, Amount: %s." % \ (ItemDB.getItem(player_node.inventory[item].itemId).name, \ player_node.inventory[item].itemId, item, player_node.inventory[item].amount) - elif packet.is_type(SMSG_TRADE_REQUEST): - print "SMSG_TRADE_REQUEST" - name = packet.read_string(24) - logging.info("Trade request: " + name) - - elif packet.is_type(SMSG_TRADE_RESPONSE): - print "SMSG_TRADE_RESPONSE" - response = packet.read_int8() - time.sleep(0.2) - if response == 0: - logging.info("Trade response: Too far away.") - if trader_state.item: - mapserv.sendall(whisper(trader_state.item.player, "You are too far away.")) - elif trader_state.money: - mapserv.sendall(whisper(trader_state.money, "You are too far away.")) - trader_state.reset() - - elif response == 3: - logging.info("Trade response: Trade accepted.") - if trader_state.item: - if trader_state.item.get == 1: # add - mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) - elif trader_state.item.get == 0: # buy - if player_node.find_inventory_index(trader_state.item.id) != -10: - mapserv.sendall(trade_add_item(player_node.find_inventory_index(trader_state.item.id), trader_state.item.amount)) - mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) - if trader_state.item.price == 0: # getback - mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) - trader_state.complete = 1 - - elif trader_state.money: # money - amount = int(user_tree.get_user(trader_state.money).get('money')) - mapserv.sendall(trade_add_item(0-inventory_offset, amount)) - mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) - mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) - trader_state.complete = 1 - - elif response == 4: - logging.info("Trade response: Trade cancelled") - trader_state.reset() - - elif packet.is_type(SMSG_TRADE_ITEM_ADD): - print "SMSG_TRADE_ITEM_ADD" - amount = packet.read_int32() - item_id = packet.read_int16() - if trader_state.item and trader_state.money == 0: - if trader_state.item.get == 1: # add - if amount == trader_state.item.amount and item_id == trader_state.item.id: - trader_state.complete = 1 - mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) - else: - mapserv.sendall(whisper(trader_state.item.player, "Thats not the right item.")) - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - - elif trader_state.item.get == 0: # buy - if amount == trader_state.item.price * trader_state.item.amount and item_id == 0: - mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) - trader_state.complete = 1 - elif item_id == 0 and amount != trader_state.item.price * trader_state.item.amount: - trader_state.complete = 0 - else: - if item_id == 0: - mapserv.sendall(whisper(trader_state.item.player, "Please verify you have the correct amount of money and try again.")) - else: - mapserv.sendall(whisper(trader_state.item.player, "Don't give me your itenz.")) - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - - elif trader_state.money: # money - mapserv.sendall(whisper(trader_state.money, "Don't give me your itenz.")) - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - - logging.info("Trade item add: ItemId:%s Amount:%s", item_id, amount) - # Note item_id = 0 is money - - elif packet.is_type(SMSG_TRADE_ITEM_ADD_RESPONSE): - print "SMSG_TRADE_ITEM_ADD_RESPONSE" - index = packet.read_int16() - inventory_offset - amount = packet.read_int16() - response = packet.read_int8() - - if response == 0: - logging.info("Trade item add response: Successfully added item.") - if trader_state.item: - if trader_state.item.get == 0 and index != 0-inventory_offset: # Make sure the correct item is given! + elif packet.is_type(SMSG_TRADE_REQUEST): + print "SMSG_TRADE_REQUEST" + name = packet.read_string(24) + logging.info("Trade request: " + name) + + elif packet.is_type(SMSG_TRADE_RESPONSE): + print "SMSG_TRADE_RESPONSE" + response = packet.read_int8() + time.sleep(0.2) + if response == 0: + logging.info("Trade response: Too far away.") + if trader_state.item: + mapserv.sendall(whisper(trader_state.item.player, "You are too far away.")) + elif trader_state.money: + mapserv.sendall(whisper(trader_state.money, "You are too far away.")) + trader_state.reset() + + elif response == 3: + logging.info("Trade response: Trade accepted.") + if trader_state.item: + if trader_state.item.get == 1: # add + mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) + elif trader_state.item.get == 0: # buy + if player_node.find_inventory_index(trader_state.item.id) != -10: + mapserv.sendall(trade_add_item(player_node.find_inventory_index(trader_state.item.id), trader_state.item.amount)) + mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) + if trader_state.item.price == 0: # getback + mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) + trader_state.complete = 1 + + elif trader_state.money: # money + amount = int(user_tree.get_user(trader_state.money).get('money')) + mapserv.sendall(trade_add_item(0-inventory_offset, amount)) + mapserv.sendall(str(PacketOut(CMSG_TRADE_ADD_COMPLETE))) + mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) + trader_state.complete = 1 + + elif response == 4: + logging.info("Trade response: Trade cancelled") + trader_state.reset() + + elif packet.is_type(SMSG_TRADE_ITEM_ADD): + print "SMSG_TRADE_ITEM_ADD" + amount = packet.read_int32() + item_id = packet.read_int16() + if trader_state.item and trader_state.money == 0: + if trader_state.item.get == 1: # add + if amount == trader_state.item.amount and item_id == trader_state.item.id: + trader_state.complete = 1 + mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) + else: + mapserv.sendall(whisper(trader_state.item.player, "Thats not the right item.")) + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + + elif trader_state.item.get == 0: # buy + if amount == trader_state.item.price * trader_state.item.amount and item_id == 0: + mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) + trader_state.complete = 1 + elif item_id == 0 and amount != trader_state.item.price * trader_state.item.amount: + trader_state.complete = 0 + else: + if item_id == 0: + mapserv.sendall(whisper(trader_state.item.player, "Please verify you have the correct amount of money and try again.")) + else: + mapserv.sendall(whisper(trader_state.item.player, "Don't give me your itenz.")) + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + + elif trader_state.money: # money + mapserv.sendall(whisper(trader_state.money, "Don't give me your itenz.")) + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + + logging.info("Trade item add: ItemId:%s Amount:%s", item_id, amount) + # Note item_id = 0 is money + + elif packet.is_type(SMSG_TRADE_ITEM_ADD_RESPONSE): + print "SMSG_TRADE_ITEM_ADD_RESPONSE" + index = packet.read_int16() - inventory_offset + amount = packet.read_int16() + response = packet.read_int8() + + if response == 0: + logging.info("Trade item add response: Successfully added item.") + if trader_state.item: + if trader_state.item.get == 0 and index != 0-inventory_offset: # Make sure the correct item is given! if player_node.inventory[index].itemId != trader_state.item.id and \ amount != trader_state.item.amount: mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - # If Trade item add successful - Remove the item from the inventory state. - if index != 0-inventory_offset: # If it's not money - print "Remove item: %s, Amount: %s" % (ItemDB.getItem(player_node.inventory[index].itemId).name, amount) - logging.info("Remove item: %s, Amount: %s", ItemDB.getItem(player_node.inventory[index].itemId).name, str(amount)) - if index in player_node.inventory: - player_node.inventory[index].amount -= amount - if player_node.inventory[index].amount == 0: - del player_node.inventory[index] - - elif response == 1: - logging.info("Trade item add response: Failed - player overweight.") - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - if trader_state.item: - mapserv.sendall(whisper(trader_state.item.player, "You are carrying too much weight. Unload and try again.")) - elif response == 2: - if trader_state.item: - mapserv.sendall(whisper(trader_state.item.player, "You have no free slots.")) - logging.info("Trade item add response: Failed - No free slots.") - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - - elif packet.is_type(SMSG_TRADE_OK): - print "SMSG_TRADE_OK" - is_ok = packet.read_int8() # 0 is ok from self, and 1 is ok from other - if is_ok == 0: - logging.info("Trade OK: Self.") - else: - if trader_state.complete: - mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) - else: - mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) - mapserv.sendall(whisper(trader_state.item.player, "Trade Cancelled: Please check the traded items or money.")) - - logging.info("Trade Ok: Partner.") - - elif packet.is_type(SMSG_TRADE_CANCEL): - trader_state.reset() - logging.info("Trade Cancel.") - print "SMSG_TRADE_CANCEL" - - elif packet.is_type(SMSG_TRADE_COMPLETE): - # The sale_tree is only ammended after a complete trade packet. - if trader_state.item and trader_state.money == 0: - if trader_state.item.get == 1: # !add - sale_tree.add_item(trader_state.item.player, trader_state.item.id, trader_state.item.amount, trader_state.item.price) - user_tree.get_user(trader_state.item.player).set('used_stalls', \ + # If Trade item add successful - Remove the item from the inventory state. + if index != 0-inventory_offset: # If it's not money + print "Remove item: %s, Amount: %s" % (ItemDB.getItem(player_node.inventory[index].itemId).name, amount) + logging.info("Remove item: %s, Amount: %s", ItemDB.getItem(player_node.inventory[index].itemId).name, str(amount)) + if index in player_node.inventory: + player_node.inventory[index].amount -= amount + if player_node.inventory[index].amount == 0: + del player_node.inventory[index] + + elif response == 1: + logging.info("Trade item add response: Failed - player overweight.") + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + if trader_state.item: + mapserv.sendall(whisper(trader_state.item.player, "You are carrying too much weight. Unload and try again.")) + elif response == 2: + if trader_state.item: + mapserv.sendall(whisper(trader_state.item.player, "You have no free slots.")) + logging.info("Trade item add response: Failed - No free slots.") + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + + elif packet.is_type(SMSG_TRADE_OK): + print "SMSG_TRADE_OK" + is_ok = packet.read_int8() # 0 is ok from self, and 1 is ok from other + if is_ok == 0: + logging.info("Trade OK: Self.") + else: + if trader_state.complete: + mapserv.sendall(str(PacketOut(CMSG_TRADE_OK))) + else: + mapserv.sendall(str(PacketOut(CMSG_TRADE_CANCEL_REQUEST))) + mapserv.sendall(whisper(trader_state.item.player, "Trade Cancelled: Please check the traded items or money.")) + + logging.info("Trade Ok: Partner.") + + elif packet.is_type(SMSG_TRADE_CANCEL): + trader_state.reset() + logging.info("Trade Cancel.") + print "SMSG_TRADE_CANCEL" + + elif packet.is_type(SMSG_TRADE_COMPLETE): + # The sale_tree is only ammended after a complete trade packet. + if trader_state.item and trader_state.money == 0: + if trader_state.item.get == 1: # !add + sale_tree.add_item(trader_state.item.player, trader_state.item.id, trader_state.item.amount, trader_state.item.price) + user_tree.get_user(trader_state.item.player).set('used_stalls', \ str(int(user_tree.get_user(trader_state.item.player).get('used_stalls')) + 1)) - elif trader_state.item.get == 0: # !buy \ !getback - seller = sale_tree.get_uid(trader_state.item.uid).get('name') - item = sale_tree.get_uid(trader_state.item.uid) - current_amount = int(item.get("amount")) - sale_tree.get_uid(trader_state.item.uid).set("amount", str(current_amount - trader_state.item.amount)) - if int(item.get("amount")) == 0: - user_tree.get_user(sale_tree.get_uid(trader_state.item.uid).get('name')).set('used_stalls', \ + elif trader_state.item.get == 0: # !buy \ !getback + seller = sale_tree.get_uid(trader_state.item.uid).get('name') + item = sale_tree.get_uid(trader_state.item.uid) + current_amount = int(item.get("amount")) + sale_tree.get_uid(trader_state.item.uid).set("amount", str(current_amount - trader_state.item.amount)) + if int(item.get("amount")) == 0: + user_tree.get_user(sale_tree.get_uid(trader_state.item.uid).get('name')).set('used_stalls', \ str(int(user_tree.get_user(sale_tree.get_uid(trader_state.item.uid).get('name')).get('used_stalls'))-1)) - sale_tree.remove_item_uid(trader_state.item.uid) + sale_tree.remove_item_uid(trader_state.item.uid) - current_money = int(user_tree.get_user(seller).get("money")) - user_tree.get_user(seller).set("money", str(current_money + trader_state.item.price * trader_state.item.amount)) + current_money = int(user_tree.get_user(seller).get("money")) + user_tree.get_user(seller).set("money", str(current_money + trader_state.item.price * trader_state.item.amount)) - if trader_state.item.price * trader_state.item.amount != 0: - ItemLog.add_item(int(item.get('itemId')), trader_state.item.amount, trader_state.item.price * trader_state.item.amount) + if trader_state.item.price * trader_state.item.amount != 0: + ItemLog.add_item(int(item.get('itemId')), trader_state.item.amount, trader_state.item.price * trader_state.item.amount) - elif trader_state.money and trader_state.item == 0: # !money - user_tree.get_user(trader_state.money).set('money', str(0)) + elif trader_state.money and trader_state.item == 0: # !money + user_tree.get_user(trader_state.money).set('money', str(0)) - sale_tree.save() - user_tree.save() - trader_state.reset() - logging.info("Trade Complete.") - print "SMSG_TRADE_COMPLETE" + sale_tree.save() + user_tree.save() + trader_state.reset() + logging.info("Trade Complete.") + print "SMSG_TRADE_COMPLETE" else: - pass - #print "Unhandled Packet: %s" % hex(packet.get_type()) + pass + #print "Unhandled Packet: %s" % hex(packet.get_type()) # On Disconnect/Exit shop_broadcaster.stop() |