Multiple Alternate Image Plugin

Forum
Last Post
Threads / Messages

Kaeliah

Premium Member
Premium Member
Joined
Sep 28, 2010
Messages
475
Points
0
Age
31
Location
Pennsylvania, United States
Mysidian Dollar
21,285
Multiple Alternate Image Plugin [by Kae]

Multiple Alternate Image
By Kaeliah


Modification TOS

I felt very bad for going on hiatus so to make up for it I decided to release this publicly instead of for premium only. Please note that this is a complex script and you should know at least a little PHP before attempting installation. That said, I tried to make it as simply as possible.

Step 1: Open the functions.php, levelup.php & doadopt.php files.
NOTE: Any page that inserts a row into the owned_adoptables table will need an extra '', added after imageurl.

Find the two functions 'getaltstatus' and 'getcurrentimage' in functions.php. They should be one after the other. Replace those two functions with the code below:

PHP:
function getaltstatus($parentid, $childid, $childlevel) {

	// This function determines if we will use alternate images...
	$alt = "Cannot find adopt with given parent id.";

	// First we need to see if this adoptable type has alternate images enabled...
	$query = "SELECT * FROM ".$prefix."adoptables WHERE id='".$parentid."'";
	$result = mysql_query($query);
	$num = mysql_num_rows($result);
	$alternates=@mysql_result($result, $i,"alternates");
	
	// Let's see if the level we are on is the level that requires alternates
	if($alternates == "enabled") {
		// Alternates for adoptable type are enabled, next check to see if this adopt is already using an alternate.
		$query = "SELECT * FROM ".$prefix."owned_adoptables WHERE aid='".$childid."'";
		$result = mysql_query($query);
		$num = mysql_num_rows($result);
		$usealt=@mysql_result($result, $i,"usealternates");
		$currentimage=@mysql_result($result, $i,"altimage");
		if($usealt == "no"){
		// Alternates are not currently being used, next check for alternate image w/ specified entry level.
		$query = "SELECT * FROM ".$prefix."alternates WHERE entry='".$childlevel."' AND adoptid='".$parentid."'";
		$result = runquery($query);
		
		while($row = mysql_fetch_array($result)){
		$method=$row['method'];
		$data=$row['data'];
		$newurl=$row['alturl'];
		// check what kind of method we're using to choose an alternate.
		if($method == "random"){
		$chance = rand(1, $data);
		if($chance == 1){
			$alt = $newurl;
		}
		else{
			$alt = "The random finder did not pick 1.";
		}
		
		}
		else{
			$alt = "Not finding method random...";
		}
		
		$i++;
		}
		
		
		}
		else if($usealt == "yes"){
		// This adopt is already using an alternate, so let's get a path.
		$query = "SELECT * FROM ".$prefix."alternates WHERE alturl='".$currentimage."' AND adoptid='".$parentid."'";
		$result = mysql_query($query);
		$path=@mysql_result($result, $i,"path");
		$subpath=@mysql_result($result, $i,"subpath");
		
		if($subpath != 0){// check for a subpath.
		$query = "SELECT COUNT(*) FROM ".$prefix."alternates WHERE subpath='".$subpath."' AND path='".$path."' AND replacedlevel='".$childlevel."' AND adoptid='".$parentid."'";
		$result = mysql_query($query);
		$num = mysql_fetch_array($result);
		}
		else if($path != 0){ // no subpath, so check for a path.
		$query = "SELECT COUNT(*) FROM ".$prefix."alternates WHERE path='".$path."' AND replacedlevel='".$childlevel."' AND adoptid='".$parentid."'";
		$result = mysql_query($query);
		$num = mysql_fetch_array($result);
		}
		
		if($num[0] > 1){
		// more than 1 path was found, so let's run through subpaths. 
		$i = 0;
		while($i < $num[0]){
		$method=@mysql_result($result, $i,"method");
		$data=@mysql_result($result, $i,"data");
		$newurl=@mysql_result($result, $i,"alturl");
		// check what kind of method we're using to choose a subpath.
		if($method == "random"){
		$chance = rand(1, $data);
		if($chance == 1){
			$alt = $newurl;
		}
		else{
			$alt = "none";
		}
		}
		else{
			$alt = "none";
		}
		
		$i++;
		}
		// In order for paths to work, we HAVE to have a subpath picked. Since a loop until one is picked would be tedius, we'll just randomly pick one.
		if($alt == "none"){
		$query = "SELECT * FROM ".$prefix."alternates WHERE path='".$path."' AND replacedlevel='".$childlevel."' ORDER BY RAND() LIMIT 1 ";
		$result = mysql_query($query);
		$newurl=@mysql_result($result, $i,"alturl");
		$alt = $alturl;
		}
		
		} // end subpaths
		else{
		// No path was found, so now we just need to pick an alternate. 
		
		$query = "SELECT * FROM ".$prefix."alternates WHERE adoptid='".$parentid."' AND replacedlevel = '".$childlevel."'";
		$result = mysql_query($query);
		$num = mysql_fetch_array($result);
		
		$method=@mysql_result($result, $i,"method");
		$data=@mysql_result($result, $i,"data");
		$newurl=@mysql_result($result, $i,"alturl");
		
		if($method == "random"){
		$chance = rand(1, $data);
		if($chance == 1){
			$alt = $newurl;
		}
		else{
			$alt = "none";
		}
		}
		else{
			$alt = "none";
		}
		
		} // End No Subpaths
		
		
		} // end alternates already enabled.
	} // end alternates enabled
	else{
	$alt = "alternates are reading disabled.";
	}
	return $alt;
}

