anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 09 Jun, 2025 22:25

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do 21 Mai, 2009 08:49 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
*deleted*


Zuletzt geändert von Bathory am Di 26 Jun, 2012 15:35, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 10:19 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Wow Bathory, du bist und bleibst der Herr der Klassen!

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 11:50 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 16 Jul, 2005 22:40
Beiträge: 693
Wohnort: /var/server/home/castle
Geschlecht: Männlich
LoGD: http://www.kokoto.de/
Skype: Apfelschokowodkakekskuchen
das ist der hammer O_O, die DS'ler werden davon bestimmt begeistert sein ;) Bathory hats halt drauf! ^^


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 12:27 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
Danke fürs Lob, aber die Klasse ist längst noch nicht fertig :o

Hab btw eine neue Version ins erste Post gepostet.
Jetzt ist der Aufbau schlanker und die erweiterbarkeit der CharStat um einiges einfacher.

ToDo: In der Prefs.php das ein-/ausblenden und umsortieren mit JS realisieren.
Dann sollte sie fertig sein =)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 12:57 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 16 Jul, 2005 22:40
Beiträge: 693
Wohnort: /var/server/home/castle
Geschlecht: Männlich
LoGD: http://www.kokoto.de/
Skype: Apfelschokowodkakekskuchen
oh mann, du sagst das so, als wäre es das einfachste von der welt ~.~

meld dich mal wenn du arbeitslos bist XD ich stell dich als mein Lehrer ein O_o


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 13:23 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Hübsch Hübsch!
Nur verstehe ich nicht, warum du die einzelnen Elemente nicht ebenfalls gleich als Objekte realisierst - das dürfte den Code um einiges übersichtlicher machen als die tausend cases. Und für den absoluten Bling-Bling-Faktor könntest du noch versuchen, das ganze nicht per Auswahlfeld sondern als Drag&Drop zu realisieren (So beispielsweise - womöglich aber auch mit Alucards-DragDrop-Lib). Zu guter Letzt könnte man in der oben gelistet Funktion noch den global-Teil entrümpeln - dürfte ja nur noch $session benötigt werden.

Nun aber genug von meinem (hoffentlich konstruktiven) Gemäkel auf hohem Niveau.
Hut Ab!

Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 14:36 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
Auric hat geschrieben:
Hübsch Hübsch!
Nur verstehe ich nicht, warum du die einzelnen Elemente nicht ebenfalls gleich als Objekte realisierst - das dürfte den Code um einiges übersichtlicher machen als die tausend cases.


Bezieht sich das auf die alte Version oder auf die Neue?
Hab eigentlich den Switch/Case Aufbau verworfen. Diente eigentlich nur der ersten Orientierung.
War vllt ein Fehler das ich die erste Version schon hochgeladen hatte :D

Das mit der JS Version ist noch in der mache =)

Und Danke für die Kritik =) die brauche ich nämlich damit was brauchbares am Ende rauskommt.
Immo ist das noch eher rumgespiele :D die aus einer Idee die gestern Nacht entsprungen ist bei Atrahor.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 14:41 
Offline
Held
Held
Benutzeravatar

Registriert: Mi 10 Dez, 2008 17:10
Beiträge: 235
Wohnort: München
Geschlecht: Männlich
LoGD: läuft derzeit Lokal
wow ich werds auf jedenfall lokal bei mir testen und dir evtl. fehler direkt mitteilen...

Bathory hat geschrieben:
die aus einer Idee die gestern Nacht entsprungen ist bei Atrahor.

wie bitte? Oo Die Idee dazu ist gestern Nacht entstanden und schon dteht sowas wie da oben? oO

€dit:
also ich habs Lokal installiert und wie Du geschrieben hast, geht eine mehrfache Vergabe der Zahlen natürlich noch nicht (habs aber trotzdem versucht :D )

dadurch hat sich die letzte Nummer ausgeblendet und kann selbst durch das zurücksetzen der Charstat nicht wiederhergestellt werden

