Haustier-Mod
Autor: Chaosmaker <webmaster@chaosonline.de>
URL: http://logd.chaosonline.de
Letztes Update: 2004-12-15
Editierte Dateien: stables.php, houses.php, common.php, invhandler.php

Datenbank:
	ALTER TABLE `accounts`
		ADD `petid` INT UNSIGNED NOT NULL AFTER `hashorse`,
		ADD `petfeed` DATETIME NOT NULL AFTER `petid` ;

Tiervorschlge:
	INSERT INTO `items` (`name`, `class`, `owner`, `value1`, `value2`, `gold`, `gems`, `description`, `hvalue`, `buff`) VALUES ('Kleiner Wachdackel', 'Haust.Prot', 0, 100, 0, 5000, 15, 'Ein niedlicher kleiner Dackel, der Einbrecher erschreckt.', 0, 'a:4:{s:4:"name";s:14:"Lautes Klffen";s:6:"atkmod";s:2:"20";s:6:"defmod";s:2:"20";s:5:"regen";s:3:"100";}');
	INSERT INTO `items` (`name`, `class`, `owner`, `value1`, `value2`, `gold`, `gems`, `description`, `hvalue`, `buff`) VALUES ('Groer Haushund', 'Haust.Prot', 0, 0, 1, 15000, 30, 'Ein groer Wachhund, der Haus und Herrchen zu schtzen wei.', 0, 'a:4:{s:4:"name";s:11:"Bissattacke";s:6:"atkmod";s:2:"30";s:6:"defmod";s:2:"30";s:5:"regen";s:3:"150";}');
	INSERT INTO `items` (`name`, `class`, `owner`, `value1`, `value2`, `gold`, `gems`, `description`, `hvalue`, `buff`) VALUES ('Ausgewachsener Kampfhund', 'Haust.Prot', 0, 100, 1, 25000, 45, 'Ein riesiger Kampfhund, der bereit ist, jeden Eindringling sofort zu zerfleischen.', 0, 'a:4:{s:4:"name";s:21:"Wtendes Zerfleischen";s:6:"atkmod";s:2:"40";s:6:"defmod";s:2:"40";s:5:"regen";s:3:"200";}');

Hinweis:
Die Einrckungen sind hier nicht dieselben wie in den Scripten.
Bei der Suche gengt jeweils die erste Zeile.

--- ffne invhandler.php
--- suche
	*/
--- fge davor ein:
	* *Haust.Prot
	*   - class: Haust.Prot
	*   - name: pet name
	*   - description: description
	*   - owner: 0
	*   - value1: gold price to feed pet (>= 0)
	*   - value2: gem price to feed pet (>= 0)
	*   - hvalue: 0
	*   - gold: gold price to buy pet (>= 0)
	*   - gems: gem price to buy pet (>= 0)
	*   - buff:
	*      - name: name of pet's weapon
	*      - atkmod: pet's att. value
	*      - defmod: pet's def. value
	*      - regen: pet's health points
	*   - rest unused (keep 0 or empty)
	*   - generated by Admin
	*
	* *Haustiere
	*   - class: Haustiere
	*   - name: pet name
	*   - description: description
	*   - owner: >0
	*   - value1: gold price to feed pet (>= 0)
	*   - value2: gem price to feed pet (>= 0)
	*   - hvalue: >0 (house id, not used yet)
	*   - gold: gold price to buy pet (>= 0)
	*   - gems: gem price to buy pet (>= 0)
	*   - buff:
	*      - name: name of pet's weapon
	*      - atkmod: pet's att. value
	*      - defmod: pet's def. value
	*      - regen: pet's health points
	*   - rest unused (keep 0 or empty)
	*   - generated automatically from Haust.Prot
	*
--- ffne common.php
--- suche
	.templatereplace("statrow",array("title"=>"Rstung","value"=>$u['armor']))
	,true);
--- fge danach ein:
		if ($u['petid']>0) {
			$pettime = strtotime($u['petfeed'])-time();
			$charstat .= appoencode(
				templatereplace('statrow',
					array('title'=>'Haustier',
							'value'=>grafbar(24*3600,$pettime)
					)
				)
				,true);
		}
--- ffne houses.php
--- suche
	output("`%Die Wache lsst dich nicht entkommen!`n");
	$session[user][reputation]--;
	$fight=true;