function getcurrentimage($aid) {

	// This function determines which image we should use for a given adoptable...
	$image = "";

	// First we select the adoptable from the database and get some basic information...
	$query = "SELECT * FROM ".$prefix."owned_adoptables WHERE aid='".$aid."'";
	$result = mysql_query($query);

	$currentimage=@mysql_result($result, 0,"altimage"); 
	$imageurl=@mysql_result($result, 0,"imageurl");

	if($currentimage == ""){
	// if the currentimage is blank, we're not using an alternate so grab the primary image.
	$image = $imageurl;
	}
	else{
	$image = $currentimage;
	}
	if($image == ""){
	// For some reason, both primary and current images are blank, so let's do one more check.
	$currentlevel=@mysql_result($result, 0,"currentlevel");
	$type=@mysql_result($result, 0,"type");
	
	if($currentlevel != 0){
	$query = "SELECT * FROM ".$prefix."levels WHERE adoptiename = '".$type."' AND thisislevel = '".$currentlevel."'";
	$result = mysql_query($query);
	
	$primaryimage=@mysql_result($result, 0,"primaryimage");
	
	mysql_query("UPDATE ".$prefix."owned_adoptables WHERE aid = '".$aid."' SET imageurl = '".$primaryimage."'");
	$image = $primaryimage;
	
	}
	else{
	$query = "SELECT * FROM ".$prefix."adoptables WHERE type = '".$type."'";
	$result = mysql_query($query);
	$eggimage=@mysql_result($result, 0,"eggimage");
	
	mysql_query("UPDATE ".$prefix."owned_adoptables WHERE aid = '".$aid."' SET imageurl = '".$eggimage."'");
	$image = $eggimage;
	
	}
	if($image == ""){
	// both are definitely blank... show error.
	$image = "http://www.".$GLOBALS['domain']."".$GLOBALS['scriptpath']."/templates/icons/delete.gif";
	}
	}
	return $image;
}


Find in levelup.php at about line 140:

PHP:
	$parentid = converttypetoparentid($type); // Get the ID of the parent type adoptable
	$altstatus = getaltstatus($parentid, $id, $nextlevel); // Check if we are using alternate images or not...

	if($altstatus == "yes"){

	// We are enabling alternate images for this adoptable...

	$query = "UPDATE ".$prefix."owned_adoptables SET usealternates='yes' WHERE aid='".$id."'";
	runquery($query);


	}

And replace it with this:

PHP:
	$parentid = converttypetoparentid($type); // Get the ID of the parent type adoptable
	$altstatus = getaltstatus($parentid, $id, $nextlevel); // Check if we are using alternate images or not...

	if($altstatus != "none"){

	// We are enabling alternate images for this adoptable...

	$query = "UPDATE ".$prefix."owned_adoptables SET usealternates='yes',altimage='".$altstatus."' WHERE aid='".$id."'";
	mysql_query($query);


	}

Lastly, open up doadopt.php and any other files that insert rows into the owned_adoptables table.

Find something like this: '$code', '','$alts',
and replace it with this: '$code', '','','$alts',


Step 2: Hard stuff is over, believe it or not. :p Download the 2 files attached to this post. Upload both in your main folder with admin.php and all that good stuff. Run the install.php page ONCE and then DELETE IT.

You're Done! You can check out the additional admin area in site settings -> plugins -> MAI Admin

Okay so I have not been able to beta test this much so please try it out and let me know what errors you get so I can fix 'em quick. I know all the basic functions work though. Also, please read the faq below BEFORE asking questions.

FAQ

Q: I don't understand what all the fields are for?
A: Read the handy dandy instruction thingy that's linked in the MAI Admin.