_________________
Hungrig in München? www.24lieferservice.de
___________________________________________________
spiele auch Du Quests of Gallendor (Welt 1 nur über Einladung möglich)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 21 Mai, 2009 22:44 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Öhm - ich habe einfach die Datei zum Zeitpunkt meines Posts heruntergeladen und eingestellt. Was das genau war darfst du dir selbst ausmalen. De Facto wäre meine Idee nur: Kategorien und Row jeweils als Objekte implementieren, die jeweils auf bestimme Unterklassen (online_only etc.) vererben. Dann kannst du die alle ganz stupide in einer Schleife handhaben. Müsste meines Wissens nach per Visitor arbeiten.

Grüße,
Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 01 Jun, 2009 22:10 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 02 Feb, 2009 21:11
Beiträge: 168
Geschlecht: Männlich
LoGD: salator.selfhost.de/lotgd
Ich fummel gerade an der freidefinierbaren Vitalinfo rum.
Feine Sache übrigens! Eine Woche vor deiner Veröffentlichung fragt mich eine Userin, dass genau dies eine feine Sache wäre, und ich sag noch "Nee, zu aufwändig" :D

Ich lese ja hier was von verschwundenen Zeilen, die durch falsche Sortierung entstehen sollen. Das kann ich so nicht nachvollziehen, aber man darf keine Nummer wählen die man eigentlich nicht hat. Also Besitz 1-7 ist falsch, das dürfte nur 1-5 sein. (dass Superuser dann doch 7 Optionen haben geht ja auch noch nicht)
Wenn man aber die Sortierung der Superuser-Optionen zulässt -die Nichtanzeige wird ja nur durch ein <tr style=" display:none;"> realisiert- funktioniert alles wieder.

_________________
if(date("ymmd")=="10050502") echo("Der alte Sack wird heute 40");


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 03 Jun, 2009 12:31 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
@Salator jep der Superuser teil ist noch "ausgeblendet" weil ich den Teil noch nicht angefangen hab.

