[INACTIVE][ECON] DynamicMarket v.0.4.8.1 - Versatile Shop Plugin [440-480+?]

Discussion in 'Inactive/Unsupported Plugins' started by HaloInverse, Feb 2, 2011.

  1. Offline

    HaloInverse

    DynamicMarket - Dynamic Global Shop Plugin

    Version: 0.4.8
    Built against: Bukkit 0.0.1 build #412
    Works with: CraftBukkit 0.0.1 builds #440-480 or thereabouts.

    Requires:
    • Permissions 2.5
      • Very recommended, but now optional! See "DynamicMarket.settings" below.
    • iConomy 4.1
    • Either of:
      • SQLite (easiest to set up, reccomended)
      • MySQL (more troublesome, more powerful)
    Buy items, sell items, admins set prices, et cetera. However, there's a lot going on under the hood...

    READ THIS BEFORE PROCEEDING.
    Seriously. (open)

    This plugin has a great deal of flexibility, but the price of more flexibility is more command options to control that flexibility. Computers just aren't very psychic.

    While in-game help exists for commands, the output from /shop help (<topic>) is intended to be a quick reference, not exhaustive documentation. Full instructions simply won't fit on the MineCraft client's tiny text display.

    You should read and understand the following sections before installing this plugin and setting up your shop. If not, you should at least read and understand the following sections while you are setting up your shop items.


    The big feature: Dynamic pricing. Items can be set to increase in price as they are purchased from the shop, and decrease in price as they are sold back, simulating open market conditions. The initial prices of items are just considered a starting point - user transactions will eventually adjust an item's price to a near-ideal level, based on actual value vs. rarity.

    However, as of 0.4.5, the configuration fields are now flexible enough to allow a range of behaviours, from fixed pricing with no stock limits, to fully-dynamic pricing with finite stock levels.

    This is by no means "complete" in the sense of "finished adding features", but it is complete enough to be functional and usable.

    Current Features (open)

    New & Current Features:
    • Buying and selling of items:
      • Item prices can be set to dynamically adjust according to supply and demand. This is highly adjustable, including the rate of price increase/decrease per transaction, optional hard overstock/understock limits, price ceilings/floors, etc. Leaving all the extra features turned off makes an item's price fixed and always-in-stock, like a basic "flat rate" shop.
      • Subtypes of items are fully supported.
      • List of items in the shop is broken into pages, accessible by number.
        • Partial-name searching! "/shop list wood" shows everything with "wood" in the name.
      • Item names for buy/sell/info also use partial substring matches.
      • A dynamically-priced item might cost more for 10 items than the cost of 1 item multiplied by 10, due to stock depletion. So, the "/shop <id>" command now takes an optional ":<count>" parameter, so you can get a quote for the actual buy/sell price of larger numbers of items.
    • Administration:
      • Shop items are edited via a "tag" system, so you don't have to re-enter every field for each small change. Plus there's a few utility tags which do other things to an item's record...
      • Item names are now editable, and will persist (independent of items.db) until the item's record is deleted.
        • This also makes items.db a convenience instead of a necessity, since items can be added by ID and then immediately renamed.
      • A "Default" item exists in the shop, which cannot be bought or sold, but serves as the base data for any new items you add to the shop. Any tags not supplied when you add an item will be copied from whatever you put into "Default".
      • Basic sanity-checking on input data has been added. Also, adjusting an item's bundle-size will rescale its price automatically.
      • Items can be set to be purchasable but not sellable, or vice versa. (Set either price to -1 to disable that transaction type for that item.)
        • Tags like "canbuy:n" and "nosell" can now be used.
      • An extended in-game help system. "/shop help" lists available commands and help topics. "/shop help <topic>" gives help on a shop command or other shop-related topic listed in the main help.
      • The list of commands displayed is filtered by the user's current permission level.
      • Shortcuts for all commands (except for database reset).
      • All commands except for "/shop buy" and "/shop sell" can be accessed through the Bukkit console. No need to log in to add or update items!
      • Access to the entire shop is now restrictable by permission.
      • Highly informative error messages, to help reveal why your database exploded. (Which really shouldn't happen, but you never know...)
      • The shop DB can now be exported to a .csv file, edited in your favorite spreadsheet, and re-imported back into the database, making large-scale changes easier.
      • NEW: The revenue/cost of transactions can now be transferred to another account. With the basic plugin, this can be an admin's iConomy account, or a dummy "GovernmentBank" account. (Don't use that name, or some bright spark will register that username and exploit you.) With a wrapper plugin, this can be set to link a shop's funds directly to an owning player's iConomy balance.
      • NEW: Transaction logging to a comma-delimited file, ready to import into a spreadsheet for nefarious financial analysis!

    Market Mechanics (open)

    Quick Market Mechanics Description:
    • Instead of a "buy price" and a "sell price", items now have a "base price" and a "sales tax". The "buy price" is based on the base price (adjusted by stock, if set to do so), and the "sell price" is based on (<buy price> - <sales tax%>). So if the sales tax is set to 25, then an item's selling price will be 75% of its purchase price. (The sales tax is entered as a number from 0 to 100, representing 0% to 100% tax.)
      • Using the old "/shop add <id> <buyprice> <sellprice>" format still works - the plugin just calculates the base price and sales tax, so that the buying and selling prices come out right.
    • Shop items have a "stock level", which is not necessarily a literal count of items in stock. By default, the stock level is considered an offset from baseline, rather than an absolute count.
      • Items with stock near zero are considered to be in "average" supply, and will be priced at their base price.
      • Items with a positive stock are considered "in surplus", and will be priced below their base price.
      • Items with a negative stock are considered "understocked", and will be priced above their base price.
      • This interpretation of stock levels can be made to behave like literal counted stock, by setting an item's StockFloor to zero, which prohibits negative stock.
    • Items have a "volatility", which indicates how quickly the price changes based on changes in stock level. It represents the percent increase in an item's price per item purchased, multiplied by 10000. V=1 (the lowest level) means that 100 items would have to be purchased to raise the price by 1%. V=10000 (the highest level) means that 1 item purchased would raise the price by 100% (doubling the price). (More examples in tags.txt)
      • There is also "inverse volatility", which represents the number of items needed to be bought in order to double the buying price (or halve it, if selling). This is more convenient for some people's mindsets, and is converted into volatility when entered.
    • The "sell price" is actually calculated from the buy price at the current stock level + 1, rather than the current stock level. This is to prevent gaining endless money by buying an item (driving the price up) then immediately selling it back (dropping the price) - if <sales tax> = 0, then buying-then-selling like this produces zero net gain/loss (as it should).
    • The tag presets "fixed", "float", "finite", and "flat" allow you to quickly set up common options. If used with the "Default" item before adding items to your shop, this will allow you to set the overall behaviour of the shop easily. See Tag Reference for further details.

    Commands (open)

    Commands:

    <Angle Brackets> denote parameters.
    (Round Brackets) denote optional sections.
    The brackets themselves are not part of the command; they are just used to describe syntax. Brackets should not be typed.
    If executing shop commands through the Bukkit console, leave off the initial slash.

    /shop - Shows the main help page. Lists commands and shortcuts.
    /shop help - Ditto.
    /shop help <topic> - Shows help on the given command or subject.
    /shop help tag <tagName> - Shows help on the given item tag.
    /shop <id>( :<count>) - Shows current buy/sell information on the given item.
    <id> can be an item name or a type number with an optional subtype:
    <id> = <itemName> | <itemID> | <itemID>,<subtypeID> | Default
    If <count> is used, shows the total price for the given number of items/bundles.
    /shop list (<partname>) (<pageNum>) - Lists a page of items in the shop. Default page = 1.
    If <partname> is used, lists only items with <partname> as part of their name.
    /shop buy <id>( :<quantity>) - Purchases an item. Default quantity is 1 bundle.
    /shop sell <id>( :<quantity>) - Sells an item. Default quantity is 1 bundle.
    /shop add <id>( :<bundleSize>) (<buyPrice> (<sellPrice>)) <tagList> - Adds an item to the shop list.
    <buyPrice> and <sellPrice> are accepted for convenience, and are internally converted to BasePrice and SalesTax.
    Unused tags will have their data copied from the Default item.
    Transactions will be in multiples of <bundleSize>. Default quantity is 1 item per bundle (unless overriden with the Default record)
    /shop info <id> - Shows much more detailed information about an item in the shop, such as stock level, volatility, etc.
    /shop update <id>( :<bundleSize>) (<buyPrice> (<sellPrice>)) <tagList> - Edits an item's shop data record.
    Data is first copied from the old record, then tags are applied in order of entry.
    NEW! <id> can be "all", applying changes to all items in the shop list.
    /shop remove <id>- Removes an item from the shop list.
    /shop reload - Reboots the plugin, reloading the configuration file and items.db.
    /shop reset - Deletes and recreates the shop database from scratch. Asks for an extra confirmation before doing so.
    /shop exportdb - Exports the shop database to a .csv file. The name and location are configured in SimpleMarket.settings. (Default: Plugins/DynamicMarket/shopDB.csv)
    /shop importdb - Imports a .csv file into the shop database. Same file location as used by the exportdb command. Note that the previous contents of the database are NOT cleared out before importing, so you may want to do a "/shop reset" before importing. The file's format MUST match the format of the exported file (except for quote marks, which are stripped out on import).

    Tag Reference
    Tag Usage Examples
    Permissions (open)

    Permissions:

    'dynamicmarket.access' : Grants basic access to the root /shop command.
    'dynamicmarket.buy' : Grants purchase rights.
    'dynamicmarket.sell' : Grants selling rights.
    'dynamicmarket.items.add' : Grants the ability to add new items to the shop.
    'dynamicmarket.items.update' : Grants the ability to edit items in the shop.
    'dynamicmarket.items.remove' : Grants the ability to remove items from the shop.
    'dynamicmarket.admin' : Grants the ability to delete-and-rebuild the shop database, and to reboot the plugin.

    Installation/Setup (open)

    Installation/Setup:
    • If you haven't already done so, install Permissions and iConomy, and ensure they work.
    • Copy DynamicMarket.jar into your Plugins/ folder.
    • NEW: Copy items.db into Plugins/DynamicMarket/ (or whichever directory you specify in DynamicMarket.settings) (DynamicMarket will work with other plugins' items.db files, but not all plugins will handle the extra subtype data in the items.db linked below.)
    • NEW: Copy either the SQLite connector or the MySQL connector into your main MineServer/Bukkit folder.
      • Or, if you have a MySQL server running, edit DynamicMarket.settings to specify the MySQL server, login, and password.
    • Edit plugins/Permissions/config.yml, and give everybody the appropriate permissions.
      • Most users would get 'dynamicmarket.access', 'dynamicmarket.buy', and 'dynamicmarket.sell', unless you want to restrict such commands to registered/VIP users.
      • Mods would probably get 'dynamicmarket.items.*'
      • Admins should get 'dynamicmarket.admin', if they don't already have '*'.
    • (Re)Start your MineCraft server. Errors may be thrown to the console, but the file Plugins/DynamicMarket/DynamicMarket.settings should be created.
    • Edit DynamicMarket.settings. Particularly, the setting "database-type".
      • "database-type=sqlite" : Use the SQLite connector. This is the simpler option. No further database access configuration should be needed.
      • "database-type=mysql" : Use the MySQL connector. You will need to set the options "mysql-user", "mysql-pass", and "mysql-db", as well as having a working MySQL server installation set up already.
    • NEW: Log in to MineCraft as someone with 'simpleMarket.admin' permission, or use the Bukkit console. Use "/shop reload" to load the edited config file.
    • Use /shop add to fill the market with tasty blocks at scandalous prices.
      • You WILL want to use "/shop update default" to set up some sensible default values for the items you will be adding, so you don't have to do so much typing for every item. (Or at least inspect the Default entry, to be sure you agree with it.)
      • If you want to make all of the items in the shop use dynamic pricing, set up the parameters in the Default item FIRST, so you don't have to go back and modify 100+ items to support variable pricing.

    DynamicMarket.settings Reference

    Downloads:
    • DynamicMarket 0.4.8.1 (.jar) (.7z) (iConomy 4.1, Permissions 2.5)
    • DynamicMarket 0.4.8 (.jar) (.7z) (iConomy 3.0, Permissions 2.1)
    • DynamicMarket 0.4.6.1 (.jar) (.7z) (iConomy 2.1 / Cookies+iConomy Wrapper)
    • DynamicMarket Source on GitHub
    • items.db <-- Contains subtypes. Put this in /Plugins/DynamicMarket/.
    • SQLite Connector (reccomended) Put this in your MineCraft server/Bukkit root.
    • MySQL Installation Guide (not so easy, probably not recommended for SQL server beginners)
    • Sample shopDB.csv Many (but not all) items, set up for floating-stock+floating-prices. Edit it if you like, then put this in your Plugins/DynamicMarket folder and use /shop importdb to load the items into your shop.
    DynamicMarket Wrapper Plugins:
    • DMWrapper: Restricts shop access to specific regions. Outdated.
    Want to integrate DynamicMarket's shop functions into your own plugin? Read this!
    To Do List(s) (open)


    To Do for v.0.5:
    • Logging of transactions. Done.
      • Global messages to alert to price changes.
    • Item classes: Use Permissions to control access to certain types of items, i.e. make safe items (gravel, stone, iron) available to anyone, but limit traffic in dangerous items (TNT, lava buckets, monster spawners) to VIPs. (For example.)
    • Customizable interface/highlight colours. Done.
    • Clean up the d*** out-of-date comments in the code. (Working on it.)
    To Do before 1.0:
    • Optional auto-transactions triggered by price disparities in raw/processed materials.
    • Possible migration of the new help system to a separate plugin, unless the expanded features needed become available in MCDocs or Bukkit.
    • Migrate config file handler to Yaml.
    • Random fluctuations of stock levels (would make the market more lively on a low-population server)
    • Stock levels drift back to rolling averages (smoothes out short-term price spikes, allows for long-term price drifting)

    Recent Changes:

    0.4.8.1:
    • Migrated to Permissions 2.5, iConomy 4.1.
    0.4.8:
    • shopLabel moved from a table name suffix to a table field.
    • Using "all" as the item name now applies the given tags to all items with the current shopLabel.
    • Altering an item's bundleSize now changes its stock level, as well as its basePrice.
      • New stock level is rounded down, to stave off future item duplication issues.
    • Sanity-check behaviour changed to make database queries more efficient and fend off future exploits:
      • stockHighest/stockLowest set to stock if lower/higher than stock.
      • stockCeil/stockFloor is set to stockFloor if lower/higher than stock.
      • priceCeil is raised to priceFloor if priceCeil<priceFloor.
        • Previous behaviours: Swap if order wrong, range-crop stock if outside highest/lowest/floor/ceil.
    • Fixed bug: Adding items without specifying count did not import count from default record.
    0.4.7:
    • Upgraded to iConomy 3.0.
    0.4.6.1:
    • Rolled back iConomy calls to 2.x style, to be compatible with Cookies' iConomy wrapper.
    0.4.6:
    • Support for transaction funds to be backed by an iConomy account.
      • Account link parameters added to wrapper-call messages.
    • Wrapper calls streamlined.
    • Added basic transaction logging.
    0.4.5:
    • Volatility can now go as low as 0.
      • In this way, stock can still be counted without affecting price.
    • CSV import/export now uses +INF / -INF as shorthand for min/max values in applicable fields.
    • Message colours now customizable in DynamicMarket.settings.
    • Expanded help on tags/presets.
    • Changed "fixed" tag, splitting its function with "flat".
    • Added tag presets "flat" and "finite".
    • Updated tag "renorm" to accept an optional new stock level other than 0.
    Full Changelog

    Credits:
    • Nijikokun: SimpleShop v.1.1, on which this was based. (And for Permissions and iConomy, on which this relies.)
    • AtomicAcidBath: Assistance with tracking down a hard-to-see MySQL syntax error.
     
    SoapFlakes and Mahngiel like this.
  2. Offline

    Andreas Brisner

    What version does it say when loading? :p
     
  3. Offline

    Hoddie54

    DynamicMarket] version [0.4.8.7] (Jeanine) enabled
     
  4. Offline

    Andreas Brisner

  5. Offline

    Hoddie54

    2011-03-09 12:43:12 [INFO] [DynamicMarket] version [0.4.8.7] (Jeanine) enabled

    WAIIT.... item.db --- I updated and it worked. TYVM mate.

    Edit: I can only still buy in bundels of 1.
    /shop buy stone 5
    only gives me 1 stone.(it only charges for 1 stone)
     
  6. Offline

    Andreas Brisner

    Well there you go :p
     
  7. Offline

    sauevaem

    [​IMG]

    please help just upgraded iConomy and DM
     
  8. Offline

    Andreas Brisner

    So change the bundlesize?
    [MERGETIME="1299700687"][/MERGETIME]
    DM version?
    iConomy version?
    Bukkit version?
    Mysql? sqlite?
    Windows? Linux? what distro?
     
  9. Offline

    sauevaem

    iConomy 4.4.5 (mysql)
    DM 0.4.8.7 from your post (sqlite)

    git-Bukkit-0.0.0-506-()-b522jnks

    Linux Ubuntu 10.04
     
  10. Offline

    Hoddie54

    I Did but I want the players to be able to choose how much they wish to buy. If I set the Bundlesize to 64 - I can only buy in groups of 64 and not in groups of 1,2,3,4,5.....63,64
     
  11. Offline

    sauevaem

    try
    /shop buy stone:5

    and next time check '/shop help' cmd first
     
  12. Offline

    Andreas Brisner

    @sauevaem Do you have mIRC? Contact me on irc.esper.net (nickname arensirb)
    Much easier to figure this out if I dont have to wait for an answer here every time
    [MERGETIME="1299701626"][/MERGETIME]
    And yes, the correct syntax is <item>:<amount>.... Not <item> <amount>
     
  13. Offline

    lenocinor

    Been using this the last week or so and I've really loved it on my server, Andreas. Thanks again for it.

    After getting to play with this for some time, there's one bugfix and two suggestions I'd like to make, though:

    - Due to partial name matching, if you have one item name that's a substring of another item name (like, say, "diamond" and "diamondOre"), you cannot purchase diamond if diamondOre's block ID comes first (which in this case it does). Maybe you can make it so that if the exact string for something is typed in, it always picks that block, no matter what ID it is? That would make my item naming a lot better (I have about 15 awkward names in the name DB currently to work around this problem).

    - I don't think there's any way to buy subtype items via ID currently, is there? Having to type the full name in each time is pretty annoying. Can you add support for subtype ID buying? Maybe something like "16,3:2" for 2 stacks of light blue wool, for example.

    - Could we get aliases for buy and selling, like /buy and /sell? This is 99 percent of how my users access the shop, and having to type "/shop" all the time beforehand gets old after a while.
     
  14. Offline

    Magik

    I just checked my source against yours, and I do not have this code - I imagine it's something you added yourself....


    The purpose of shopLabel is so you can have multiple shops. Each shop has a label - this functionality isn't fully implemented yet, and for now all shop labels are "" ( hint: it's in the initialize section - that's why he has an initialize() function that returns initialize("") - he's creating the default shop of "" ).

    In the future I imagine he wants to implement multiple shops. And other people ( like I have done myself with DMWrapper ) can use this as needed - if they want a global shop for the nether that is separate from the regular world - this is where this would come into play. Or in the case of my DMWrapper - I could make it so each shop location has a different associated shop. This would enable the same plugin using the same database and table to be able to support having multiple shops that possibly share the same items.


    On another note, I've merged ninjikokun's source into mine - most of his changes were cosmetic ( though they affected almost every single method and file ). But he did slightly change how the accessory plugins were being enabled. That and changing a few things to static members ( which he may have forgot to convert some accesses to static accesses instead of instance accesses ). https://github.com/magik/DynamicMarket/commit/5e1850a266a1686e5cb446c0035bd31eaabf1c33#diff-2


    My latest jar: https://github.com/magik/DynamicMarket/blob/master/target/DynamicMarket.jar?raw=true
     
  15. Offline

    Andreas Brisner

    Actually no, I did not add it.. :p
    That wont work.. Look at onPluginEnabled.. it tries to load iConomy no matter what plugin it is... Thats wrong.
     
  16. Offline

    Magik

    and in regard to that line - it's not in halo's latest source either.... so go figure where you got your source from then..... i'm not trying to argue with you - it definitely looks wrong, and it's definitely not in my source or in halo's latest, AND it's almost definitely the reason people are seeing errors with your code on line 335 or w/e it was mentioned above ( as in the version of your source I have, that line is on 335.... )

    you are a bit vague in your criticisms.... i guess i should be in response?

    it looks fine to me...

    if you are talking about my source, then no it won't try to load iconomy no matter what plugin it is, if you aren't talking about my source, then i have no idea what you are talking about....

    every time a plugin is loaded it checks to see if it was iconomy, and if so then it does it's setup for it....

    anyways, that's straight from ninjikokun's source, I didn't write that myself, like I said, I just merged ninji's branch into mine
     
  17. Offline

    Andreas Brisner

    Code:
    public void onPluginEnabled(PluginEvent event) {
                if (DynamicMarket.iC == null) {
                    Plugin iConomy = plugin.getServer().getPluginManager().getPlugin("iConomy");
    
                    if (iConomy != null) {
                        if (iConomy.isEnabled()) {
                            DynamicMarket.iC = (iConomy) iConomy;
                            plugin.InitializeEconomy();
                        }
                    }
                }
    
                if (DynamicMarket.Permissions == null ) {
                    Plugin Permissions = plugin.getServer().getPluginManager().getPlugin("Permissions");
    
                    if (Permissions != null) {
                        if (Permissions.isEnabled()) {
                            DynamicMarket.Permissions = (Permissions) Permissions;
                            System.out.println(Messaging.bracketize(plugin.name) + " hooked into Permissions.");
                        }
                    }
                }
            }
        }
    Where does it check if its the iConomy plugin actually making the event happen? Nowhere.. So it will actually tro to enable these plugins every time a plugin is loaded, instead of just if plugin that called the event i iConomy.

    So yes, its a bug.

    Here is mine
    Code:
    public class iPluginListener extends ServerListener {
        public iPluginListener() { }
    
        @Override
        public void onPluginEnabled(PluginEvent event) {
            if(event.getPlugin().getDescription().getName().equals("iConomy")) {
                if(DynamicMarket.getiConomy() == null) {
                    Plugin iConomy = DynamicMarket.getTheServer().getPluginManager().getPlugin("iConomy");
    
                    if (iConomy != null) {
                        DynamicMarket.setiConomy((iConomy)iConomy);
                        DynamicMarket.iConomyData();
                    }
                }
            }
    [MERGETIME="1299704195"][/MERGETIME]
    About the code that I have that you dont, its in DatabaseMarket.java
    Code:
        public MarketItem data(ItemClump thisItem, String shopLabel) {
          //CHANGED: Returns MarketItems now.
            SQLHandler myQuery = new SQLHandler(this);
            MarketItem fetchedData = null;
    
            myQuery.inputList.add(thisItem.itemId);
            myQuery.inputList.add(thisItem.subType);
              myQuery.inputList.add(shopLabel);
            myQuery.prepareStatement("SELECT * FROM " + tableName + " WHERE (item = ? AND subtype = ? AND shoplabel = ?) LIMIT 1");
    
            myQuery.executeQuery();
    
            try {
                if (myQuery.rs != null)
                    if (myQuery.rs.next())
                        //data = new ShopItem(myQuery.rs.getInt("item"), myQuery.rs.getInt("type"), myQuery.rs.getInt("buy"), myQuery.rs.getInt("sell"), myQuery.rs.getInt("per"));
                        fetchedData = new MarketItem(myQuery);
                        //TODO some users get errors with shopLabel here.
                        fetchedData.shopLabel = shopLabel;
                        fetchedData.thisDatabase = this;
                        // TODO: Change constructor to take a ResultSet and throw SQLExceptions.
            } catch (SQLException ex) {
                logSevereException("Error retrieving shop item data with " + dbTypeString(), ex);
                fetchedData = null;
            }
     
  18. Offline

    Magik

    it's not a bug no and they do nearly exactly the same thing

    Code:
    Plugin Permissions = plugin.getServer().getPluginManager().getPlugin("Permissions");
    that line will return null if the plugin has not been loaded
    and

    Code:
    if (Permissions.isEnabled()) {
    will fail if the plugin is not yet enabled

    unless for some reason the member method isEnabled() for the Plugin class is somehow deprecated without any notice
    [MERGETIME="1299704376"][/MERGETIME]
    and I still don't see that code in halo's source: https://github.com/HaloInverse/Dyna...haloinverse/DynamicMarket/DatabaseMarket.java
    [MERGETIME="1299704484"][/MERGETIME]
    i'm trying my best not argue with you, but you are making it very difficult with your glaring remarks
     
  19. Offline

    Andreas Brisner

    sorry :-/
    The source you see at Halo's is newer than the source I have. When I got mine Halo hadnt even fixed it for 4.0.
    Yours is after he did that.
     
  20. Offline

    Nijikokun

    You both are fighting over stupid things. Let me break this down for BOTH of you.

    They both do basically the same thing, Mine just checks to see if the plugin exists, and then if it's enabled we return it. If it's not enabled then we keep going until it is. And, no it doesn't try to enable it.

    Another "safenet" since bukkit team doesn't think about things like this apparently is to do the following, in onEnable, check to see if the plugin exists and is enabled as well just as well like I said earlier a safenet.

    @Magik: https://github.com/Nijikokun/DynamicMarket
     
    Beaverbeliever likes this.
  21. Offline

    Andreas Brisner

    UPDATE! 0.4.8.8 - http://brisner.no/DynamicMarket/0.4.8.8/DynamicMarket.jar
    Changes:
    Changed to check if iConomy and Permissions already is loaded upon plugin enable.
    Also changed a method that have given some peoples NPE's before.


    @Magik I changed my method for your method, but then I got this
    The method logSevereException(String, Exception) in the type DatabaseCore is not applicable for the arguments (String)
     
  22. Offline

    Magik

    any more info? like what line is giving that error - what is the call that is failing?

    there are 2 logSevereException methods in DatabaseCore.java, one with a String param, and one with a String, Exception param list

    either should work.... it just tacks the Exception on to the end of the string ( calling it's toString method )
    [MERGETIME="1299706306"][/MERGETIME]
    ?

    yeah, that's where I merged from? ( https://github.com/magik/DynamicMarket/commit/5e1850a266a1686e5cb446c0035bd31eaabf1c33 )
     
  23. Offline

    dslip

    Would it be possible for one of you to change to cmd used from shop to gshop and recompile & post for me?
     
  24. Offline

    Andreas Brisner

  25. Offline

    Firebabe

    Hello, I just downloaded Dynamic Market today and followed the instructions on the first post of this thread for it and I get an error that I'm confused about from it. Can I get help on this please?
    Code:
    16:56:23 [INFO] Starting minecraft server version Beta 1.3
    16:56:23 [INFO] Loading properties
    16:56:23 [INFO] Starting Minecraft server on *:25565
    16:56:23 [WARNING] **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
    16:56:23 [WARNING] The server will make no attempt to authenticate usernames. Be
    ware.
    16:56:23 [WARNING] While this makes the game possible to play without internet a
    ccess, it also opens up the ability for hackers to connect with any username the
    y choose.
    16:56:23 [WARNING] To change this, set "online-mode" to "true" in the server.set
    tings file.
    16:56:23 [INFO] This server is running Craftbukkit version git-Bukkit-0.0.0-506-
    g4e9d448-b522jnks (MC: 1.3)
    16:56:23 [INFO] Preparing level "Hyrule"
    16:56:23 [INFO] Preparing start region
    16:56:24 [INFO] [Permissions] version [2.5.4] (Phoenix) was Initialized.
    16:56:24 [INFO] WorldGuard loaded.
    16:56:24 [INFO] CraftBukkitUpToDate version 2.0.3 is enabled!
    16:56:24 [INFO] [Permissions] version [2.5.4] (Phoenix)  loaded
    16:56:24 [WARNING] CraftBukkitUpToDate: Can't connect to ci.bukkit.org.
    16:56:24 [INFO] [DynamicMarket] Creating database.
    16:56:27 [SEVERE] [DynamicMarket]: Error executing statement [CREATE TABLE Marke
    t ( id INTEGER PRIMARY KEY AUTOINCREMENT, item INT NOT NULL, subtype INT NOT NUL
    L, name TEXT NOT NULL, count INT NOT NULL, baseprice INT NOT NULL, canbuy INT NO
    T NULL, cansell INT NOT NULL, stock INT NOT NULL, volatility INT NOT NULL, sales
    tax INT NOT NULL, stockhighest INT NOT NULL, stocklowest INT NOT NULL, stockfloo
    r INT NOT NULL, stockceil INT NOT NULL, pricefloor INT NOT NULL, priceceil INT N
    OT NULL, jitterperc INT NOT NULL, driftout INT NOT NULL, driftin INT NOT NULL, a
    vgstock INT NOT NULL, class INT NOT NULL, shoplabel TEXT NOT NULL DEFAULT '');CR
    EATE INDEX itemIndex ON Market (item);CREATE INDEX subtypeIndex ON Market (subty
    pe);CREATE INDEX nameIndex ON Market (name);CREATE INDEX shoplabelIndex ON Marke
    t (shoplabel)] with sqlite: java.sql.SQLException: database is locked
    16:56:27 [SEVERE] null loading DynamicMarket v0.4.8.1 (Is it up to date?)
    java.lang.NullPointerException
            at com.gmail.haloinverse.DynamicMarket.MarketItem.<init>(MarketItem.java
    :96)
            at com.gmail.haloinverse.DynamicMarket.DatabaseMarket.createTable(Databa
    seMarket.java:57)
            at com.gmail.haloinverse.DynamicMarket.DatabaseCore.initialize(DatabaseC
    ore.java:34)
            at com.gmail.haloinverse.DynamicMarket.DatabaseCore.initialize(DatabaseC
    ore.java:28)
            at com.gmail.haloinverse.DynamicMarket.DatabaseCore.<init>(DatabaseCore.
    java:23)
            at com.gmail.haloinverse.DynamicMarket.DatabaseMarket.<init>(DatabaseMar
    ket.java:20)
            at com.gmail.haloinverse.DynamicMarket.DynamicMarket.setup(DynamicMarket
    .java:171)
            at com.gmail.haloinverse.DynamicMarket.DynamicMarket.onEnable(DynamicMar
    ket.java:105)
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:118)
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:451)
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:217)
            at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:83)
            at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:61)
            at net.minecraft.server.MinecraftServer.e(MinecraftServer.java:204)
            at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:191)
            at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:131)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:246)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:366)
    16:56:27 [INFO] ÂșeLoaded Essentials build 2.0.285 maintained by Zenexer, emental
    o, Aelux, Brettflan, KimKandor, snowleo and ceulemans.
    16:56:27 [INFO] Loaded EssentialsBan build 2.0.272 by Zenexer, ementalo, Eris, a
    nd EggRoll
    16:56:27 [INFO] Loaded EssentialsChat build 2.0.285 by Zenexer, ementalo, Aelux,
     Brettflan, KimKandor, snowleo and ceulemans.
    16:56:27 [INFO] Loaded EssentialsEco build 2.0.278 by Zenexer, ementalo, Aelux,
    Brettflan, KimKandor, snowleo and ceulemans
    16:56:27 [INFO] Loaded EssentialsGod build 2.0.272 by Zenexer, ementalo, Eris, a
    nd EggRoll
    16:56:27 [INFO] Loaded EssentialsHelp build 2.0.272 by Zenexer, ementalo, Eris,
    and EggRoll
    16:56:27 [INFO] Loaded EssentialsHome build 2.0.272 by Zenexer, ementalo, Aelux,
     Brettflan, KimKandor, and snowleo
    16:56:27 [INFO] EssentialsServerlist version 2.0.285 by Vimae Development enable
    d.
    16:56:27 [INFO] Loaded EssentialsSpawn build 2.0.285 maintained by Zenexer, emen
    talo, Aelux, Brettflan, KimKandor, snowleo and ceulemans.
    16:56:27 [INFO] Loaded EssentialsTele build 2.0.272 by Zenexer, ementalo, Aelux,
     Brettflan, KimKandor, and snowleo
    16:56:27 [INFO] Loaded EssentialsWarp build 2.0.272 by Zenexer, ementalo, Aelux,
     Brettflan, KimKandor, and snowleo
    16:56:28 [INFO] [iConomy] Logging enabled.
    16:56:28 [INFO] [iConomy] v4.4 (Arcadia) loaded.
    16:56:28 [INFO] [iConomy] Developed by: [Nijikokun, Coelho]
    16:56:28 [INFO] [iConomy] Successfully linked with Permissions.
    16:56:28 [INFO] Minecart Mania Core version 1.02d is enabled!
    16:56:28 [INFO] WorldEdit 4.0-beta8 enabled.
    16:56:28 [INFO] WorldEdit: Permissions plugin detected! Using Permissions plugin
     for permissions.
    16:56:28 [INFO] WorldGuard: Permissions plugin detected! Using Permissions plugi
    n for permissions.
    16:56:28 [INFO] WorldGuard: Single session is enforced.
    16:56:28 [INFO] WorldGuard: TNT ignition is PERMITTED.
    16:56:28 [INFO] WorldGuard: Lighters are PERMITTED.
    16:56:28 [INFO] WorldGuard: Lava fire is PERMITTED.
    16:56:28 [INFO] WorldGuard: Fire spread is UNRESTRICTED.
    16:56:28 [INFO] WorldGuard 4.0-alpha1 enabled.
    16:56:28 [INFO] Done (0.507s)! For help, type "help" or "?"
    16:56:34 [INFO] CButD: Plugin-Update-Check started
    16:56:35 [INFO] No source for DynamicMarket.jar ask the Author to give me one
    16:56:44 [INFO] No source for iConomy.jar ask the Author to give me one
    16:56:46 [INFO] No source for WorldEdit.jar ask the Author to give me one
    16:56:46 [INFO] No source for WorldGuard.jar ask the Author to give me one
    16:56:46 [INFO] CButD: Plugin-Update-Check finished
    >
     
  26. Offline

    Andreas Brisner

  27. Offline

    Tarkington

    I'm STILL getting this error whenever I try to buy or sell.

    DM: 0.4.8.8
    CB: 493
    iC: 4.4.5
    Permissions: 2.5

    Running on Ubuntu Server 9.10 x64

    Code:
    17:16:23 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'shop' in plugin DynamicMarket v0.4.8.8
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:33)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:80)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:183)
            at net.minecraft.server.NetServerHandler.c(NetServerHandler.java:619)
            at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:582)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:576)
            at net.minecraft.server.Packet3Chat.a(SourceFile:24)
            at net.minecraft.server.NetworkManager.a(SourceFile:230)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:75)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:100)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:357)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:272)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:366)
    Caused by: java.lang.NullPointerException
            at com.gmail.haloinverse.DynamicMarket.iListen.delta_balance(iListen.java:481)
            at com.gmail.haloinverse.DynamicMarket.iListen.shopBuyItem(iListen.java:620)
            at com.gmail.haloinverse.DynamicMarket.iListen.parseCommand(iListen.java:990)
            at com.gmail.haloinverse.DynamicMarket.DynamicMarket.onCommand(DynamicMarket.java:157)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:31)
            ... 12 more
    
     
  28. Offline

    Firebabe

    Tarkington likes this.
  29. Offline

    oxide7

    Yeah, that's correct, /shop list does nothing, just the same error as every other command.

    This happens with both my setup and your dist.
    I'm starting to think setting up mysql might be better. Dunno what's involved but it couldn't hurt.
    [MERGETIME="1299712509"][/MERGETIME]
    The top one worked for me, i can actually do /shop list, gonna play with it some more real quick.
     
  30. Offline

    Eckhart

    Hooray for 0.4.8.8! The first seemingly-100% working version I've ever used of this thing!

    Things are looking up for dynamicmarket.
     
  31. Offline

    Beaverbeliever

    They have been simply making updates the past few days that are not official to the original developer. They work fine, and are what people have been using. Sorry if this is too vague for you, it's just the fix.
     

Share This Page