Held Items & Pet Companions

Forum
Last Post
Threads / Messages
Try this:
PHP:
<?php 

use Resource\Native\String; 

class PrivateItem extends Item{ 
  // The PrivateItem class, which defines functionalities for items that belong to specific users 

  public $iid; 
  public $owner; 
  public $quantity; 
  public $status; 
   
  public function __construct($iteminfo, $itemowner = ""){      
      // the item is an owned item in user inventory, so retrieve database info to assign properties 
      $mysidia = Registry::get("mysidia"); 
       
      $fetchmode = (is_numeric($iteminfo))?"iid":"itemname"; 
      $whereclause = ($fetchmode == "iid")?"{$fetchmode} = '{$iteminfo}'":"{$fetchmode} ='{$iteminfo}' and owner = '{$itemowner}'";           
      $row = $mysidia->db->select("inventory", array(), $whereclause)->fetchObject(); 
      if(is_object($row)){ 
         // loop through the anonymous object created to assign properties 
         foreach($row as $key => $val){ 
            $this->$key = $val; 
         } 
         parent::__construct($this->itemname); 
      } 
      else $this->iid = 0;       
  } 
  
  public function getitem(){ 
      // This method checks if the item exists in inventory or not, not to be confused with parent class' getitem() class. 
      $mysidia = Registry::get("mysidia"); 
      $stmt = $mysidia->db->select("inventory", array(), "itemname ='{$this->itemname}' and owner ='{$this->owner}'");  
      return $stmt->fetchObject(); 
  } 
  
  public function getvalue($quantity = 0, $discount = 0.5){ 
      // This method returns the cost of items. 
       
      $value = $this->price*$quantity*$discount; 
      return $value; 
  } 
   
  public function apply($adopt = "", $user = ""){ 
      // This method uses  
      $mysidia = Registry::get("mysidia"); 
      require_once("functions/functions_items.php"); 
       
      if(is_numeric($adopt)) $owned_adoptable = $mysidia->db->select("owned_adoptables", array(), "aid ='{$adopt}'")->fetchObject(); 
      if(!empty($user)) $theuser = $mysidia->db->select("users", array(), "username ='{$user}'")->fetchObject(); 
       
      // Now we decide which function to call... 
      switch($this->function){ 
         case "Valuable":  
            $message = items_valuable($this, $owned_adoptable); 
            break; 
         case "Level1": 
            $message = items_level1($this, $owned_adoptable); 
            break; 
         case "Level2": 
            $message = items_level2($this, $owned_adoptable); 
            break; 
         case "Level3": 
            $message = items_level3($this, $owned_adoptable); 
            break; 
         case "Click1": 
            $message = items_click1($this, $owned_adoptable); 
            break; 
         case "Click2": 
            $message = items_click2($this, $owned_adoptable); 
            break; 
         case "Breed1": 
            $message = items_breed1($this, $owned_adoptable); 
            break; 
         case "Breed2": 
            $message = items_breed2($this, $owned_adoptable); 
            break; 
         case "Alts1": 
            $message = items_alts1($this, $owned_adoptable); 
            break; 
         case "Alts2": 
            $message = items_alts2($this, $owned_adoptable); 
            break; 
         case "Name1": 
            $message = items_name1($this, $theuser); 
            break; 
         case "Name2": 
            $message = items_name2($this, $theuser); 
            break; 
        case "Companion": 
            $message = items_companion($this, $owned_adoptable); 
            break;  
        case "HeldItem": 
            $message = items_helditem($this, $owned_adoptable); 
            break;   
        case "UnbindingCompanion": 
            $message = items_unbindingcompanion($this, $owned_adoptable); 
            break;  
         case "UnbindingItem": 
            $message = items_unbindingitem($this, $owned_adoptable); 
            break;  
         default: 
            throw new ItemException("The item function is invalid");           
      } 
      return new String($message); 
  }   

  public function add($quantity = 1, $owner){ 

  } 

  public function sell($quantity = 1, $owner = ""){ 
      // This method sells items from user inventory 
      $mysidia = Registry::get("mysidia"); 
       
      $this->owner = (!empty($owner))?$owner:$this->owner; 
      $earn = $this->getvalue($quantity);       
      $newamount = $mysidia->user->money + $earn; 
       
      if($this->remove($quantity)){ 
         $mysidia->db->update("users", array("money" => $newamount), "username = '{$this->owner}'"); 
         return TRUE; 
      } 
      else return FALSE;       
  } 
   