Q: Is there a way to transfer current alternates?
A: Not as of yet, sorry.

Q: Is this compatible with older versions of MA?
A: Uhm. Probably not. Stick to 1.2.* or higher.

Q: Okay so what do I put for the Alternates stuff when adding an adopt?
A: Enabled alternates as usual and enter random digits to satisfy the checks. The random digits will have no effect on the new alternate system, whether or not alternates are enabled WILL.

Q: Why isn't there an easier way to enable/disable alternates for certain adopts.
A: Good question, I'll think about it for a future update.


That's all folks! Enjoy!
 

Attachments

  • maiadmin.php
    13.8 KB · Views: 41
  • install.php
    1.4 KB · Views: 36
Last edited:
All I can say is amazing, glad you did it Kaeliah. I saw you made use of the plugin system, which looks interesting to me. Should be a very helpful way for noncoders to install mods/templates.
 
I see, I am sure everyone will like this from you. I took a look at your script file a bit, seems that you created a new table that stores data of every alternate image for each species, which is a very good idea.

I also remember you said in your own trade script, users can trade multiple adoptables at the same time. Wonder how you coded a system like that. I've been manipulating the functions explode() and implode() to allow an array of variables to be stored in phpmyadmin. I did it for the friend/friendlist script, which will be released together with Mys v1.2.2 next week. In future I plan to make a multiple adoptables trade system based on this technique too, learning new PHP stuff always makes me excited. XD
 
Oi so many versions XD how will I ever keep up?

As for multiple adopts being traded it's all stored in a table as individual objects with a key that connects them back to their trade. So like it could be an item, pet or money.
 
lol it is not really that hard to keep up. I've released Mys v1.2.0 and v1.2.1 since you left the staff team. Mys v1.2.2 is currently under development, and Mys v1.2.3 will follow. At the beginning of May I will be working on the next major release, this will come out huge. We have two main features planned for Mys v1.3.0 already, you will soon have a preview of them from my blog.
 
Its alright Kaeliah, dont worry about it. You can contribute to the community as a premium member too, even not as a dev staff people still love and respect you.

Edit: Posted a blog about Mys v1.3.0, maybe its too early to leak info of this major release at this moment. XD
 
I understand Kaeliah. You left at a time when we were on the verge of Releasing Mys v1.2.0, I do not have the pound and trade system from you so I had to make them on my own. It was not a really bad experience for me though, at least I figured them out.

But lets not worry too much about this, okay? This is life, something you cant control on your own. Who would've known that you got sick all of a sudden and had to quit at a time like this? No one was blaming you, and in fact we all worried about you. Relax a bit and dont let all these bad things go over your head. ^^
 
Okay, so I tried this out since it was exactly what I was looking for.

First of all, I get "templates/icons/delete.gif" as the adopt image on level up and on myadopts.php?act=manage/stats but they show up on myadopts.php
I'm guessing this is due to the modification in the getcurrentimage function. I'll be having a look over it to learn how it's done.

I've had a go at adding an adoptable and read the instructions|FAQ but it's a little confusing and doesn't seem to be working, so I'm humbly asking for some clarification.
Here's what I done and perhaps you can tell me where I'm going wrong:

1. I created a new adoptable through admin.php, enabled the alternate images and filled in [Start using the alternate outcome at level number:] as 0 while the alternate outcome chance I put as 2. Though these number don't really matter and are just satisfying checks, right?

2. I added another level to the adopt I just made (Which was an egg by the way) through admin.php. This was level 1 and I added (one of) the alt image(s) for this level while I was at it; I also input 1 as the required number of clicks- for the sake of testing.

3. Next, it was my understanding that I then go to maiadmin.php and select "Add Alternate Image". I filled out the form as follows:

- Uploaded Image: I selected the same alt image as I used in the creation of level 1.
- Select Adopt: Selected the adopt I'd made, of course (I only have one in the database).
- Entry Level: This was a tad confusing despite your best efforts at explaining. My understanding at first was that it was supposed to be an integer that relates to the level (or stage) that the non-alt is at if it's the first in the alt line. So I input 1 as my value (I then tried again later with "yes" and got no different results)
- Replace Level: I thought this was self explanatory and was asking which level this alt will relate to in the level table. So I input 1.
- Path: I believe I understand this... I input 2 because it would be the 2nd path that that can start at.
- Subpath: I left this blank for the time being
- Select Adopt: Well I believe this was supposed to be called "Method" - and I chose "Random Method" from the drop down.
- Data: I input 2 to represent a 1 in 2 chance.