--- ersetze durch:
	$badguy = createarray($session['user']['badguy']);
	// fight against guard
	if ($badguy['creaturename']=='Stadtwache') {
		output("`%Die Wache lsst dich nicht entkommen!`n");
		$session[user][reputation]--;
	}
	// fight against pet
	else {
		output("`%".$badguy['creaturename']."`% lsst dich nicht entkommen!`n");
	}
	$fight=true;
--- suche
	// Spieler besiegen
--- fge davor ein:
	$badguy = createarray($session['user']['badguy']);
	$fightpet = false;
	// check for pet
	if ($badguy['creaturename']=='Stadtwache') {
		$sql = 'SELECT accounts.petid AS pet, items.name, items.buff FROM accounts LEFT JOIN items ON accounts.petid=items.id WHERE accounts.house='.$session['housekey'].' AND accounts.petfeed > NOW()';
		$result = db_query($sql);
		if ($row = db_fetch_assoc($result)) {
			if ($row['pet']>0) {
				$petbuff = unserialize($row['buff']);
				$badguy = array('creaturename'=>$row['name'],
									'creaturelevel'=>$session['user']['level'],
									'creatureweapon'=>$petbuff['name'],
									'creatureattack'=>$petbuff['atkmod'],
									'creaturedefense'=>$petbuff['defmod'],
									'creaturehealth'=>$petbuff['regen'],
									'diddamage'=>0);
				$session['user']['badguy'] = createstring($badguy);
				$fight = $fightpet = true;
				output('`$Gerade willst du ins Haus schleichen, als du hinter dir pltzlich ein Knurren vernimmst.`0`n');
			}
		}
	}

	if (!$fightpet) {
--- suche
		addnav("Einsteigen","houses.php?op=klauen&id=$session[housekey]");
	}
--- fge danach ein:
	}
--- suche
	output("`n`#Du hast die Stadtwache besiegt und der Weg zum Haus ist frei!`nDu bekommst ein paar Erfahrungspunkte.");
	addnav("Weiter zum Haus","houses.php?op=einbruch2&id=$session[housekey]");
	addnav("Zurck zum Dorf","village.php");
	$session[user][experience]+=$session[user][level]*10;
	$session[user][turns]--;
--- ersetze durch:
	addnav("Weiter zum Haus","houses.php?op=einbruch2&id=$session[housekey]");
	addnav("Zurck zum Dorf","village.php");
	// check for pet
	if ($badguy['creaturename']=='Stadtwache') {
		output("`n`#Du hast die Stadtwache besiegt und der Weg zum Haus ist frei!`nDu bekommst ein paar Erfahrungspunkte.");
		$session['user']['experience'] += $session['user']['level']*10;
		$session['user']['turns']--;
	}
	else {
		output('`n`#'.$badguy['creaturename'].'`# zieht sich jaulend zurck und gibt den Weg zum Haus frei!');
	}
--- suche
	output("`n`\$Die Stadtwache hat dich besiegt. Du bist tot!`nDu verlierst 10% deiner Erfahrungspunkte, aber kein Gold.`nDu kannst morgen wieder kmpfen.");
--- fge davor ein:
	if ($badguy['creaturename']=='Stadtwache') {
--- suche
	addnews("`%".$session[user][name]."`3 wurde von der Stadtwache bei einem Einbruch besiegt.");
	addnav("Tgliche News","news.php");
--- fge danach ein:
	}
	else {
		output('`n`$'.$badguy['creaturename'].'`$ hat dich besiegt. Du liegst schwer verletzt am Boden!`nDu verlierst 3 Charmepunkte und fast alle Lebenspunkte.');
		$session['user']['hitpoints'] = 1;
		$session['user']['charm'] -= 3;
		addnews("`%".$session['user']['name']."`3 stie bei einem Einbruch auf unerwartete Gegenwehr und verletzte sich schwer.");
		addnav('Davonkriechen',"houses.php?op=leave");
	}
--- ffne stables.php
--- suche
	page_header("Mericks Stlle");
