Mysidia Adoptables Support Forum

Mysidia Adoptables Support Forum (http://www.mysidiaadoptables.com/forum/index.php)
-   Mys v1.3.x Mods (http://www.mysidiaadoptables.com/forum/forumdisplay.php?f=42)
-   -   Mys v1.3.4 Alchemy Mod (http://www.mysidiaadoptables.com/forum/showthread.php?t=4368)

Hall of Famer 01-29-2014 11:21 AM

Alchemy Mod
 
1 Attachment(s)
Well I've had the idea of working on an alchemy system since the initial Mys v1.3.0 release, but did not carry out for numerous reasons. Now I finally decided to give it a try and it took me only about 4-5 hours.

The idea of Alchemy is to mix two old items(called ingredients) to create a new item, which is normally rarer and more valuable(otherwise it does not justify the economics lol). The Alchemy Mod allows you to achieve just that, you can create some items that are rare or even impossible to obtain without performing alchemy. This will make your site considerably more interesting to a good number of your users, it also offers incentives for the act of item collection.

Below is a screenshot of the basic alchemy page, which allows you to choose two items to produce a new one. Note at this time being only two items can be used to produce a new item, there is no way to mix more than two:
http://oi57.tinypic.com/2lxckkg.jpg

This mod also comes with ACP integration, in which the admins can create alchemy practices that allow users to create new items from the old ones. Admins can also manipulate the settings for Alchemy System on their sites. The entire system can be turned on/off at will, while admins can specify whether alchemy success chance is 100% always or less. Other settings such as cost of action, recipe/license requirement for performing alchemy are also configurable.

To install the mod, simply run the installer script located at yoursite.com/install/alchemy.php. If your site is in a subdirectory, just change the example url accordingly. I assume you all know what I mean by this so I wont explain further.

If you have a brand new site or have never ever modified any part of the script, you may simply download the .rar file I provided and uploading them to your server through ftp. If the only changes you made are the mods I've offered lately(gender ratio and item drop), you may give a try just uploading the files as well as good chance my mods are compatible with each other.

However, for advanced users who have heavily modified sites, you will need to make some changes manually. I will post a brief description on how to do that in the next post.

At last, I hope you enjoy the new mod I've made for Mys v1.3.4, unlike the old ones like gender ratio which were simply revised to be compatible with the new version. You can edit the alchemy system to as you wish, maybe altering its user interface or adding more functionality(such as multiple item mix rather than just two), its all up to you.

Hall of Famer

Hall of Famer 01-29-2014 11:36 AM

For advanced users who have heavily modified sites, you may follow the procedure below to install this mod on your site. Ignore this post if your site works fine with simply uploading/overwriting files.

First of all, upload and run the installer script at yoursite.com/install/alchemy.php. This step is identical for all users, unless you wish to create tables/insert rows into database manually, but will be a pain with this mod.

Second, upload the following new files to your server. Most of these files do not exist in the base script so you wont run into file overwriting problems. The new files are:
/admincp/alchemy.php
/admincp/view/alchemyview.php
/classes/class_alchemy.php
/classes/class_alchemysetting.php
/classes/class_alchemyvalidator.php
/lang/admincp/lang_alchemy.php

You may do the same for the lang file: lang_inventory.php since I assume nobody has ever modified it. If the answer is opposite however, you may wish to search through the differences of the two lang files to see how to append new lang vars to your site. It shouldnt be difficult.

Alright then, in the next step you will need to modify some old script files. I hope you are ready. Now go to file /classes/class_adminsidebar.php and find these line:

PHP Code:

        $components->add(new Division(new Comment("Inventory"FALSE)));
        
$inventory = new Division;
        
$inventory->add(new Link("admincp/inventory/add""Give Item to User"));
        
$inventory->add(new Link("admincp/inventory/edit""Edit User Inventory"));
        
$inventory->add(new Link("admincp/inventory/delete""Delete Users items"));
        
$components->add($inventory); 

Add below:

PHP Code:

        $components->add(new Division(new Comment("Alchemy"FALSE)));
        
$alchemy = new Division;
        
$alchemy->add(new Link("admincp/alchemy/add""Create new Alchemy Practice"));
        
$alchemy->add(new Link("admincp/alchemy/edit""Edit Alchemy Practices"));
        
$alchemy->add(new Link("admincp/alchemy/delete""Remove Alchemy Practices"));
        
$alchemy->add(new Link("admincp/alchemy/settings""Change Alchemy Settings"));        
        
$components->add($alchemy); 

Next, go to file /classes/class_itemtablehelper.php and find the constructor:
PHP Code:

    public function __construct(){
        
parent::__construct();      
    } 

insert these two methods right below the constructor definition:
PHP Code:

    /**
     * The getItem method, fetches the item type.
     * @param int  $item
     * @access public
     * @return String
     */    
    
public function getItem($item){
        if(empty(
$item)) return "N/A";
        else return 
$item;        
    }
    
    
/**
     * The getItemImage method, fetches the item image.
     * @param id  $item
     * @access public
     * @return Image
     */
    
public function getItemImage($item){    
        
$item = new Item($item);
        
$image = new Image($item->imageurl$item->itemname);
        return 
$image;            
    } 

Then go to script file /inventory.php and find the method toss() at:

PHP Code:

    public function toss(){
        
$mysidia Registry::get("mysidia");
        
$item = new PrivateItem($mysidia->input->post("itemname"), $mysidia->user->username);  
        if(
$item->iid == 0) throw new ItemException("toss_none");
        
        if(
$mysidia->input->get("confirm")){
            
$item->toss();
            return;
        }        
    } 

Add a new method alchemy() right below it:

PHP Code:

    
    
public function alchemy(){
        
$mysidia Registry::get("mysidia");
        
$settings = new AlchemySetting($mysidia->db);
        if(
$settings->system == "disabled") throw new ItemException("alchemy_disabled");
        
        if(
$mysidia->input->post("iid") and $mysidia->input->post("iid2")){
            
$alchemy = new Alchemy($mysidia->input->post("iid"), $mysidia->input->post("iid2"), $settings);
            
$alchemy->mix();
            
$this->setField("alchemy"$alchemy);
            return;
        }
        
        
$stmt $mysidia->db->select("inventory", array("iid""itemname"), "owner = '{$mysidia->user->username}'");
        
$map $mysidia->db->fetchMap($stmt);
        
$this->setField("itemMap"$map);
        
$this->setField("settings"$settings);
    } 

Now open the file /view/inventoryview.php and find these lines:

PHP Code:

        $mysidia Registry::get("mysidia");
        
$document $this->document;
        
$document->setTitle($mysidia->lang->inventory); 

Add the three new lines below:

PHP Code:

        $document->addLangvar("You may manage these items as you like, or go to the alchemy page to make your own items: <br>");    
        
$document->add(new Link("inventory/alchemy""Use the Alchemy Service Now!"));    
        
$document->add(new Comment("<br><br>")); 

Next, find the toss() method at:
PHP Code:

    
    
public function toss(){
        
$mysidia Registry::get("mysidia");
        
$document $this->document;
        if(
$mysidia->input->get("confirm")){
            
$document->setTitle($this->lang->global_action_complete);
            
$document->addLangvar("{$this->lang->toss}{$mysidia->input->post("itemname")}{$this->lang->toss2}");
            return;
        }
    
        
$document->setTitle($this->lang->toss_confirm);
        
$document->addLangvar($this->lang->toss_warning);    

        
$confirmForm = new FormBuilder("confirmform""toss/confirm""post");
        
$confirmForm->buildPasswordField("hidden""action""toss")
                    ->
buildPasswordField("hidden""itemname"$mysidia->input->post("itemname"))
                    ->
buildButton("Please Toss""confirm""confirm");
        
$document->add($confirmForm);            
    } 

Append the alchemy() method right below it:

PHP Code:

    public function alchemy(){
        
$mysidia Registry::get("mysidia");
        
$document $this->document;
        
        if(
$mysidia->input->post("iid") and $mysidia->input->post("iid2")){
            
$alchemy $this->getField("alchemy");
            
$newitem $alchemy->getNewItem()->itemname;
            
$document->setTitle($this->lang->alchemy_success);
            
$document->addLangvar($this->lang->alchemy_newitem.$newitem.$this->lang->alchemy_newitem2);    
            return;        
        }

        
$document->setTitle($this->lang->alchemy_title);
        
$document->addLangvar($this->lang->alchemy);
        
$itemMap $this->getField("itemMap");
        
$settings $this->getField("settings");
        
$alchemyFrom = new Form("alchemyform""alchemy""post");
        
$alchemyFrom->add(new Comment("<b>Cost of performing Alchemy: {$settings->cost} {$mysidia->settings->cost}</b><br>"));
        
        
$alchemyFrom->add(new Comment($mysidia->lang->alchemy_choose));        
        
$items = new DropdownList("iid");
        
$items->add(new Option("None Selected""none"));
        if(
$itemMap->size() > 0){
            
$iterator $itemMap->iterator();
            while(
$iterator->hasNext()){
                
$item $iterator->nextEntry();
                
$items->add(new Option($item->getValue(), $item->getKey()));
            }
        }        
        
$alchemyFrom->add($items);

        
$alchemyFrom->add(new Comment($mysidia->lang->alchemy_choose2));        
        
$items2 = new DropdownList("iid2");
        
$items2->add(new Option("None Selected""none"));
        if(
$itemMap->size() > 0){
            
$iterator $itemMap->iterator();
            while(
$iterator->hasNext()){
                
$item2 $iterator->nextEntry();
                
$items2->add(new Option($item2->getValue(), $item2->getKey()));
            }
        }        
        
$alchemyFrom->add($items2);        
        
$alchemyFrom->add(new Button("Let's mix the items now!""submit""submit"));
        
$document->add($alchemyFrom);        
    } 

At last, open the file /functions/functions_items.php and add a new function to the bottom of the script(right above the php closing tag). It does not really do anything other than preventing some kind of bugs/error messages from possibly emerging:

PHP Code:

function items_recipe($item$adopt){
  
$note "The item {$item->itemname} is a recipe item, which cannot be used on any adoptable and can only be useful if you are performing alchemy.";
  return 
$note;


You are done with the modifications now, it was easier than you thought right? Anyway you may run into some problems, and in this case please post in this thread to let me know. I will find out where the errors are and fix them for you as soon as I get a chance.

LucasA33 02-02-2014 11:30 PM

Simply amazing HOF =)
Thanks, might do something like this for evolution stones or something

Abronsyth 02-04-2014 04:15 PM

I don't suppose it'd be possible to also share a .zip file? I can't work with .rar files :(

Hall of Famer 02-04-2014 04:17 PM

1 Attachment(s)
Sure I can, although an .rar file is not that hard to work with if you download winrar.

Kesstryl 02-04-2014 10:12 PM

O.O I love it!

Hall of Famer 02-05-2014 05:14 AM

Oh thanks. ^^ I hope this will be a valuable tiny little addition to your site.

Ruinily 02-05-2014 10:03 AM

Yeh that is an awesome idea, I wanted something like that on mine ages ago, but I think my coders on hiatus and my photoshops been refusing to work, and I've been busy so I havent had much time for it. ^_^' I know I was playing with the idea of using a system like this to create potions, or make jewellery and trinkets, ect. Is there any chance of this being compatible with older versions of Mysidia? >.>'

Hall of Famer 02-06-2014 02:53 AM

What version of Mysidia Adoptables are you using? It shouldnt be difficult to get it to work with Mys v1.3.3, but not sure for even older versions.

Ruinily 02-07-2014 12:01 AM

Lol I'm sticking with 1.3.2... unless I go insane and try to upgrade. XD I was alright until I lost contact with my coder... I'm just praying nothing breaks now. >.>' And its okay if its too hard or difficult, I'll just have to either figure out something else, or just not do it. ^_^'

EDIT: My coders still around! :D She's just busy working on her own site, she said she'll take a quick look at this sometime. ^_^


All times are GMT -5. The time now is 12:25 PM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.