anpera.net
http://anpera.homeip.net/phpbb3/

Rassen per Datei.
http://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=5181
Seite 1 von 1

Autor:  MySql [ Fr 13 Aug, 2010 22:41 ]
Betreff des Beitrags:  Rassen per Datei.

Guten Abend,

ich habe heute Nachmittag beim durchstöbern meiner alten Festplatte ein paar alte 'Arbeiten' von mir gefunden. Unter anderem, eine 'Arbeit' in der ich die Rassen aus der Datenbank und aus der newday.php genommen habe. Nun, nicht komplett aus der newday.php, lediglich die Verwaltung dieser.

Vielleicht mag diese 'Arbeit' nicht jeden ansprechen, muss sie aber auch nicht. Jeder hat ja bekanntlich einen anderen Geschmack. :)

Vorab ein kurzer Hinweis: Die Änderungen die man vornehmen muss, sind nicht gerade wenig.. Daher die ID's der Rassen wegfallen und lediglich deren Namen und auf Wunsch auch der Cname (Color-Name) in der Datenbank gespeichert werden.

Dann fangen wir einfach mal mit der Datenbankänderung an:

$this->bbcode_second_pass_code('', 'ALTER TABLE `accounts` CHANGE `race` `race` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;
ALTER TABLE accounts ADD crace VARCHAR(255) NOT NULL;')

Für ein bereits vorhandenes LotGD:

$this->bbcode_second_pass_code('', 'UPDATE accounts SET race='';')

Nun die Änderungen:

    Zu ändernde Dateien:
  • forest.php
  • inn.php
  • newday.php
  • superuser.php
  • train.php
  • academy.php
  • gardens.php
  • rebirth.php
  • list.php
  • bio.php
  • special/goldmine.php
  • special/cookies.php
  • special/darkhorse.php
  • special/tempel.php
  • special/sacrificealtar.php

Suche in der Datei forest.php folgende Codestelle:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']==4) $badguy['creaturegold']*=1.1;
} else {
if ($session['user']['race']==4) $badguy['creaturegold']*=1.2;')

Und ersetze sie mit folgender:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']=='Zwerg') $badguy['creaturegold']*=1.1;
} else {
if ($session['user']['race']=='Zwerg') $badguy['creaturegold']*=1.2;')

Speichern und schließen.

Suche nun in der Datei inn.php folgende Codestelle:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']==1) $session['user']['attack']--;
if ($session['user']['race']==2) $session['user']['defence']--;
if ($session['user']['race']==5) $session['user']['maxhitpoints']--;
$session['user']['race']=0;')

Ersetze sie mit folgender:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']=='Troll') $session['user']['attack']--;
if ($session['user']['race']=='Elf') $session['user']['defence']--;
if ($session['user']['race']=='Echse') $session['user']['maxhitpoints']--;
$session['user']['race']='';')

Suche weiter:

$this->bbcode_second_pass_code('', 'if ($session[user][race]==4){')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session[user][race]=='Zwerg'){')

Öffne die train.php und suche:

$this->bbcode_second_pass_code('', 'if ($master[creaturename] == "Gadriel the Elven Ranger" && $session[user][race] == 2) {')

Ersetze den Code mit:

$this->bbcode_second_pass_code('', 'if ($master[creaturename] == "Gadriel the Elven Ranger" && $session[user][race] == 'Elf') {')

Öffne nun die academy.php und suche:

$this->bbcode_second_pass_code('', 'output("`vDurch schwere und reich verzierte Holztüren betrittst du den Zauberladen der Akademie. Hier bietet ein älterer Zauberer die Werke verschiedenster Akademie-Magier an, denen es gelungen ist, selbst magisch unbegabten ".($races[$session[user][race]])."en wie dir die Anwendung ihrer Zauber zu ermöglichen.");')

Ersetze sie durch:

$this->bbcode_second_pass_code('', 'output("`vDurch schwere und reich verzierte Holztüren betrittst du den Zauberladen der Akademie. Hier bietet ein älterer Zauberer die Werke verschiedenster Akademie-Magier an, denen es gelungen ist, selbst magisch unbegabten ".$session['user']['race']."en wie dir die Anwendung ihrer Zauber zu ermöglichen.");')

Öffne jetzt die gardens.php und suche folgende Codestelle:

$this->bbcode_second_pass_code('', '} else if (($session[user][race]==2 && $row[race]==4) || ($session[user][race]==4 && $row[race]==2)){
output("Du wartest im Garten auf `6$row[name]`0 und beobachtest ".($session[user][sex]?"ihn":"sie")." eine Weile. Bei näherer Betrachtung stellst du aber fest, dass Elfen und Zwerge vielleicht doch niemals zusammen passen werden.");')

Ersetze die Stelle durch:

$this->bbcode_second_pass_code('', '} else if (($session[user][race]=='Elf' && $row[race]=='Zwerg') || ($session[user][race]=='Zwerg' && $row[race]=='Elf')){
output("Du wartest im Garten auf `6$row[name]`0 und beobachtest ".($session[user][sex]?"ihn":"sie")." eine Weile. Bei näherer Betrachtung stellst du aber fest, dass Elfen und Zwerge vielleicht doch niemals zusammen passen werden.");')

Suche weiter:

$this->bbcode_second_pass_code('', '$sql = "SELECT acctid,name,sex,level,race,login,marriedto,charisma FROM accounts WHERE ')

Ersetze durch:

$this->bbcode_second_pass_code('', '$sql = "SELECT acctid,name,sex,level,crace,login,marriedto,charisma FROM accounts WHERE ')

Suche weiter:

$this->bbcode_second_pass_code('', 'output($colraces[$row['race']]);')

Ersetze durch:

$this->bbcode_second_pass_code('', 'output($row['crace']);')

Öffne nun die rebirth.php und suche: (2x)

$this->bbcode_second_pass_code('', '$session[user][race]=0;')

Ersetze 2x durch:

$this->bbcode_second_pass_code('', '$session[user][race]='';')

Öffne die list.php und suche: (2x)

$this->bbcode_second_pass_code('', '2x laston,loggedin,lastip,uniqueid,race')

Ersetze 2x durch:

$this->bbcode_second_pass_code('', 'laston,loggedin,lastip,uniqueid,crace')

Suche weiter:

$this->bbcode_second_pass_code('', 'output($colraces[$row['race']]);')

Ersetze durch:

$this->bbcode_second_pass_code('', 'output($row['crace']);')

Öffne die bio.php und suche:

$this->bbcode_second_pass_code('', 'output("`^Rasse: `@{$races[$row['race']]}`n");')

Ersetze durch:

$this->bbcode_second_pass_code('', 'output("`^Rasse: `@".$row['race']."`n");')

Folgende Änderungen sind für den Ordner Special/.

Öffne die Datei special/goldmine.php und suche:

$this->bbcode_second_pass_code('', 'if ($session['user']['race'] != 4) {')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session['user']['race'] != 'Zwerg') {')

Öffne nun die Datei special/cookies.php und suche:

$this->bbcode_second_pass_code('', 'if ((int)$session[user][race] == 5)')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ((int)$session[user][race] == 'Echse')')

Suche weiter:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 5) $rand = e_rand(1,6); // Echsen kriegen eher schlechte Kekse')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 'Echse') $rand = e_rand(1,6); // Echsen kriegen eher schlechte Kekse')

Suche weiter:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 1) {')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 'Troll') {')

Suche weiter:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 4) {')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session[user][race] == 'Zwerg') {')

