anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Sa 20 Apr, 2024 10:53

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So 09 Mai, 2010 19:38 
Offline
Lehrling
Lehrling

Registriert: Di 05 Dez, 2006 18:45
Beiträge: 46
LoGD: http://www.wolfsrealm.de
Ich hab ein Problem mit der Waffenkammer und den Stalltier bei der Gilde Klappt nicht. Ich bekomme dort immer Wieder eine Fehler meldung. Ich hab die Dragonslayer V 2.5
Ich hab nur das Wort Gilde mit dem Wort Rudel ersetzt aber auch die Original variante geht bei mir nicht.

Waffenkammer kommt.
Fatal error: Cannot use string offset as an array in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 538
hier die Zeilen 536 bis 539
PHP:
$min = 65 - pow(1.3,$lvl) * 4;

$item = $guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];
if(is_array($item)) {

Hab schon einiges versucht bei der Waffenkammer mit hilfe.
Wenn ich bei Zeile 538 es so schreibe bringt es mir den fehler mit der Zeile 1306
$item = $guild['building_vars'];//[DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];


Beim den Stalltieren so ähnlich.
Fatal error: Cannot use string offset as an array in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 1306
hier die Zeilen 1304 bis 1307
PHP:
dg_show_header('Der Tierstall ('.$dg_build_levels[$lvl].')');

$arr_names = $guild['building_vars']['stall']['names'];
$arr_animals = array(


Zu finden ist das ganze in der dg_builds.php
Ich wäre für jede idee dankbar.

_________________
Entschuldigt wenn ihr so maches nicht versteht oder ich noch seltsam frage, ich bin erst dabei es zulernen und habe auch eine Lese-Rechtschreibschwäche.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So 09 Mai, 2010 20:26 
Offline
Held
Held

Registriert: Fr 17 Okt, 2008 20:06
Beiträge: 253
Geschlecht: Männlich
LoGD: off
Datei kann nich angezeigt werden.. Aber mal so gesagt.. $item wird wohl, wenn ich die Fehlermeldung richtig versteh.. entweder weiter oben im script oder in einem anderen script, dass die Datei aurfruft als String verwendet. Kann daher nicht gleichzeitig als array benutzt werden

_________________
Wenn ihr mir sagt wie ich es als Datei hochlade, dann kann ich die Source hochladen die ihr wollt .D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 10 Mai, 2010 01:40 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Suche in dem Script mal jede Zuweisung die $guild bekommt. (STRG+F $guild = / $guild=).

Sollte das nicht weiterhelfen, kannst Du auch zwischendurch einfach mal prüfen, wann $guild ein String wird.

$this->bbcode_second_pass_code('', 'if( !is_array($guild) || is_string($guild) ) {

$str_out .= '$guild ist kein Array. Zeile: '.__LINE__;

}

# Kurz vor page_footer():

output($str_out);')

Kannst es natürlich auch via var_dump machen..

Allerdings scheint $guild ein Array zu sein. Denn sobald sie ein paar Mitanweisungen auskommentiert, funktioniert es. Überprüfe doch mal, ob es eventuell an der Konstante (Define) DG_BUILD_WAFFENKAMMER liegt.

@ Patzue: Eigentlich sollte eine Variable komplett überschrieben werden, wenn man es mit dem "=" Operator macht. Lediglich ".=" zählt neue Werte hinzu.

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 10 Mai, 2010 13:12 
Offline
Held
Held

Registriert: Fr 17 Okt, 2008 20:06
Beiträge: 253
Geschlecht: Männlich
LoGD: off
MySql hat geschrieben:

@ Patzue: Eigentlich sollte eine Variable komplett überschrieben werden, wenn man es mit dem "=" Operator macht. Lediglich ".=" zählt neue Werte hinzu.


Gut zu wissen. Man lernt nier aus ;) Danke^^

_________________
Wenn ihr mir sagt wie ich es als Datei hochlade, dann kann ich die Source hochladen die ihr wollt .D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 10 Mai, 2010 20:22 
Offline
Lehrling
Lehrling

Registriert: Di 05 Dez, 2006 18:45
Beiträge: 46
LoGD: http://www.wolfsrealm.de
Erstmal Danke für die Hilfe.
MySql hat geschrieben:
$this->bbcode_second_pass_code('', 'if( !is_array($guild) || is_string($guild) ) {

$str_out .= '$guild ist kein Array. Zeile: '.__LINE__;

}

# Kurz vor page_footer():

output($str_out);')


Ich hab das versucht. Wenn ich den ersten Teil anfangs mache zeigt er mir das aus Fehler an.
Mach ich den weiter unten hat er noch immer den selben Fehler wie oben beschrieben.

Wenn ich alle Datein durchsuche finde ich [DG_BUILD_WAFFENKAMMER] noch in lib/dg_funcs.lib.php
PHP:
define('DG_BUILD_WAFFENKAMMER',1);

$dg_builds = array(
DG_BUILD_WAFFENKAMMER => array('name'=>'Waffenkammer','special_types'=>true,'forbidden_types'=>array(),'goldcost'=>120000,'gemcost'=>120,'color'=>'','op'=>'waffenkammer','desc'=>'Die `bWaffenkammer`b stellt einen sicheren Aufbewahrungsort für Waffen dar - auch über den Fuchskill hinaus.'),


Wo gegen ich ['itemlist'] nicht gefunden habe.


Ich hab nun die phps freigeben. Bin leider noch nicht auf die Lösung gekommen.

Edit:
Ich hab nun die sql befehle und die datei von einem anderen Server genommen wo die Gilden gehen und trotzdem hab ich noch den selben fehler.

_________________
Entschuldigt wenn ihr so maches nicht versteht oder ich noch seltsam frage, ich bin erst dabei es zulernen und habe auch eine Lese-Rechtschreibschwäche.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 19 Mai, 2010 15:35 
Offline
Lehrling
Lehrling

Registriert: Di 05 Dez, 2006 18:45
Beiträge: 46
LoGD: http://www.wolfsrealm.de
Wenn ich den
PHP:
foreach($guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist']as $acctid=>$i) {
if(!isset($arr_member_list[$acctid])) {
unset($guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$acctid]);
}
}
vor
PHP:
$item = $guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];
if(is_array($item)) {

Dann geht es zwar weiter aber ganz oben über page_header bei der php
Warning: Invalid argument supplied for foreach() in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 539
Sobald ich da itemlist weg mache ist die warnung weg.

Der Tierstall geht dann irgendwie fehler und warnung frei.

_________________
Entschuldigt wenn ihr so maches nicht versteht oder ich noch seltsam frage, ich bin erst dabei es zulernen und habe auch eine Lese-Rechtschreibschwäche.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 21 Mai, 2010 00:16 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
Ungetestet aber bei so nem simplen Fehler (die Fehlermeldung sagt ja schon alles) denke ich mal, dass es hiermit gehen wird:

öffne lib/dg_funcs.php

und ersetze die function &dg_load_guild

durch folgende:

PHP:
function &dg_load_guild ($gid=0,$fields=array(),$overwrite=false,$order_sql='guildid ASC') {

global $session,$dg_session_copy,$dg_child_types;

$fields_str = '*';

if(sizeof($fields) > 0) {

if($gid && !$overwrite) { // Überprüfung, ob bereits vorhanden

foreach($fields as $k=>$a) {

if(isset($session['guilds'][$gid][$a])) {unset($fields[$k]);}

}

if(sizeof($fields) == 0) {
return($session['guilds'][$gid]);
}
}

$fields_str = implode(',',$fields);
$fields_str .= (strstr($fields_str,'guildid') === false) ? ',guildid' : '';

}

else {

if( is_array($session['guilds'][$gid]) ) {$ref = &$GLOBALS['session']['guilds'][$gid];return($ref);}

}
$sql = 'SELECT '.$fields_str.' FROM dg_guilds '.( ($gid) ? 'WHERE guildid='.$gid : '').' ORDER BY '.$order_sql;
$res = db_query($sql);

if(!db_num_rows($res)) {return(false);}

while($g = db_fetch_assoc($res)) {

if($g['type']) {
$g['ptype'] = $dg_child_types[$g['type']][3];
}

if(strlen($g['treaties']) > 3) {

$g['treaties'] = unserialize($g['treaties']);

}

if(strlen($g['ranks']) > 3) {

$g['ranks'] = unserialize($g['ranks']);

}

if(strlen($g['transfers']) > 3) {

$g['transfers'] = unserialize($g['transfers']);

}

if(strlen($g['build_list']) > 3) {

$g['build_list'] = unserialize($g['build_list']);

}

if(strlen($g['hitlist']) > 3) {

$g['hitlist'] = unserialize($g['hitlist']);

}

if(strlen($g['building_vars']) > 3) {

$g['building_vars'] = unserialize($g['building_vars']);

}

if(!is_array($g['treaties']))$g['treaties']=array();
if(!is_array($g['ranks']))$g['ranks']=array();
if(!is_array($g['transfers']))$g['transfers']=array();
if(!is_array($g['build_list']))$g['build_list']=array();
if(!is_array($g['hitlist']))$g['hitlist']=array();
if(!is_array($g['building_vars']))$g['building_vars']=array();

if(is_array($session['guilds'][$g['guildid']])) {
$session['guilds'][$g['guildid']] = array_merge($g,$session['guilds'][$g['guildid']]);
}
else {
$session['guilds'][$g['guildid']] = $g;
}
//$dg_session_copy[$g['guildid']] = $g;

if($session['user']['guildid'] == $g['guildid']) {

$session['userguild'] =& $session['guilds'][$g['guildid']];

}

if(!is_array($dg_session_copy[$g['guildid']])) {
$dg_session_copy[$g['guildid']] = array();
}
// Manche Arrays muss man zu ihrem Glück (und einer Übergabe OHNE Referenz) zwingen..
// Funktioniert möglicherw. auch durch Verwendung des GLOBALS-Arrays
$dg_session_copy[$g['guildid']] = array_merge($dg_session_copy[$g['guildid']],$session['guilds'][$g['guildid']]);

}

//if($session['user']['superuser'] > 3) output('LOAD-Query: '.$sql);

db_free_result($res);

if($gid) {
$ref = &$GLOBALS['session']['guilds'][$gid];
return($ref);
}

// return($GLOBALS['session']['guilds'][$gid]);

}



alles was ich an der Funktion geändert habe ist

PHP:
if(!is_array($g['treaties']))$g['treaties']=array();
if(!is_array($g['ranks']))$g['ranks']=array();
if(!is_array($g['transfers']))$g['transfers']=array();
if(!is_array($g['build_list']))$g['build_list']=array();
if(!is_array($g['hitlist']))$g['hitlist']=array();
if(!is_array($g['building_vars']))$g['building_vars']=array();


Generell bei dieser Fehlermeldung nie in der Datei suchen wo sie auftritt sondern immer an der ersten Stelle nachgucken WO dieser Array initialisiert wird und sicherstellen, dass auch immer ein Array rauskommt, was gerade in Verbindung mit unserialize und/oder if-Konstrukte wie man sieht nicht immer der Fall ist.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 21 Mai, 2010 00:37 
Offline
Profi
Profi

Registriert: Mo 20 Apr, 2009 00:30
Beiträge: 125
Ich denke dass noch die eine oder andere Stelle im Code angepasst werden muss:

z.B. dg_output.php

zeile 264: if(!is_array($guild['transfers'])) {$out .= '<tr><td colspan="5">`iKeine Transfers vorhanden!</td></tr>';}

müsste:

if(count($guild['transfers']) == 0 ) {$out .= '<tr><td colspan="5">`iKeine Transfers vorhanden!</td></tr>';}

lauten.

oder dg_output.php

zeile 387: if(is_array($guild['build_list'])) {

müsste:

if(count($guild['build_list']) > 0) {

lauten.

Spontan fällt mir aber keine weitere Stelle ein.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So 23 Mai, 2010 14:06 
Offline
Lehrling
Lehrling

Registriert: Di 05 Dez, 2006 18:45
Beiträge: 46
LoGD: http://www.wolfsrealm.de
Danke für die Hilfe nun geht es einwandfrei.

Ich hab meine Bruder gefragt und wir haben ja auch alle Datein dannach durchsucht aber nicht gefunden was der fehler ist.
Leider ist meine Englisch nicht so gut und mit übersetzer wird das nie genau. Uach bin ich obwohl ich es schon einige Zeit mache noch nicht sehr gut in php.

Jetzt klappt es aber einwandfrei und ich bin sehr dankbar für alle die sich die mühe gemacht haben mir zuhelfen.

_________________
Entschuldigt wenn ihr so maches nicht versteht oder ich noch seltsam frage, ich bin erst dabei es zulernen und habe auch eine Lese-Rechtschreibschwäche.


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum