Alle Dateien, die hier eingesehen werden können, sind unter der GNU GPL lizenziert. Wenn du etwas darin findest, das du gerne hättest, so schreibe mir doch bitte eine Anfrage damit ich, wenn ich es rausgeben will, alle Änderungen raussuchen könnte. Denn ich übernehme keine Verantwortung, solltest du was rausnehmen und es geht nicht. Und Support deswegen geb ich schon gar nicht.
Solltest du eine Schwachstelle im Code finden, sei es eine kritische Lücke oder eine Möglichkeit zu cheaten, dann bitte ich dich, mir das mitzuteilen. Solltest du beim cheaten erwischt werden, werde ich deinen Account eigenhändig löschen & bannen; Solltest du meinen Server angreifen, so werde ich meine Rechtsschutzversicherung kontaktieren.
Verzeichnisse:
<?php
/*****************************************
*
* houseshop.php
* Author: Chaosmaker <webmaster@chaosonline.de>
* Version: 1.3
* Server: biosLoGD http://logd.chaosonline.de
*
* Features:
* - buy houses
* - sell own house
* - buy a building lot if required
*
*****************************************/
require_once('common.php');
checkday();
require_once('housefunctions.php');
page_header('Der Makler');
if (!empty($_GET['op'])) $op = $_GET['op'];
else $op = '';
switch ($op) {
case 'listhouses':
output('`c`bApartment kaufen/mieten`b`c`n`n');
// house selected
if (!empty($_GET['buy'])) {
// get house data
$sql = 'SELECT h.status, h.goldprice, h.gemprice, h.housename,
hc.defaultgoldprice, hc.defaultgemprice
FROM houses h
LEFT JOIN houseconfig hc USING(locid)
WHERE h.owner=0 AND hc.buy="1" AND h.houseid='.$_GET['buy'];
$result = db_query($sql);
if ($row = db_fetch_assoc($result)) {
if ($row['status']=='build') {
$goldprice = round(($row['defaultgoldprice'] - $row['goldprice'])*2/3);
$gemprice = round(($row['defaultgemprice'] - $row['gemprice'])*2/3);
}
else {
$goldprice = round(($row['defaultgoldprice'] + $row['goldprice'])*2/3);
$gemprice = round(($row['defaultgemprice'] + $row['gemprice'])*2/3);
}
if ($session['user']['gold']<$goldprice || $session['user']['gems']<$gemprice) {
output('`IDer Makler schaut dich skeptisch an und weist noch einmal auf den Preis der Wohnung hin.
Vielleicht solltest du ihn dir auch noch einmal genauer ansehen...');
}
else {
// delete old keys
$sql = 'DELETE FROM items WHERE class="Schlüssel" AND value1='.$_GET['buy'];
db_query($sql);
addnews("`}".$session['user']['name']."`Ü hat das Apartment `}{$row['housename']}`Ü gekauft.");
output("`I`bGlückwunsch!`b Du hast das Apartment gekauft.");
$session['user']['house'] = $_GET['buy'];
if ($row['status']!='build') {
$session['user']['housekey'] = $_GET['buy'];
output("Du bekommst `b".getsetting('newhousekeys',10)."`b Schlüssel überreicht, von denen du ".(getsetting('newhousekeys',10)-1)." an andere weitergeben kannst und besitzt nun deine eigene gemütliche Wohnung.");
// add new keys for the house
$sql = '';
for ($i=1;$i<getsetting('newhousekeys',10);$i++) {
$sql .= ",('Hausschlüssel',".$session['user']['acctid'].",'Schlüssel',{$_GET['buy']},$i,0,0,'Schlüssel für Apartment Nummer {$_GET['buy']}')";
}
if ($sql!='') {
$sql = 'INSERT INTO items (name,owner,class,value1,value2,gold,gems,description) VALUES '.substr($sql,1);
db_query($sql);
if (db_affected_rows(LINK)==0) output("`ÀFehler`†: Dein Inventar konnte nicht aktualisiert werden! Bitte benachrichtige den Admin.");
}
}
// update house
if ($row['status']=='sell') $row['status'] = 'ready';
$sql = 'UPDATE houses SET owner='.$session['user']['acctid'].',status="'.$row['status'].'" WHERE houseid='.$_GET['buy'];
db_query($sql);
$session['user']['gems'] -= $gemprice;
$session['user']['gold'] -= $goldprice;
// kill possible commentary
$sql = 'DELETE FROM commentary WHERE section="house-'.$session['user']['specialmisc']['houseid'].'" OR section="private-'.$session['user']['specialmisc']['houseid'].'"';
db_query($sql);
}
}
else {
output('`ISo ein Pech - da war wohl jemand schneller als du!');
}
}
else {
// get all abandoned houses
$sql = 'SELECT h.houseid, h.status, h.goldprice, h.gemprice, h.housename,
hc.locname, hc.defaultgoldprice, hc.defaultgemprice
FROM houses h
LEFT JOIN houseconfig hc USING(locid)
WHERE h.owner=0 AND hc.buy="1"
ORDER BY h.locid ASC, h.houseid ASC';
$result = db_query($sql);
if (db_num_rows($result)==0) {
output('`ILeider sind derzeit keine Apartments frei.');
}
else {
output('`IDu schaust dir die Zettel an, auf denen Apartments angeboten werden. Ob da
wohl was für dich dabei ist?`n');
while ($row = db_fetch_assoc($result)) {
output('<table border="0"><tr class="trhead"><td colspan="2">',true);
output($row['housename']);
output('</td></tr><tr class="trlight"><td>',true);
output('Standort:');
output('</td><td>',true);
output($row['locname'],true);
output('</tr><tr class="trdark"><td>',true);
output('Apartmentnummer:');
output('</td><td>',true);
output($row['houseid']);
output('</tr><tr class="trlight"><td>',true);
output('Wohnungsname:');
output('</td><td>',true);
output($row['housename']);
output('</tr><tr class="trdark"><td>',true);
output('Status:');
output('</td><td>',true);
if ($row['status']=='build') $status = 'Bauruine';
elseif ($row['status']=='ready') $status = 'verlassen';
else $status = 'wie neu';
output($status);
output('</tr><tr class="trlight"><td>',true);
output('Preis:');
output('</td><td>',true);
if ($row['status']=='build') {
$goldprice = round(($row['defaultgoldprice'] - $row['goldprice'])*2/3);
$gemprice = round(($row['defaultgemprice'] - $row['gemprice'])*2/3);
}
else {
$goldprice = round(($row['defaultgoldprice'] + $row['goldprice'])*2/3);
$gemprice = round(($row['defaultgemprice'] + $row['gemprice'])*2/3);
}
output('`†'.$goldprice.' ¥en`I, `É'.$gemprice.' Edelsteine`I');
output('</tr><tr class="trdark"><td>',true);
output('');
output('</td><td>',true);
output('<a href="houseshop.php?op=listhouses&buy='.$row['houseid'].'">kaufen</a>',true);
output('</td></tr></table><br>',true);
addnav('','houseshop.php?op=listhouses&buy='.$row['houseid']);
}
}
}
addnav('Zurück zum Maklerbüro','houseshop.php');
break;
case 'buylot':
output('`c`bBaugenehmigung beantragen`b`c`n`n');
// get houses without owner
$sql = 'SELECT houseconfig.locname, houseconfig.defaultgoldprice, houseconfig.defaultgemprice, houseconfig.buildprice_increase, houses.locid AS hloc, COUNT(*) AS zahl
FROM houseconfig
LEFT JOIN houses ON houses.locid=houseconfig.locid AND houses.owner=0
WHERE houseconfig.locid="'.$_GET['where'].'"
GROUP BY houseconfig.locid';
$result = db_query($sql);
$row = db_fetch_assoc($result);
if ($row['hloc']>0) {
$emptyhouses = $row['zahl'];
}
else {
$emptyhouses = 0;
}
$faktor = $row['buildprice_increase']/100;
$goldprice = round($row['defaultgoldprice']*(1+$emptyhouses*$faktor));
$gemprice = round($row['defaultgemprice']*(1+$emptyhouses*$faktor));
$sql = 'INSERT INTO houses (owner, status, goldprice, gemprice, housename, locid)
VALUES ('.$session['user']['acctid'].',"build",'.$goldprice.','.$gemprice.',"'.$session['user']['login'].'s Haus",'.$_GET['where'].')';
db_query($sql);
$houseid = db_insert_id(LINK);
$session['user']['house'] = $houseid;
output('Der alte Mann händigt dir ein Papier aus, laut dem du von nun an der Besitzer des
Grundstücks Nummer '.$houseid.' bist. Dein Haus wird unter dem Namen
"`b'.$session['user']['login'].'s Haus`b" eingetragen. Du kannst den Namen allerdings
später auch noch gegen eine geringe Gebühr ändern.');
addnav('Zurück zum Bauamt','houseshop.php');
break;
case 'sellhouse':
output('`c`bWohnungsverkauf`b`c`n`n');
// get worth of own house and installed modules
$sql = 'SELECT houses.locid, status, housename, goldprice, gemprice, defaultgoldprice, defaultgemprice, buildprice_increase, sell
FROM houses
LEFT JOIN houseconfig USING(locid)
WHERE houseid='.$session['user']['house'];
$result = db_query($sql);
$row = db_fetch_assoc($result);
$faktor = $row['buildprice_increase']/100;
// get houses without owner
$sql = 'SELECT COUNT(*) AS zahl
FROM houses
WHERE locid="'.$row['locid'].'" AND owner=0';
$result = db_query($sql);
$row2 = db_fetch_assoc($result);
$emptyhouses = $row2['zahl'];
if ($row['status']!='build') {
$sellgoldprice = max(1,round(($row['goldprice']+$row['defaultgoldprice'])/3 * (1-$emptyhouses*$faktor)));
$sellgemprice = max(1,round(($row['gemprice']+$row['defaultgemprice'])/3 * (1-$emptyhouses*$faktor)));
$status = 'sell';
}
else {
$sellgoldprice = max(1,round(($row['defaultgoldprice']-$row['goldprice'])/3 * (1-$emptyhouses*$faktor)));
$sellgemprice = max(1,round(($row['defaultgemprice']-$row['gemprice'])/3 * (1-$emptyhouses*$faktor)));
$status = 'build';
}
$housename = $row['housename'];
if ($row['sell']==0) {
output('`IDer Makler weist dich darauf hin, dass du nicht berechtigt bist, dein Apartment zu
verkaufen. Du kannst deine Enttäuschung kaum verbergen.');
addnav('Zurück zum Maklerbüro','houseshop.php');
}
elseif (!empty($_GET['sell'])) {
// sell house
$houseid = $session['user']['house'];
$session['user']['house'] = $session['user']['housekey'] = 0;
$session['user']['gold'] += $sellgoldprice;
$session['user']['gems'] += $sellgemprice;
$sql = 'UPDATE houses SET owner=0, status="'.$status.'" WHERE houseid='.$houseid;
db_query($sql);
output('`IDu unterzeichnest den Kaufvertrag und lässt dir die `†'.$sellgoldprice.'
¥en`I sowie `É'.$sellgemprice.' Edelsteine`I auszahlen.');
// if treasury module installed, pay off...
if ($mid = module_builtin('treasury',$houseid)) {
$goldinhouse = (int)getmoduledata($mid,'gold',$houseid);
$gemsinhouse = (int)getmoduledata($mid,'gems',$houseid);
$sql = 'SELECT owner FROM items WHERE value1='.$houseid.' AND class="Schlüssel"
AND owner!=0 AND owner!='.$session['user']['acctid'];
$result = db_query($sql);
$keys = db_num_rows($result)+1;
$goldgive = floor($goldinhouse/$keys);
$gemsgive = floor($gemsinhouse/$keys);
// get own gold
$session['user']['gold'] += $goldgive;
$session['user']['gems'] += $gemsgive;
// pay gold to other players
while ($row = db_fetch_assoc($result)) {
$sql = "UPDATE accounts SET goldinbank=goldinbank+$goldgive,gems=gems+$gemsgive WHERE acctid=".$row['owner'];
db_query($sql);
systemmail($row['owner'],"`}Apartment verkauft!`0","`&{$session['user']['name']}`í hat das Apartment `b$housename`b`í verkauft. Du bekommst `†$goldgive ¥en`í sowie `É$gemsgive Edelsteine`í aus dem gemeinsamen Schatz ausbezahlt!");
}
// delete gold from house
setmoduledata($mid,'gold','0',$houseid);
setmoduledata($mid,'gems','0',$houseid);
output('`nJeder Bewohner bekommt seinen Anteil von `†'.$goldgive.' ¥en`I und `É'.$gemsgive.' Edelsteine`I aus dem
gemeinsamen Schatz ausgezahlt.');
}
else {
$sql = 'SELECT owner FROM items WHERE value1='.$houseid.' AND class="Schlüssel"
AND owner!=0 AND owner!='.$session['user']['acctid'];
$result = db_query($sql);
while ($row = db_fetch_assoc($result)) {
systemmail($row['owner'],"`}Apartment verkauft!`0","`&{$session['user']['name']}`í hat das Apartment `b$housename`b`í verkauft!");
}
}
$sql = 'DELETE FROM items WHERE value1='.$houseid.' AND class="Schlüssel"';
db_query($sql);
addnav('Zurück zum Maklerbüro','houseshop.php');
}
else {
output('`IDu fragst den Makler, wieviel er dir für dein Apartment geben würde.`n
`¹"Lassen sie mich mal nachsehn... ah, hier hab ichs! Sind harte
Zeiten heutzutage... aber weil Sie es sind, geb ich Ihnen `†'.$sellgoldprice.'
¥en`¹ und `É'.$sellgemprice.' Edelsteine`¹ für die Wohnung."`I`n
Irgendwie hast du das Gefühl, gar kein so gutes Geschäft zu machen - aber
wen wundert\'s, wenn es keine Konkurrenz gibt?');
addnav('Angebot annehmen','houseshop.php?op=sellhouse&sell=1');
addnav('Lieber ablehnen','houseshop.php');
}
break;
default:
output('`c`bDas Maklerbüro`b`c`n`n');
output('`IEin Mann mittleren Alters mit einer Brille sitzt an einem großen Schreibtisch
aus Eichenholz und schlürft in aller Ruhe seinen Kaffee.`n
Als du den Raum betrittst, schaut er auf und begrüßt dich mit einem aalglatten `¹"Guten Tag, sie wünschen?"`I.
Erwartungsvoll schaut er dich danach an, ohne zweifel wittert er ein gutes Geschäft...`n`n');
if ($session['user']['house']>0) {
output('An der Wand hängen einige Angebote, aber da du bereits ein Apartment besitzt,
interessierst du dich nicht dafür.');
}
else {
output('An der Wand hängen einige Angebote, die du dir vielleicht mal genauer ansehen
solltest.`n');
addnav('Angebote ansehen','houseshop.php?op=listhouses');
}
output('Außerdem siehst du dort einen Zettel, auf dem in großen Buchstaben steht:`n
`¹Kaufe jedes Apartment zu einem angemessenen Preis. Bei Interesse einfach unverbindlich nachfragen!`I
');
if ($session['user']['house']>0) {
if ($session['user']['housekey']==0) {
output('`nBevor dein Haus fertig gebaut ist, wird er es aber kaum haben wollen');
}
else {
addnav('Apartment verkaufen','houseshop.php?op=sellhouse');
}
}
if (getsetting('startbuild',1)==0 && $session['user']['house']==0 && ($session['user']['dragonkills']>getsetting('mindkbuild',1) || $session['user']['dragonkills']==getsetting('mindkbuild',1) && $session['user']['level']>=getsetting('minlevelbuild',5))) {
// get houses without owner
$sql = 'SELECT houseconfig.locid, houseconfig.locname, houseconfig.defaultgoldprice, houseconfig.defaultgemprice, houseconfig.buildprice_increase, houses.locid AS hloc, COUNT(*) AS zahl
FROM houseconfig
LEFT JOIN houses ON houses.locid=houseconfig.locid AND houses.owner=0
WHERE houseconfig.build="1"
GROUP BY houseconfig.locid
ORDER BY houseconfig.locname ASC';
$result = db_query($sql);
$empty = false;
output('Da du den Makler offenbar recht hilflos ansiehst, erklärt er dir: `¹"Wenn sie
ein Apartment kaufen wollen, dann sind sie hier vollkommen richtig. Sofern sie das nötige
Kleingeld haben, versteht sich..."`I`n');
if (db_num_rows($result)==1) {
$row = db_fetch_assoc($result);
if ($row['hloc']>0) {
$emptyhouses = $row['zahl'];
if ($emptyhouses > 0) $empty = true;
}
else {
$emptyhouses = 0;
}
$faktor = $row['buildprice_increase']/100;
/*output ('Er hält dir ein Formular hin, aus dem hervorgeht, dass du für den Bau
nicht weniger als `†'.round($row['defaultgoldprice']*(1+$emptyhouses*$faktor)).'
Gold`I sowie `É'.round($row['defaultgemprice']*(1+$emptyhouses*$faktor)).' Edelsteine`I
berappen musst. Natürlich nicht auf einmal, sondern in Raten während des Baus.');
addnav('Baugenehmigung beantragen','houseshop.php?op=buylot&where='.$row['locid']);*/
}
else {
output('Er hält dir ein Formular hin, aus dem folgende Preise hervorgehen:');
output('<table border="0">',true);
while ($row = db_fetch_assoc($result)) {
if ($row['hloc']>0) {
$emptyhouses = $row['zahl'];
if ($emptyhouses > 0) $empty = true;
}
else {
$emptyhouses = 0;
}
$faktor = $row['buildprice_increase']/100;
output('<tr><td>',true);
output($row['locname'],true);
output('</td><td>',true);
output('`†'.round($row['defaultgoldprice']*(1+$emptyhouses*$faktor)).' ¥en`I, `É'.round($row['defaultgemprice']*(1+$emptyhouses*$faktor)).' Edelsteine`I');
output('</td><td>',true);
output('<a href="houseshop.php?op=buylot&where='.$row['locid'].'">Baugenehmigung beantragen</a>',true);
addnav('','houseshop.php?op=buylot&where='.$row['locid']);
output('</td></tr>',true);
}
output('</table>',true);
}
}
break;
}
addnav('Zurück zur Stadthalle','stadthalle.php');
output('`n`n');
output('`c`b© by <a href="http://logd.chaosonline.de" target="_blank">Chaosmaker</a>`b`c',true);
page_footer();
?>