Öffne nun die Datei special/darkhorse.php und suche:

$this->bbcode_second_pass_code('', 'switch($row['race']){
case 0:
output("`7Unbekannt`0");
break;
case 1:
output("`2Troll`0");
break;
case 2:
output("`^Elf`0");
break;
case 3:
output("`0Mensch`0");
break;
case 4:
output("`#Zwerg`0");
break;
case 5:
output("`5Echse`0");
break;
}')

Ersetze durch:

$this->bbcode_second_pass_code('', 'switch($row['race']){
case '':
case 'Unknown':
case 'Undefined':
output("`7Unbekannt`0");
break;
case 'Troll':
output("`2Troll`0");
break;
case 'Elf':
output("`^Elf`0");
break;
case 'Mensch':
output("`0Mensch`0");
break;
case 'Zwerg':
output("`#Zwerg`0");
break;
case 'Echse':
output("`5Echse`0");
break;
}')

Öffne nun die Datei special/tempel.php und suche:

$this->bbcode_second_pass_code('', 'addnews("`%".$session[user][name]."`7 wurde in einem Tempel von $gott_charm zu einem besser aussehenden ".($races[$session[user][race]])." `7gemacht.");')

Und ersetze durch:

$this->bbcode_second_pass_code('', 'addnews("`%".$session[user][name]."`7 wurde in einem Tempel von $gott_charm zu einem besser aussehenden ".$session[user][race]." `7gemacht.");')