  public function toss($owner = ""){ 
      $this->remove($this->quantity); 
      return TRUE; 
  } 
   
  public function remove($quantity = 1, $owner = ""){ 
      // This method removes items from user inventory 
   
      $mysidia = Registry::get("mysidia"); 
      $this->owner = (!empty($owner))?$owner:$this->owner; 
      $newquantity = $this->quantity - $quantity; 
      if(empty($this->quantity) or $newquantity < 0) return FALSE; 
      else{ 
         switch($newquantity){ 
            case 0: 
               $mysidia->db->delete("inventory", "itemname='{$this->itemname}' and owner='{$this->owner}'"); 
               break; 
            default: 
               $mysidia->db->update("inventory", array("quantity" => $newquantity), "itemname ='{$this->itemname}' and owner='{$this->owner}'"); 
         } 
         return TRUE; 
      } 
  } 
   
  public function checktarget($aid){ 
      // This method checks if the item is usable 
      $adopt = new OwnedAdoptable($aid); 
      $id = $adopt->getID(); 
      $item_usable = FALSE; 
      switch($this->target){ 
         case "all": 
            $item_usable = TRUE; 
            break; 
         case "user": 
            $item_usable = TRUE; 
            break; 
         default: 
            $target = explode(",",$this->target); 
            if(in_array($id, $target)) $item_usable = TRUE;             
      } 
      return $item_usable; 
  } 
   
  public function randomchance(){ 
      // This method returns the item image in standard html form 
      $mysidia = Registry::get("mysidia"); 
      switch($this->chance){ 
         case 100: 
            $item_usable = TRUE; 
            break; 
         default: 
            $temp = mt_rand(0,99); 
            $item_usable = ($temp < $this->chance)?TRUE:FALSE; 
      } 
      return $item_usable;       
  } 
} 
?>
 
That still didn't work :/ This is the exact message if anyone can see what the issue is...

  Spoiler: Image 
fsf_zpsshy8amxf.png


My class_privateitem is the updated code, and if you needed it, here's the funtions_items one..

PHP:
<?php

// File ID: functions_items.php
// Purpose: Provides specific functions defined for items

function items_valuable($item, $adopt){
  $note = "The item {$item->itemname} is a valuable item, which cannot be used on any adoptable but may sell a good deal of money.";
  return $note;
}