I then adopted 20 of my adoptable and proceeded to level them into the next stage. None of them returned as the alt.
I then created another alt image with maiadmin.php and used my 3rd alt (I want the egg to hatch into 3 different things- with one of them being significantly rarer). I input 3 for Path while keeping all the other variables the same.
I adopted another 20 and proceeded to level them but I still got the standard one.

Am I misunderstanding something? I also tried selecting as the alt image nothing when creating level 1 in admin.php

Last note: The "return" link on maiadmin.php?do=addnew takes you to www.$domain/'maiadmin.php/'
 
I'm having the same issue with everything turning out standard, but I also get this error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /inc/functions.php on line 460

when I adopt or level a creature.

Not sure what to make of it since I'm still a newb to PHP. I've looked at both the original and modified codes and they're the same aside from the rows underneath...

Great script, though. I'll be in heaven once I can get it to work. :D
 
Okay, so I tried this out since it was exactly what I was looking for.

First of all, I get "templates/icons/delete.gif" as the adopt image on level up and on myadopts.php?act=manage/stats but they show up on myadopts.php
I'm guessing this is due to the modification in the getcurrentimage function. I'll be having a look over it to learn how it's done.

I've had a go at adding an adoptable and read the instructions|FAQ but it's a little confusing and doesn't seem to be working, so I'm humbly asking for some clarification.
Here's what I done and perhaps you can tell me where I'm going wrong:

1. I created a new adoptable through admin.php, enabled the alternate images and filled in [Start using the alternate outcome at level number:] as 0 while the alternate outcome chance I put as 2. Though these number don't really matter and are just satisfying checks, right?

2. I added another level to the adopt I just made (Which was an egg by the way) through admin.php. This was level 1 and I added (one of) the alt image(s) for this level while I was at it; I also input 1 as the required number of clicks- for the sake of testing.

3. Next, it was my understanding that I then go to maiadmin.php and select "Add Alternate Image". I filled out the form as follows:

- Uploaded Image: I selected the same alt image as I used in the creation of level 1.
- Select Adopt: Selected the adopt I'd made, of course (I only have one in the database).
- Entry Level: This was a tad confusing despite your best efforts at explaining. My understanding at first was that it was supposed to be an integer that relates to the level (or stage) that the non-alt is at if it's the first in the alt line. So I input 1 as my value (I then tried again later with "yes" and got no different results)
- Replace Level: I thought this was self explanatory and was asking which level this alt will relate to in the level table. So I input 1.
- Path: I believe I understand this... I input 2 because it would be the 2nd path that that can start at.
- Subpath: I left this blank for the time being
- Select Adopt: Well I believe this was supposed to be called "Method" - and I chose "Random Method" from the drop down.
- Data: I input 2 to represent a 1 in 2 chance.

I then adopted 20 of my adoptable and proceeded to level them into the next stage. None of them returned as the alt.
I then created another alt image with maiadmin.php and used my 3rd alt (I want the egg to hatch into 3 different things- with one of them being significantly rarer). I input 3 for Path while keeping all the other variables the same.
I adopted another 20 and proceeded to level them but I still got the standard one.

Am I misunderstanding something? I also tried selecting as the alt image nothing when creating level 1 in admin.php

Last note: The "return" link on maiadmin.php?do=addnew takes you to www.$domain/'maiadmin.php/'

Nothing that you've explained seems to be an issue, but if you could please check out your database, and even take screenshots of the tables related to the adoptables and the alternates to see if there is any information missing or weird there. That's where I usually tend to start when attempting a troubleshoot.

I'm having the same issue with everything turning out standard, but I also get this error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /inc/functions.php on line 460

when I adopt or level a creature.

Not sure what to make of it since I'm still a newb to PHP. I've looked at both the original and modified codes and they're the same aside from the rows underneath...

Great script, though. I'll be in heaven once I can get it to work. :D

Would you mind posting lines 400-500 in your functions.php or just the whole thing. The problem may also be the lack of compatibility with the mysql_num_rows thing.

It's a big script which is why there are so many bugs and glitches in it. I will be working on an updated version soon that will simplify things quite a bit and also hopefully work more reliably.
 
PHP:
// Now we check those three conditions we have in the Admin CP
	if($row['whenisavail'] == "conditions") {
		// If we have a restriction on the number of times this can be adopted...
		if($row['freqcond'] == "enabled") {
			// Select from the database and determine how many times this adoptable type has been adopted
			$num = 0;

			$query = "SELECT * FROM ".$GLOBALS['prefix']."owned_adoptables WHERE type='$type'"; // QUERYPROBLEM
			$result = runquery($query);
			$num = mysql_numrows($result);

			if($num > $number) {
				return "no";
			}
		}

		// Begin the date restriction check
		$today = date('Y-m-d');

		if($row['datecond'] == "enabled" and $row['date'] != $today) {
			return "no";
		}

		// We are checking to see how many of this adoptable a user owns
		// If they own more than the specifed number, they cannot adopt...
		if($row['moreless'] == "enabled") {
			$num = 0;

			$query = "SELECT * FROM ".$GLOBALS['prefix']."owned_adoptables WHERE owner='$loggedinname' and type='$type'";
			$result = runquery($query);
			$num = mysql_numrows($result);

			if($num > $row['morelessnum']) {
				return "no";
			}
		}


		// Check if the user is of a specified usergroup...
		if($row['levelgrle'] == "enabled") {
			$ourgid = getgroup();

			// If the two numbers do not match, do not allow the adoption...
			if($ourgid != $row['grlelevel']) {
				return "no";
			}	
		}
	} // end conditions
	return "yes";
}

// MESSY
function getaltstatus($parentid, $childid, $childlevel) {

    // This function determines if we will use alternate images...
    $alt = "Cannot find adopt with given parent id.";

    // First we need to see if this adoptable type has alternate images enabled...
    $query = "SELECT * FROM ".$prefix."adoptables WHERE id='".$parentid."'";
    $result = mysql_query($query);
    $num = mysql_num_rows($result);
    $alternates=@mysql_result($result, $i,"alternates");
    
    // Let's see if the level we are on is the level that requires alternates
    if($alternates == "enabled") {
        // Alternates for adoptable type are enabled, next check to see if this adopt is already using an alternate.
        $query = "SELECT * FROM ".$prefix."owned_adoptables WHERE aid='".$childid."'";
        $result = mysql_query($query);
        $num = mysql_num_rows($result);
        $usealt=@mysql_result($result, $i,"usealternates");
        $currentimage=@mysql_result($result, $i,"altimage");
        if($usealt == "no"){
        // Alternates are not currently being used, next check for alternate image w/ specified entry level.
        $query = "SELECT * FROM ".$prefix."alternates WHERE entry='".$childlevel."' AND adoptid='".$parentid."'";
        $result = runquery($query);
        
        while($row = mysql_fetch_array($result)){
        $method=$row['method'];
        $data=$row['data'];
        $newurl=$row['alturl'];
        // check what kind of method we're using to choose an alternate.
        if($method == "random"){
        $chance = rand(1, $data);
        if($chance == 1){
            $alt = $newurl;
        }
        else{
            $alt = "The random finder did not pick 1.";
        }
        
        }
        else{
            $alt = "Not finding method random...";
        }
        
        $i++;
        }
        
        
        }
        else if($usealt == "yes"){
Lines 400-500.
I'll bet anything I pasted it in wrong.
 
Last edited by a moderator:
I keep trying multiple things but nothing's worked yet. Maybe I'll get it eventually.
 
haha how i used to do things, just ram the code in there lol, great way to learn. just try and understand what its doing and look up things you don't know. good luck with your site, and i can't remember if you were like some of us trying to learn php through this project or just want your site working:hmmm:
 
haha how i used to do things, just ram the code in there lol, great way to learn. just try and understand what its doing and look up things you don't know. good luck with your site, and i can't remember if you were like some of us trying to learn php through this project or just want your site working:hmmm:

That's how I learn. c: I just stick in the code I want and compare it to the original if something goes wrong to see where it's different.

I taught myself CSS and HTML by doing that exactly, haha.

And I'm new to the forum so you probably haven't heard anything of me, but I do hope to learn a lot from it. I'm a pretty self-sufficient person and like doing absolutely everything on my own. I try to avoid asking for help unless I really really need to.

But I still can't fix this error... I've even tried deleting everything and reuploading the site with the scripts already modded. Same error.

I also noticed the original script has mysql_numrows and the modded version has mysql_num_rows, but changing the latter to the former still did nothing.

I'm honestly stumped. Watch it turn out to be some huge problem caused just because I misplaced one thing on accident. (It happens often)

Is nobody else getting the error I'm getting?
 
The newest one. I think I might re-download it and try from a fresh download, though.

I've been looking for anything that might be wrong but so far I've seen nothing that looks out of place.

I've even looked the error up on Google but none of others' solutions have been able to fix it.

Definitely gonna keep trying until I figure it out, though. This script is worth it.
 

Similar threads

Users who are viewing this thread

  • Forum Contains New Posts
  • Forum Contains No New Posts

Forum statistics

Threads
4,274
Messages
33,115
Members
1,602
Latest member
BerrieMilk
BETA

Latest Threads

Latest Posts

Top