Öffne im betreffendem Ordnern nun die letzte Datei special/sacrificealtar.php und suche:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']==4) $badguy['creaturegold']*=1.1;
} else {
if ($session['user']['race']==4) $badguy['creaturegold']*=1.2;')

Ersetze durch:

$this->bbcode_second_pass_code('', 'if ($session['user']['race']=='Zwerg') $badguy['creaturegold']*=1.1;
} else {
if ($session['user']['race']=='Zwerg') $badguy['creaturegold']*=1.2;')

Öffne nun im Hauptordner die Datei superuser.php und füge nach

$this->bbcode_second_pass_code('', 'if ($session[user][superuser]>=3) addnav("Stalltier Editor","mounts.php");')

Füge danach ein:

$this->bbcode_second_pass_code('', 'if ($session[user][superuser]>=3) addnav("Rasseneditor","races.php?editorStep=show");')

Öffne nun die letzte Datei newday.php
Füge am Anfang der Datei ein:

$this->bbcode_second_pass_code('', '$u = $session['user'];')

Suche:

$this->bbcode_second_pass_code('', '}else if ((int)$session['user']['race']==0){
page_header("Ein wenig über deine Vorgeschichte");
if ($_GET['setrace']!=""){
$session['user']['race']=(int)($_GET['setrace']);
switch($_GET['setrace']){
case "1":
$session['user']['attack']++;
output("`2Als Troll warst du immer auf dich alleine gestellt. Die Möglichkeiten des Kampfs sind dir nicht fremd.`n`^Du erhältst einen zusätzlichen Punkt auf deinen Angriffswert!");
break;
case "2":
$session['user']['defence']++;
output("`^Als Elf bist du dir immer allem bewusst, was um dich herum passiert. Nur sehr wenig kann dich überraschen.`nDu bekommst einen zusätzlichen Punkt auf deinen Verteidigungswert!");
break;
case "3":
output("`&Deine Größe und Stärke als Mensch erlaubt es dir, Waffen ohne große Anstrengungen zu führen und dadurch länger durchzuhalten, als andere Rassen.`n`^Du hast jeden Tag einen zusätzlichen Waldkampf!");
break;
case "4":
output("`#Als Zwerg fällt es dir leicht, den Wert bestimmter Güter besser einzuschätzen.`n`^Du bekommst mehr Gold durch Waldkämpfe!");
break;
case "5":
output("`5Als Echsenwesen hast du durch deine Häutungen einen klaren gesundheitlichen Vorteil gegenüber anderen Rassen.`n`^Du startest mit einem permanenten Lebenspunkt mehr!");
$session['user']['maxhitpoints']++;
break;
}
addnav("Weiter","newday.php?continue=1$resline");
if ($session['user']['dragonkills']==0 && $session['user']['level']==1){
addnews("`#{$session[user][name]} `#hat unsere Welt betreten. Willkommen!");
}
}else{
output("Wo bist du aufgewachsen?`n`n");
output("<a href='newday.php?setrace=1$resline'>In den Sümpfen von Glukmoore</a> als `2Troll`0, auf dich alleine gestellt seit dem Moment, als du aus der lederartigen Hülle deines Eis geschlüpft bist und aus den Knochen deiner ungeschlüpften Geschwister ein erstes Festmahl gemacht hast.`n`n",true);
output("<a href='newday.php?setrace=2$resline'>Hoch über den Bäumen</a> des Waldes Glorfindal, in zerbrechlich wirkenden, kunstvoll verzierten Bauten der `^Elfen`0, die so aussehen, als ob sie beim leisesten Windhauch zusammenstürzen würden und doch schon Jahrhunderte überdauern.`n`n",true);
output("<a href='newday.php?setrace=3$resline'>Im Flachland in der Stadt Romar</a>, der Stadt der `&Menschen`0. Du hast immer nur zu deinem Vater aufgesehen und bist jedem seiner Schritte gefolgt, bis er auszog den `@Grünen Drachen`0 zu vernichten und nie wieder gesehen wurde.`n`n",true);
output("<a href='newday.php?setrace=4$resline'>Tief in der Unterirdischen Festung Qexelcrag</a>, der Heimat der edlen und starken `#Zwerge`0, deren Verlangen nach Besitz und Reichtum in keinem Verhältnis zu ihrer Körpergrösse steht.`n`n",true);
output("<a href='newday.php?setrace=5$resline'>In einem Erdloch in der öden Landschaft</a> weit außerhalb jeder Siedlung bist du als `5Echsenwesen`0 aus deinem Ei geschlüpft. Artverwandt mit den Drachen hast du es nicht leicht in dieser Welt.`n`n",true);
addnav("Wähle deine Rasse");
addnav("`2Troll`0","newday.php?setrace=1$resline");
addnav("`^Elf`0","newday.php?setrace=2$resline");
addnav("`&Mensch`0","newday.php?setrace=3$resline");
addnav("`#Zwerg`0","newday.php?setrace=4$resline");
addnav("`5Echse`0","newday.php?setrace=5$resline");
addnav("","newday.php?setrace=1$resline");
addnav("","newday.php?setrace=2$resline");
addnav("","newday.php?setrace=3$resline");
addnav("","newday.php?setrace=4$resline");
addnav("","newday.php?setrace=5$resline");
}
}')

Ersetze den Code vollständig mit:

$this->bbcode_second_pass_code('', '}else if( $u['race'] == '' || $u['race'] == 'Unknown' || is_numeric($u['race']) ) {

switch( $_GET['setRace'] ) {

case 0:

page_header('Ein wenig über deine Vorgeschichte');

output('Wähle bitte deine Herkunft bzw. Rasse.`n`n');

$d = dir('Races');

while( false !== ($e = $d->read()) ) {

if( strpos($e, '.race') === false ) continue;
if( substr($e,0,1) == '.' ) continue;

$mySpliter = explode('_',$e);

if( $mySpliter[0] ) {

$i++;
$myData[$i] = unserialize(file_get_contents('Races/'.$e));
$myFiles[$i] = substr($e,2,-5);

}

}

addnav('Rassen');

if( count($myData) > 0 ) {

$i=0;
while( $i < count($myData) ) {

$i++;

if( $u['dragonkills'] >= $myData[$i][0]['Dk'] ) {

if( !getsetting('colorrace_newday',false) ) {

addnav($myData[$i]['Name'],'newday.php?setRace=1&file='.$myFiles[$i].$resline);

} else {

addnav($myData[$i]['cName'],'newday.php?setRace=1&file='.$myFiles[$i].$resline);

}

addnav('','newday.php?setRace=1&file='.$myFiles[$i].$resline);

$myExplode = explode('<LINK>',$myData[$i]['Desc']);

output('<a href="newday.php?setRace=1&file='.$myFiles[$i].$resline.'">'.$myExplode[0].'</a>'.$myExplode[1].'`n`n',true);

}

}

} else {

addnav('Undefined','newday.php?setRace=1&file=undefined'.$resline);
output('Leider sind derzeit keine Rassen verfügbar. Wende Dich bitte an einen Systemadministratoren!');

}

addnav('Aktualisieren','newday.php');

break;

case 1:

if( $_GET['file'] == 'undefined' ) {

page_header('Keine Rassen verfügbar!');

output('Leider sind keine Rassen verfügbar. - Wende Dich bitte an einen Systemadministrator.');
$session['user']['race'] = $_GET['file'];

} else {

$race = unserialize(file_get_contents('Races/1_'.$_GET['file'].'.race'));

page_header('Die '.$race['Plural']);

output($race['Final_Desc'],true);
$session['user']['race'] = $race['Name'];
$session['user']['crace'] = $race['cName'];

if( $race['Bonus_Feld'] !== FALSE && is_numeric($race['Bonus']) ) {

$session['user'][$race['Bonus_Feld']] += $race['Bonus'];

}

}

if( $session['user']['dragonkills'] == 0 && $session['user']['level'] = 1 ) {

addnews('`#'.$session[user][name].' `#hat unsere Welt betreten. Willkommen!');

}

addnav('Aktionen');
addnav('Weiter','newday.php?continue=1'.$resline);

break;
}

}')

Nun noch das Archiv runterladen und den Ordner Races mit den Dateien in den Hauptordner laden und die Datei races.php ebenso.

Feedback gern' gesehen.

Liebe Grüße,
Joel aka MySQL.

Nachtrag:

Der Ordner Races muss Schreibrechte besitzen und die neu erstellten Rassen werden Standardmäßig auf 'deaktiviert' gesetzt.

Dateianhänge:
Races.zip [4.81 KIB]
49-mal heruntergeladen
Races.rar [4.57 KIB]
47-mal heruntergeladen

Autor:  Auric [ Fr 13 Aug, 2010 23:11 ]
Betreff des Beitrags:  Re: Rassen per Datei.

Wow, eine riesige Liste von Änderungen... aber warum? Du beschreibst zwar das du Inhalt aus den Dateien heraus ziehst, aber was soll der Sinn dessen sein?

Zumal diese Änderung architektonisch rückschrittig ist. Die Handhabe über Schlüssel und Zusammenfassenden Arrays ist wesentlich flexibler, falls einmal eine Rasse umbenannt werden soll oder ähnliches.

Das soll jetzt kein persönliches Angriff sein, aber diese Modifikation erscheint mir schlicht unsinnig.

Auric

Autor:  MySql [ Sa 14 Aug, 2010 11:24 ]
Betreff des Beitrags:  Re: Rassen per Datei.

Hay. :)

Stimmt daran hatte ich gar nicht gedacht. Was zumindest die Namensänderung einer Rasse angeht. Hier könnte man in der common.php noch mal extra ein Array platzieren, welches die 'Ids' der einzelnen Rassen festhält und welches bei einer Rassenumbenennenug abgeändert werden müsste.

$this->bbcode_second_pass_code('', '$arr = array('Troll' => 1,'Elf' => 2,'Mensch' => 3,'Zwerg' => 4,'Echse' => 5);')

Vielleicht erstellt man dann noch eine Variable, in der man direkt den Wert der Rasse speichert.

$this->bbcode_second_pass_code('', '$var = $arr[$session['user']['race']];')

Demnach müsste man nun nur noch die Variable in einer If-Abfrage angegeben und dann würde es 'fast' o.K sein.

Autor:  Eliwood [ Sa 14 Aug, 2010 11:35 ]
Betreff des Beitrags:  Re: Rassen per Datei.

Und wenn man das so macht, dann hat man genau... keinen Vorteil durch deine Modifikation. Denn man müsste beim hinzufügen einer weiteren Rasse immernoch viele Dateien bearbeiten.

Autor:  Bathory [ So 15 Aug, 2010 21:02 ]
Betreff des Beitrags:  Re: Rassen per Datei.

:bash:

Ein gutes caching system (Memcache, APC und co) oder notfalls ein cache on disk wäre hier ne sinnvolle lösung.

Das hier ist naja.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/