function items_level1($item, $adopt){
  $mysidia = Registry::get("mysidia");
  $newlevel = $adopt->currentlevel + $item->value;
  $lev = $mysidia->db->select("levels", array(), "adoptiename='{$adopt->type}' and thisislevel ='{$newlevel}'")->fetchObject();
  
    //Check if the adoptable's level is already at maximum.    
  if(!is_object($lev)){
    // object not created, the level is already at maximum.
    $note = "Unfortunately, your selected adoptable's level cannot be raised by using item {$item->itemname}.";
  }
  else{
    //Update item quantity...
    $delitem = $item->remove();
    //Execute the script to update adoptable's level and clicks.
    $mysidia->db->update("owned_adoptables", array("currentlevel" => $newlevel, "totalclicks" => $lev->requiredclicks), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
    $note = "Congratulations, the item {$item->itemname} raised your adoptable's level by {$item->value}";
  }
  return $note;
}

function items_level2($item, $adopt){
  $mysidia = Registry::get("mysidia");
  $newlevel = $item->value;
  $lev = $mysidia->db->select("levels", array(), "adoptiename='{$adopt->type}' and thisislevel ='{$newlevel}'")->fetchObject();

    //Check if the adoptable's level is already at maximum.    
  if(!is_object($lev)){
    // object not created, the level is already at maximum.
    $note = "Unfortunately, your selected adoptable's level cannot be raised by using item {$item->itemname}.";
  }
  else{
    //Update item quantity...
    $delitem = $item->remove(); 
    //Execute the script to update adoptable's level and clicks.
	$mysidia->db->update("owned_adoptables", array("currentlevel" => $newlevel, "totalclicks" => $lev->requiredclicks), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
    $note = "Congratulations, the item {$item->itemname} increases your adoptable's level to {$item->value}";
  }
  return $note;
}

function items_level3($item, $adopt){
  $mysidia = Registry::get("mysidia");
  //Update item quantity...
  $delitem = $item->remove();
    //Execute the script to update adoptable's level and clicks.
  $mysidia->db->update("owned_adoptables", array("currentlevel" => 0, "totalclicks" => 0), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
  $note = "Congratulations, the item {$item->itemname} has reset the level and clicks of your adoptable.";
  return $note;
}

function items_click1($item, $adopt){
  $mysidia = Registry::get("mysidia");
  $newclicks = $adopt->totalclicks + $item->value;
  $mysidia->db->update("owned_adoptables", array("totalclicks" => $newclicks), "aid='{$adopt->aid}'and owner='{$item->owner}'");
  $note = "By using {$item->itemname}, the adoptable's total number of clicks has raised by {$item->value}<br>";
  //Now lets check if the adoptable has reached a new level.
  
  $ownedAdopt = new OwnedAdoptable($adopt->aid);
  if($ownedAdopt->hasNextLevel()){
      //new level exists, time to check if the total clicks have reached required minimum clicks for next level.
	 $nextLevel = $ownedAdopt->getNextLevel();
	 $requiredClicks = $nextLevel->getRequiredClicks();
     if($newclicks >= $requiredClicks and $requiredClicks != 0 and $requiredClicks != ""){
	    // We need to level this adoptable up...
        $mysidia->db->update("owned_adoptables", array("currentlevel" => $nextLevel->getLevel()), "aid ='{$adopt->aid}' and owner='{$item->owner}'");		     
        $note .= "And moreover, it has gained a new level!";
     }
  }
  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
}

function items_click2($item, $adopt){
  $mysidia = Registry::get("mysidia");
  $newclicks = $item->value;
  $mysidia->db->update("owned_adoptables", array("totalclicks" => $newclicks), "aid='{$adopt->aid}'and owner='{$item->owner}'");
  $note = "By using {$item->itemname}, the adoptable's total number of clicks has raised by {$item->value}<br>";
  //Now lets check if the adoptable has reached a new level.
  
  $ownedAdopt = new OwnedAdoptable($adopt->aid);
  if($ownedAdopt->hasNextLevel()){
      //new level exists, time to check if the total clicks have reached required minimum clicks for next level.
	 $nextLevel = $ownedAdopt->getNextLevel();
	 $requiredClicks = $nextLevel->getRequiredClicks();
     if($newclicks >= $requiredClicks and $requiredClicks != 0 and $requiredClicks != ""){
	    // We need to level this adoptable up...
        $mysidia->db->update("owned_adoptables", array("currentlevel" => $nextlevel), "aid ='{$adopt->aid}' and owner='{$item->owner}'");	  
        $note .= "And moreover, it has gained a new level!";
     }
  }

  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
}

function items_click3($item, $adopt){ 
  $mysidia = Registry::get("mysidia");
  $date = date('Y-m-d'); 
  $mysidia->db->delete("vote_voters", "adoptableid = '{$adopt->aid}' and date='{$date}'");
  //Update item quantity...
  $delitem = $item->remove(); 
  $note = "By using item {$item->name}, you have make your adoptables eligible for clicking by everyone again!";
  return $note;
}

function items_breed1($item, $adopt){
  $mysidia = Registry::get("mysidia");
  // Update the lastbred info.
  $mysidia->db->update("owned_adoptables", array("lastbred" => 0), "aid ='{$adopt->aid}' and owner='{$item->owner}'");	
  $note = "The item has been successfully used on your adoptable, it can breed again!<br>";
  //Update item quantity...
  $delitem = $item->remove(1, $item->owner);  
  return $note;
}

function items_breed2($item, $adopt){
  $mysidia = Registry::get("mysidia");
  // Note this function exists but is not useful until Mys v1.3.2, when adoptables can carry/attach items.
  $mysidia->db->update("owned_adoptables", array("lastbred" => 0), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
  $note = "The item has been successfully used on your adoptable, it can breed again!<br>";
  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
}

function items_alts1($item, $adopt){
  $mysidia = Registry::get("mysidia");
  // First lets check if alternative image exists for an adoptable at this level.
  $lev = $mysidia->db->select("levels", array(), "adoptiename='{$adopt->type}' and thisislevel ='{$adopt->currentlevel}'")->fetchObject();
  if($lev->alternateimage == ""){
      // The alternate image does not exist, cannot convert adoptable into its alternate form
    $note = "It appears that your adoptable does not have an alternate image at its given level...<br>";
  }
  else{
      // The alternate image exists, conversion between primary and alternate image is possible.
    switch($adopt->usealternates){
      case "yes": 
        $mysidia->db->update("owned_adoptables", array("usealternates" => 'no'), "aid ='{$adopt->aid}' and owner='{$item->owner}'");		
        $note = "Your adoptable has assume the species primary form.";
        break;
      default:
        $mysidia->db->update("owned_adoptables", array("usealternates" => 'yes'), "aid ='{$adopt->aid}' and owner='{$item->owner}'");	   
        $note = "Your adoptable {$adopt->name} has assume the species alternate form.";
    }
    //Update item quantity...
    $delitem = $item->remove();    
  }
  return $note;    
}

function items_alts2($item, $adopt){
  $note = "This feature will be available soon after we redesign the adoptable class, enjoy!";
  return $note;
}

function items_name1($item, $adopt){
  $note = "umm just realized that people can change adoptables names freely, will have to think about it later.";
  return $note;
}

function items_name2($item, $adopt){
  $note = "For now the items can only be used on adoptables, so user-based item usage will be implemented later.";
  return $note;
}

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;
  
function items_companion($item, $adopt){ 
  $mysidia = Registry::get("mysidia"); 
   
  if ($adopt->companion != "nocompanion") {   
    $itemgive = new StockItem($adopt->companion);   
    $itemgive->append(1, $mysidia->user->username);   
    }  
     
  $companion = $item->itemname; 
  $mysidia->db->update("owned_adoptables", array("companion" => $companion), "aid ='{$adopt->aid}' and owner='{$item->owner}'"); 
  $note = "You have given your pet a <b>{$item->itemname}</b>! It will now show up in your pet's profile. <br /><br /> <a href='http://mysgardia.com/inventory'><button type='button'>Return to Inventory</button></a><br>"; 
  //Update item quantity... 
  $delitem = $item->remove();  
  return $note; 
}  

function items_helditem($item, $adopt){
  $mysidia = Registry::get("mysidia");
  
  if ($adopt->item != "noitem") {  
    $itemgive = new StockItem($adopt->item);  
    $itemgive->append(1, $mysidia->user->username);  
    } 
    
  $helditem = $item->itemname;
  $mysidia->db->update("owned_adoptables", array("item" => $helditem), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
  $note = "You have given your pet a <b>{$item->itemname}</b>! It will now show up in your pet's profile. <br /><br /> <a href='http://mysgardia.com/inventory'><button type='button'>Return to Inventory</button></a><br>";
  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
}  

function items_unbindingcompanion($item, $adopt){
  $mysidia = Registry::get("mysidia");
  
  if ($adopt->companion != "No Companion") {  
    $itemgive = new StockItem($adopt->companion);  
    $itemgive->append(1, $mysidia->user->username);  
    } 

  $mysidia->db->update("owned_adoptables", array("companion" => 'No Companion'), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
  $note = "You use the <b>{$item->itemname}</b> on your pet, breaking the bond between it and its companion. The companion has been returned to your inventory!<br /><br /> <a href='/inventory'><button type='button'>Return to Inventory</button></a><br>";
  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
} 


function items_unbindingitem($item, $adopt){
  $mysidia = Registry::get("mysidia");
  
  if ($adopt->item != "No Item") {  
    $itemgive = new StockItem($adopt->item);  
    $itemgive->append(1, $mysidia->user->username);  
    } 

  $mysidia->db->update("owned_adoptables", array("item" => 'No Item'), "aid ='{$adopt->aid}' and owner='{$item->owner}'");
  $note = "You use the <b>{$item->itemname}</b> on your pet, breaking the bond between it and its held item. The held item has been returned to your inventory!<br /><br /> <a href='/inventory'><button type='button'>Return to Inventory</button></a><br>";
  //Update item quantity...
  $delitem = $item->remove(); 
  return $note;
}  
}
?>

I did just redo every step to see if I had followed them wrong but it still came out the same. Thanks for helping!
 
@parayna, @Ittermat, @dinocanid,

I also would suspect if the code isn't working or you're getting errors, perhaps it is conflicting with other mods you've added. Again I'd try to help but I would need the code in front of me. I haven't looked at the mysidia script in ages. :x

I would say go over each step again and make sure you've done everything right. Also make sure your item images all end in the same format and the format is correct with the img src code. So they should all be .png or .gif or whatever you're using. I remember I had issues with that.
 

Similar threads

Users who are viewing this thread

  • Forum Contains New Posts
  • Forum Contains No New Posts

Forum statistics

Threads
4,277
Messages
33,119
Members
1,602
Latest member
BerrieMilk
BETA

Latest Threads

Latest Posts

Top