--- fge danach ein:
	// Haustier-Mod by Chaosmaker <webmaster@chaosonline.de>
	// http://logd.chaosonline.de
	function getpet($petid=0) {
		$sql = "SELECT * FROM items WHERE id='$petid'";
		$result = db_query($sql);
		if (db_num_rows($result)>0) {
			$row = db_fetch_assoc($result);
			$row['buff'] = unserialize($row['buff']);
			return $row;
		}
		else {
			return array();
		}
	}
	$playerpet = getpet($session['user']['petid']);
	$petrepaygems = round($playerpet['gems']*2/3);
--- suche
	if ($session['user']['hashorse']>0 && $session[user][fedmount]==0) addnav("f?{$playermount['mountname']} fttern (`^$futtercost`0 Gold)","stables.php?op=futter");
--- fge danach ein:
	if ($session['user']['petid']>0) addnav("t?{$playerpet['name']} fttern","stables.php?op=futterpet");
--- suche
	}elseif($_GET['op']=="examine"){
--- fge davor ein:
	} elseif ($_GET['op']=="examinepet") {
		$pet = getpet($_GET['id']);
		if (count($pet)==0) {
			output("`7\"`&Ach, ich heb keen solches Tier da!`7\" ruft der Zwerg!");
		}
		else {
			output("`7\"`&Ai, ich heb wirklich n paar feine Viecher hier!`7\" kommentiert der Zwerg.`n`n");
			output("`7Kreatur: `&{$pet['name']}`n");
			output("`7Beschreibung: `&{$pet['description']}`n");
			output("`7Preis: `^{$pet['gold']}`& Gold, `%{$pet['gems']}`& Edelstein".($pet['gems']==1?"":"e")."`n");
			output("`n");
			addnav("Dieses Tier kaufen","stables.php?op=buypet&id={$pet['id']}");
		}
--- suche
	}elseif($_GET['op']=='buymount'){
--- fge davor ein:
	} elseif ($_GET['op']=='buypet') {
		$pet = getpet($_GET['id']);
		if (count($pet)==0) {
			output("`7\"`&Ach, ich heb keen solches Tier da!`7\" ruft der Zwerg!");
		}
		else {
			if (
				$session['user']['gold'] < $pet['gold']
				 ||
				($session['user']['gems']+$petrepaygems) < $pet['gems']
			){
				output("`7Merick schaut dich schief von der Seite an. \"`&hm, was glubst du was du hier machst? Kanns u nich sehen, dass {$pet['name']} `^{$pet['gold']}`& Gold und `%{$pet['gems']}`& Edelsteine kostet?`7\"");
			}
			else {
				$feeddays = getsetting("daysperday",4);
				if ($session['user']['petid']>0) {
					output("`7Du bergibst dein(e/n) {$playerpet['name']} und bezahlst den Preis fr dein neues Tier. Merick fhrt ein(e/n) schne(n/s) neue(n/s) `&{$pet['name']}`7  fr dich heraus und gibt dir Futter fr $feeddays Tage dazu!`n`n");
				}
				else {
					output("`7Du bezahlst den Preis fr dein neues Tier und Merick fhrt ein(e/n) schne(n/s) neue(n/s) `&{$pet['name']}`7 fr dich heraus und gibt dir Futter fr $feeddays Tage dazu!`n`n");
				}
				// delete old pet
				$sql = 'DELETE FROM items WHERE id='.$session['user']['petid'];
				db_query($sql);
				// insert new pet
				$sql = "INSERT INTO items (name,class,owner,value1,value2,gold,gems,description,hvalue,buff)
						VALUES ('{$pet['name']}','Haustiere',{$session['user']['acctid']},{$pet['value1']},{$pet['value2']},{$pet['gold']},{$pet['gems']},'".addslashes($pet['description'])."',{$session['user']['house']},'".addslashes(serialize($pet['buff']))."')";
				db_query($sql);
				$session['user']['petid'] = db_insert_id(LINK);
				$session['user']['petfeed'] = date('Y-m-d H:i:s',time() + $feeddays * (3600*24 / getsetting("daysperday",4)));
				$goldcost = -$pet['gold'];
				$session['user']['gold'] += $goldcost;
				$gemcost = $petrepaygems - $pet['gems'];
				$session['user']['gems'] += $gemcost;
				debuglog(($goldcost <= 0?"spent ":"gained ") . abs($goldcost) . " gold and " . ($gemcost <= 0?"spent ":"gained ") . abs($gemcost) . " gems trading for a new pet");
				// Recalculate so the selling stuff works right
				$playerpet = $pet;
				$petrepaygems = round($playerpet['gems']*2/3,0);
			}
		}
--- suche
	}elseif($_GET['op']=='sellmount'){
--- fge davor ein:
	} elseif ($_GET['op']=='sellpet') {
		$sql = 'DELETE FROM items WHERE id='.$session['user']['petid'];
		db_query($sql);
		$session['user']['gems'] += $petrepaygems;
		debuglog("gained $petrepaygems gems selling their pet");
		$session['user']['petid'] = 0;
		$session['user']['petfeed'] = '0000-00-00 00:00:00';
		output("`7So schwer es dir auch fllt, dich von dein(er/em) {$playerpet['name']} zu trennen, tust du es doch und eine einsame Trne entkommt deinen Augen.`n`n");
		output("Aber in dem Moment, in dem du die `%$petrepaygems`7 Edelsteine erblickst, fhlst du dich gleich ein wenig besser.");
--- suche
	}elseif($_GET['op']=='futter'){
--- fge davor ein:
	} elseif ($_GET['op']=='futterpet') {
		if (empty($_POST['days'])) {
			output('Das Futter kostet `^'.$playerpet['value1'].' Gold`0 und
					`%'.$playerpet['value2'].' Edelsteine`0 pro Tag.`n');
			output('<form action="stables.php?op=futterpet" method="post">',true);
			output('Fr wie viele Tage mchtest du Futter kaufen?');
			output('<input type="text" name="days" value="0"> <input type="submit" value="Kaufen!">',true);
			output('</form>',true);
			addnav('','stables.php?op=futterpet');
		}
		else {
			$days = (int)$_POST['days'];
			if ($session['user']['gold']>=$playerpet['value1']*$days && $session['user']['gems']>=$playerpet['value2']*$days) {
				$session['user']['gold'] -= $playerpet['value1']*$days;
				$session['user']['gems'] -= $playerpet['value2']*$days;
				if ($playerpet['value1']>0) {
					if ($playerpet['value2']>0) {
						$coststr = '`^'.($playerpet['value1']*$days).' Gold`0 und `%'.($playerpet['value2']*$days).' Edelsteine`0';
					}
					else $coststr = '`^'.($playerpet['value1']*$days).' Gold`0';
				}
				else {
					$coststr = '`%'.($playerpet['value2']*$days).' Edelsteine`0';
				}
				output('Merick nimmt die '.$coststr.' und gibt dir genug Futter, um dein(e/n) '.$playerpet['name'].' die nchsten '.$days.' Tage zu versorgen.`n');
				$oldtime = strtotime($session['user']['petfeed']);
				if ($oldtime < time()) $oldtime = time();
				$newtime = $oldtime + $days * (3600*24 / getsetting("daysperday",4));
				$session['user']['petfeed'] = date('Y-m-d H:i:s',$newtime);
			}
			else {
    				output('`7Du kannst das Futter nicht bezahlen. Merick weigert sich, dein Tier fr dich durchzufttern.');
			}
		}
--- suche
		addnav("Betrachte {$row['mountname']}`0","stables.php?op=examine&id={$row['mountid']}");
	}
--- fge danach ein:
	if ($session['user']['housekey']>0) {
		$sql = 'SELECT name, id FROM items WHERE class="Haust.Prot" ORDER BY gold ASC, gems ASC';
		$result = db_query($sql);
		if (db_num_rows($result)>0) {
			addnav('Haustiere');
			while ($row = db_fetch_assoc($result)) {
				addnav("Betrachte {$row['name']}`0",'stables.php?op=examinepet&id='.$row['id']);
			}
		}
	}
--- suche
		addnav("Verkaufe {$playermount['mountname']}","stables.php?op=sellmount");
	}
--- fge danach ein:
	if ($session['user']['petid']>0) {
		if ($session['user']['hashorse']==0) addnav("Sonstiges");
		output("`n`nMerick bietet dir `%$petrepaygems`7 Edelsteine fr dein(e/n) {$playerpet['name']}.");
		addnav("Verkaufe {$playerpet['name']}","stables.php?op=sellpet");
	}