Naja wenn man mehrfach die gleiche Zahl vergibt, versucht das Skript diesen "Fehler" zu beheben und dabei entstehen schon mal Zahlen die es im Array nicht gibt. Aber mit dem Javascript Sortable, kann das ja dann nicht mehr passieren, hatte nur noch keine Zeit da JS mäßig rumzufummeln :lol:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 04 Jun, 2009 10:04 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Kleiner Fehler wenn der anzuzeigende Wert "0" ist. Dann wird nämlich die ganze Zeile auf grund der empty Bedingung ausgeblendet.
Stattdessen nehme ich das hier
$this->bbcode_second_pass_code('', '
if(!$session['user']['alive'] && $val2['type'] == 1){}
else if($session['user']['alive'] && $val2['type'] == 2){}
else if(!$session['user']['superuser'] && $val2['su'] == true){}
else if(isset($val2['mindk']) && $session['user']['dragonkills'] < $val2['mindk']) {}
else if(is_null_or_empty($val2['value']) || adv_empty($this->arr_data[ $val2['value'] ]) ){}
else
{
$charstat.=$this->do_stat($key,$bit,$val2['title'],$this->arr_data[ $val2['value'] ],$val2['free']);
}
')

wobei adv_empty eben nur eben empty ohne "0" nachbildet:

$this->bbcode_second_pass_code('', '
function adv_empty($var)
{
$string = trim($var);
if(!is_numeric($var))
{
return empty($var);
}
return false;
}
')

Außerdem hab ich noch das Bedürfnis gehabt bestimmte Elemente erst ab X Drachenkills anzuzeigen und dynamisch Elemente "hinten dran" zu bappen, die eben immer ganz vorne oder ganz hinten stehen sollen und nicht ausblendbar sind. Die dynamisch hinzugefügten Dinge werden jedoch noch nicht angezeigt, weil der Charstat array ja aus den Prefs kommt und nicht beachtet dass etwas hinten dran kommt.
Ich häng mal meine Version an, vielleicht hat ja einer ne Idee. Alle bisherigen Funktionen sind aber immernoch voll funktionsfähig, nur der Aufruf muss jetzt
$this->bbcode_second_pass_code('', '
$CCharStats->initialize_data($CCharStats->arr_default,$data);
return $CCharStats->get_char_stats();
')
heissen.
:
$this->bbcode_second_pass_code('', '
<?php
/**
* Advanced CharStats
* @author Báthory rolandvgilead@web.de
* @version DS-E V/3.x
*/
class CCharStats
{
/**
* Enthält die Charstat Struktur
* @var array
*/
public $arr_default = array(
0 => array('Vital-Info',
array
(
array('title'=>'Name','type'=>3,'su'=>false,'free'=>false,'value'=>'name')
,array('title'=>'Lebenspunkte','type'=>1,'su'=>false,'free'=>false,'value'=>'hitpoints')
,array('title'=>'Seelenpunkte','type'=>2,'su'=>false,'free'=>false,'value'=>'soulpoints')
,array('title'=>'Runden','type'=>1,'su'=>false,'free'=>false,'value'=>'turns')
,array('title'=>'Gefallen','type'=>2,'su'=>false,'free'=>false,'value'=>'deathpower')
,array('title'=>'Schlossrunden','type'=>1,'su'=>false,'free'=>false,'mindk'=>10,'value'=>'castleturns')
,array('title'=>'Foltern','type'=>2,'su'=>false,'free'=>false,'value'=>'gravefights')
,array('title'=>'Stimmung','type'=>3,'su'=>false,'free'=>false,'value'=>'spirits')
,array('title'=>'Level','type'=>3,'su'=>false,'free'=>false,'value'=>'level')
,array('title'=>'Erfahrung','type'=>3,'su'=>false,'free'=>false,'value'=>'exp')
,array('title'=>'Angriff','type'=>1,'su'=>false,'free'=>false,'value'=>'atk')
,array('title'=>'Verteidigung','type'=>1,'su'=>false,'free'=>false,'value'=>'def')
,array('title'=>'Ansehen','type'=>1,'su'=>false,'free'=>false,'value'=>'repu')
,array('title'=>'Psyche','type'=>2,'su'=>false,'free'=>false,'value'=>'psy')
,array('title'=>'Geist','type'=>2,'su'=>false,'free'=>false,'value'=>'geist')
)
)
, 1 => array('Besitz',
array
(
array('title'=>'Gold','type'=>3,'su'=>false,'free'=>false,'value'=>'gold')
,array('title'=>'Edelsteine','type'=>3,'su'=>false,'free'=>false,'value'=>'gems')
,array('title'=>'Waffe','type'=>3,'su'=>false,'free'=>false,'value'=>'weapon')
,array('title'=>'Rüstung','type'=>3,'su'=>false,'free'=>false,'value'=>'armour')
,array('title'=>'Haustier','type'=>3,'su'=>false,'free'=>false,'value'=>'animal')
,array('title'=>'Debug','type'=>3,'su'=>true,'free'=>false,'value'=>'debug')
,array('title'=>'Quick Nav','type'=>3,'su'=>true,'free'=>true,'value'=>'quicknav')
)
)
, 2 => array('Profil und Info',
array
(
array('title'=>'Weiteres','type'=>3,'su'=>false,'free'=>false,'value'=>'profil')
,array('title'=>'Nächster Tag','type'=>3,'su'=>false,'free'=>false,'value'=>'nextd')
)
)
, 3 => array('Aktionen',
array
(
array('title'=>'Aktionen','type'=>3,'su'=>false,'free'=>true,'value'=>'buffs')
)
)

);
/**
* Enthält die Daten die dargestellt werden sollen
* @var array
*/
public $arr_data = array();

//Bei Änderungen am Array $arr_default version um 1 erhöhen!
static $int_version = 2;
private $arr_charstat = array();
private $str_charstat = "";

public function __construct()
{
//Default constructor
}

public function initialize_data($form,$data)
{
$this->arr_data = $data;
$this->arr_default = $form;
}

////////////////////////////////////////////////////////////////////
// Ab hier muss bei Änderungen nichts mehr angepasst werden
////////////////////////////////////////////////////////////////////

public function get_char_stats()
{
global $session;

$this->initialize();
$int_count = count($this->arr_charstat);
for($k = 0 ; $k < $int_count ; $k++)
{
$this->str_charstat .= $this->build($this->arr_charstat[$k][0],$this->arr_charstat[$k][1]);
}

return $this->str_charstat;
}

private function build($key,$val)
{
global $session;
$charstat = appoencode(templatereplace('statstart'),true);
if($session['user']['prefs']['charstat_aus']['aus_header_'.$key] != '1')
{
$bit = plu_mi_get_val('show_'.$key);
$headstr = plu_mi('show_'.$key, $bit).'&nbsp;'.$this->arr_default[$key][0];
$charstat.=appoencode(templatereplace('stathead',array('title'=>$headstr)),true);

for($j=0;$j<count($val);$j++)
{
if($session['user']['prefs']['charstat_aus']['aus_body_'.$key.'_'.$val[$j]] != '1')
{
$val2 = $this->arr_default[$key][1][$val[$j]];
if(!$session['user']['alive'] && $val2['type'] == 1){}
else if($session['user']['alive'] && $val2['type'] == 2){}
else if(!$session['user']['superuser'] && $val2['su'] == true){}
else if(isset($val2['mindk']) && $session['user']['dragonkills'] < $val2['mindk']) {}
else if(is_null_or_empty($val2['value']) || adv_empty($this->arr_data[ $val2['value'] ]) ){}
else
{
$charstat.=$this->do_stat($key,$bit,$val2['title'],$this->arr_data[ $val2['value'] ],$val2['free']);
}
}
}
}
$charstat.=appoencode(templatereplace('statend'),true);
return $charstat;
}

private function do_stat($key,$bit,$val,$return,$free=false)
{
if($free)
{
return appoencode(templatereplace('freedata',array('id'=>plu_mi_unique_id('show_'.$key), 'style'=>($bit?'':'display:none;'), 'title'=>$val,'free_data'=>$return)),true);
}
return appoencode(templatereplace('statrow',array('id'=>plu_mi_unique_id('show_'.$key), 'style'=>($bit?'':'display:none;'), 'title'=>$val,'value'=>$return)),true);
}

private function initialize()
{
global $session;
if(is_array($session['user']['prefs']['charstat']))
{
$this->arr_charstat = $session['user']['prefs']['charstat'];

if($session['user']['prefs']['charstat_version'] != self::$int_version)
{
if(count($this->arr_default) > count($this->arr_charstat))
{
for($c=count($this->arr_charstat);$c<count($this->arr_default);$c++)
{
$this->arr_charstat[$c] = array($c,array());
}
}
else if(count($this->arr_default) < count($this->arr_charstat))
{
for($d=0;$d<count($this->arr_charstat);$d++)
{
if($this->arr_charstat[$d][0] >= count($this->arr_default)) unset($this->arr_charstat[$d]);
}
}

for($i=0;$i<count($this->arr_charstat);$i++)
{
if(count($this->arr_default[$i][1]) > count($this->arr_charstat[$i][1]))
{
for($a=count($this->arr_charstat[$i][1]);$a<count($this->arr_default[$i][1]);$a++)
{
$this->arr_charstat[$i][1][$a] = $a;
}
}
else if(count($this->arr_default[$i][1]) < count($this->arr_charstat[$i][1]))
{
for($b=0;$b<count($this->arr_charstat[$i][1]);$b++)
{
if($this->arr_charstat[$i][1][$b] >= count($this->arr_default[$i][1])) unset($this->arr_charstat[$i][1][$b]);
}
}
}
$session['user']['prefs']['charstat'] = $this->arr_charstat;
$session['user']['prefs']['charstat_version'] = self::$int_version;
}
}
else
{
for($i=0;$i<count($this->arr_default);$i++)
{
$arr_sub = array();
for($k=0;$k<count($this->arr_default[$i][1]);$k++){$arr_sub[$k]=$k;}
$this->arr_charstat[$i] = array($i,$arr_sub);
}
$session['user']['prefs']['charstat'] = $this->arr_charstat;
$session['user']['prefs']['charstat_version'] = self::$int_version;
}
}

public function get_prefs()
{
$this->initialize();
$charForm = $this->get_char_form();
$return = array(
"CharStat,title"
,'charForm' => $charForm.',viewonly');
return $return;
}

public function check_prefs_save()
{
global $session;
if($_POST)
{
$temp = array();
for($i=0;$i<count($this->arr_default);$i++)
{
if($_POST['aus_header_'.$i.''] == 1)
{
$session['user']['prefs']['charstat_aus']['aus_header_'.$i] = 1;
}
else
{
$session['user']['prefs']['charstat_aus']['aus_header_'.$i] = 0;
}
unset($_POST['aus_header_'.$i.'']);
$subtemp = array();

for($k=0;$k<count($this->arr_default[$i][1]);$k++)
{
if($_POST['aus_body_'.$i.'_'.$k.''] == 1)
{
$session['user']['prefs']['charstat_aus']['aus_body_'.$i.'_'.$k.''] = 1;
}
else
{
$session['user']['prefs']['charstat_aus']['aus_body_'.$i.'_'.$k.''] = 0;
}
unset($_POST['aus_body_'.$i.'_'.$k.'']);

if(isset($subtemp[(((int)$_POST['pos_body_'.$i.'_'.$k.''])-1)]))
{
$subtemp[] = $k;
}
else
{
$subtemp[(((int)$_POST['pos_body_'.$i.'_'.$k.''])-1)] = $k;
}
unset($_POST['pos_body_'.$i.'_'.$k.'']);
}

if(isset($temp[(((int)$_POST['pos_header_'.$i.''])-1)]))
{
$temp[] = array($i,$subtemp);
}
else
{
$temp[(((int)$_POST['pos_header_'.$i.''])-1)] = array($i,$subtemp);
}
unset($_POST['pos_header_'.$i.'']);
}
$session['user']['prefs']['charstat'] = $temp;
$this->arr_charstat = $temp;
}
if((int)$_GET['charstats'] == 1)
{
$session['user']['prefs']['charstat'] = $temp;
$this->arr_charstat = $temp;
}
}

private function get_char_form()
{
global $session;
$return = '
<table align="center">';
for($i=0;$i<count($this->arr_charstat);$i++)
{
$return .= '<tr>
<td> <select name="pos_header_'.$this->arr_charstat[$i][0].'">';

for($a=1;$a<=count($this->arr_charstat);$a++)
{
$return .= '<option value="'.$a.'" '.( ($a==($i+1)) ? 'selected="selected"' : '' ).'>'.$a.'</option>';
}

$return .= '</select> </td>
<td>'.$this->arr_default[$this->arr_charstat[$i][0]][0].'</td>
<td></td>
<td><input name="aus_header_'.$this->arr_charstat[$i][0].'" type="checkbox" value="1" '.( ($session['user']['prefs']['charstat_aus']['aus_header_'.$this->arr_charstat[$i][0]] == 1) ? 'checked="checked"' : '').' > ausblenden</td>
</tr>';
for($k=0;$k<count($this->arr_charstat[$i][1]);$k++)
{
if(!$this->arr_default[$this->arr_charstat[$i][0]][1][$this->arr_charstat[$i][1][$k]]['su'])
{
$return .= '<tr>';
}
else
{
$return .= '<tr style=" display:none;">';
}
$return .= '
<td></td>
<td> <select name="pos_body_'.$this->arr_charstat[$i][0].'_'.$this->arr_charstat[$i][1][$k].'">';

for($b=1;$b<=count($this->arr_charstat[$i][1]);$b++)
{
$return .= '<option value="'.$b.'" '.( ($b==($k+1)) ? 'selected="selected"' : '' ).'>'.$b.'</option>';
}

$return .= '</select> </td>
<td>'.$this->arr_default[$this->arr_charstat[$i][0]][1][$this->arr_charstat[$i][1][$k]]['title'].'</td>
<td><input name="aus_body_'.$this->arr_charstat[$i][0].'_'.$this->arr_charstat[$i][1][$k].'" type="checkbox" value="1" '.( ($session['user']['prefs']['charstat_aus']['aus_body_'.$this->arr_charstat[$i][0].'_'.$this->arr_charstat[$i][1][$k]] == 1) ? 'checked="checked"' : '').' > ausblenden</td>
</tr>';
}

}
$return .= '</table>
<br><br>
<center><a href="prefs.php?charstats=1">Standardwerte für Reihenfolge zurücksetzen</a></center><br><br>';
return $return;
}
}
?>
')

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum