anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: So 08 Jun, 2025 15:20

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Waldspecials... Fragen und mehr..
BeitragVerfasst: Mo 22 Dez, 2008 12:19 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Hallo, habe ein paar Fragen und hoffe ich nerve nicht, habe auch schon ne Menge gelesen und gesucht, aber dahingehend nüx gefunden...

1. Was bedeutet genau dieses und was hat es für ein Sinn bei Waldspecials??

if (!isset($session)) exit();

2. Sollte man den debug davor oder danach setzen ??.. zB.

debuglog("special geladen: distress.php");
if (!isset($session)) exit();

oder andersherum?

3. Alle Specials sind unterschiedlich .. mal mit require common.php ... mal mit checkday(); ganz oben, andere haben garnichts und fangen direkt mit if ($HTTP_GET_VARS[op]==""){ .... an. Was ist denn wichtig und was sollte man am besten weglassen um einen sauberen Code zu haben???

4. Manche User beklagen sich, das sie im Wald ein besonderes Ereignis haben, aber da nichts stehen haben. Dieses ist mir als Spieler auch schon auf anderen Servern aufgefallen, woran kann sowas liegen?? Also, man kann normal weiterkämpfen, aber man hat eine leere Seite vor sich.

5. was ist der genaue unterschied zwischen zB. [user] oder ['user'] .. sehe immer wieder das manche ohne, und manche mit ' sind??? Wobei ich mal gelesen habe, das man immer mit ' machen sollte.

6. Wie kann ich einen Wert die Dezimalstellen klauen, also Runden das er keine Kommas mehr hat??

$preis = 0;
$bpreis = 4000;
$mwsteuer = getsetting("mwsteuer","0");
$stadtkasse = getsetting("stadtkasse","0");
$preis = $bpreis * $mwsteuer /100;
savesetting("stadtkasse",$stadtkasse+$preis);
$session['user']['gold']-=$bpreis;

Ich möchte das der Wert $preis halt keine stellen nach dem Komma hat, kann mir da wer helfen??


So , das wars erstmal mit Fragen.

Grüsse Shawn


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 22 Dez, 2008 14:05 
Offline
Held
Held
Benutzeravatar

Registriert: Di 21 Aug, 2007 23:04
Beiträge: 290
Wohnort: Darmstadt
Geschlecht: Männlich
Hi,
also ich versuch mal die meisten deiner Fragen zu beantworten.

  • Frage 1
    • Also isset prüft ob eine Variable vorhanden ist,
      in deinem Beispiel ob die Variable session vorhanden ist.
      Wenn session nicht vorhanden ist geht es weiter mit exit() - exit beendet schlicht die Ausführung des Scripts.
  • Frage 3
    • Da kommt es ganz drauf an, wenn du in dem Waldspecial Funktionen aus der common.php nutzen möchtest
      solltest du require_once('common.php'); auf jeden Fall nutzen .. allein die addnav Funktion usw. also daher besser rein.
      checkday(); überprüft einfach ob ein neuer Tag begonnen hat.
      $HTTP_GET_VARS ist veraltet und sollte eh durch $_GET erstezt werden. Ob du es verwendest oder nicht hängt von deinem Script ab.
      Beispiel: kneipe.php .. ist dann ganz normal $_GET['op']=="" .. wenn du dann aber ein Hinterzimmer hast setzt du $_GET['op']=="zimmer" usw.
      damit kannst du sozusagen mehrer "Scripte" in einem schreiben.
  • Frage 4
      Diese Waldspecial ist bekannt aber völlig normal.
  • Frage 5
      Damit es von PHP als direkt als Variable , man solltes es aber in '' oder "" setzen.
  • Frage 6
      Um zu runden setz du einfach die php Funktion round ein. Die ist folgendermaßen aufgebaut: round(deine Zahl, Anzahl an Kommastellen);
      Beispiel: echo round(3.4, 0);
      Gibt dir dann aus: 3

Ich hoffe ich konnte dir ein wenig helfen.

Mit freundlichen Grüßen

Kai A. Wolf

_________________
Legend of the Green Dragon - Die Mysterien um Ched Nasad


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo 22 Dez, 2008 22:25 
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/
Ich ergänze noch mal ein paar "moralische Bedeutungen":

1.) Da nicht alle specials wie "normale" Seiten von LotgD automatisch die common.php und damit das anti-cheat-system von sich aus einbinden, könnte man über einen direkten aufruf des Scriptes mit dem Browster womöglich cheaten. Daher wird, wenn nicht zunächst die forrest.php (und damit die common.php samt anticheat und $session) geladen wurde, die dann ihrerseits ein Special startet, das Script komplett abgebrochen.
2.) Erübrigt sich damit weitestgehen, ich würde es aber dahinter schreiben, da sonst jemand über massenhaften aufruf deiner Seite deine Logs überfluten könnte (das Böse lauert überall ^^)
3.) Das einbinden der common.php an dieser stelle ist sinnlos, da sie wie oben normalerweise bereits eingebunden ist. Ob gerade geprüft werden soll, ob ein neuer Tag ist hängt ebenfalls von deinem Special ab, ich empfehe es allerdings nicht zu tun, da so deer Spieler aus dem logischen Fluss gerissen werden könnte (hat plötzlich wieder volle HP etc) außerdem bin ich mir nicht ganz sicher, ob das Special durch das Verarbeiten eines neuen Tages vollends abgebrochen wird.
Sinnvollerweise beginnst du mit allgemeinen Initialisierungen oben, also alles, was du in jedem Fall brauchst. Danach kommt dann die Unterscheidung der einzelnen Zustände im Special, wobei ich emfehlen würde, mit if(empty($_GET['op'])) (startzustand) zu beginnen, da so am wenigsten Fehlermeldungen geworfen werden und du dich auch logisch von oben nach unten im Script durcharbeiten kannst. $HTTP_GET_VARS ist veraltet und sollte durch $_GET ersetzt werden.
4.) Genau das tritt auf, wenn Specials eben nicht sauber gecodet sind - oft gibt es hier Probleme mit den Unterschieden von $_GET und $HTTP_GET_VARS und der Art, wie diese auf ihren Wert geprüft werden (Manchmal werden einfach fälle nicht oder nur so behandelt, das sie nicht vorkommen können und dann gibt es eben keine aus zu führende Programmlogik, die Seite bleibt leer. Dazu gibt es aber ihr im Forum ans einigen Stellen Hinweise.
5.) Arrayschlüssel sollten - das hast du ganz richtig gehört - grundsätzlich als Strings notiert werden, also von Anführungszeichen eingeschlossen. Ausnahmen bilden nur die direkte Verwendung in Strings wie "Der wert ist $array[key]!", wobei hier auch "Der wert ist {$array['key']}!" als saubere Variante möglich ist. Oder aber wenn du tatsächlich eine Konstante zur Bestimmung des Feldes des Arrays verwendne willst:$this->bbcode_second_pass_code('', 'define('MYCONST',"hallo"); echo $array[MYCONST];'). Alles andere ist ein Fehler, über den PHP allerdings hinweg sehen kann, wenn man Glück hat - worauf man sich aber nicht verlassen solllte!
6.) Zum Runden gibt es in php drei wichtige Funktionen: floor() rundet immer ganzzahlig ab, ceil() rundet immer ganzzahlig auf und round rundet "kaufmännisch" auf so viele Nachkommastellen, wie du es im zweiten Parameter angibst (default: 0).

Ich hoffe, du kannst damit etwas anfangen,
Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 23 Dez, 2008 11:54 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Danke Arath und Auric, Lieb von euch mir die Fragen so ausführlich zu beantworten. *mal einen Schokinikolaus rüberreicht als Dank* :?:

Habe soweit alles begriffen.. würde also mit

round ($preis, 0);

den Wert kaufmännisch runden.. oder muss ich Anführungszeichen setzen bei nen String??? ..

round ("$preis", 0);


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 23 Dez, 2008 12:09 
Offline
Held
Held
Benutzeravatar

Registriert: Di 21 Aug, 2007 23:04
Beiträge: 290
Wohnort: Darmstadt
Geschlecht: Männlich
Genau, die Variable $preis gehört demnach in "" oder halt ''.
Jedoch solltest du nicht zwischen round und der öffnenten Klammer ein Leerzeichen lassen ;)

_________________
Legend of the Green Dragon - Die Mysterien um Ched Nasad


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di 23 Dez, 2008 12:48 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Das ist leider nicht ganz richtig.

PHP:
round($preis, 0);

Das ist schon ganz korrekt so. Wenn Variablen als Funktionsparameter übergeben werden, müssen sie normalerweise nicht speziell markiert werden. Die Quotes sollte übrigens sowieso nicht sein, da round mit integeren Werten arbeitet, Quote' allerdings einen String markieren.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 23 Sep, 2009 12:04 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Noch mal eine Frage zu den String hat und hofft jemand kann ihm da eben helfen.

und zwar möchte ich zwei Stringwerte zusammenführen mit Komma dazwischen, gibt es da nen befehl für?

Also.. zB. $wert1 hat 6 als wert ... $wert2 hat 56 als wert.
ich würde nun gerne nen string erzeugen $wert3 der den wert 6,56 hat (wichtig dabei wäre das Komma) aus den beiden oben genannten. Hatte mal im basic gesehen das es möglich ist, nur bei php weiss ich das nicht :(


danke


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 23 Sep, 2009 14:09 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 12 Mai, 2008 21:51
Beiträge: 137
Geschlecht: Weiblich
http://forum.de.selfhtml.org/archiv/2004/3/t76826/
gidf ;)

mal kurz für dich zusammengefasst:

$wert3 = $wert1.','.wert2;

mfg dat Mine


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 23 Sep, 2009 19:37 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Oder:
$this->bbcode_second_pass_code('', ' $newVar = "$varOne,$varTwo";')

Oder:
$this->bbcode_second_pass_code('', ' $newVar = sprintf("%d,%d", $varOne,$varTwo); #%d => Nur für Zahlen als Parameter, %s für alles mögliche..')


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 01 Okt, 2009 15:17 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Herzlichen Dank an euch Beide. Man, so einfach wie das war, hätte man da auch sebst drauf kommen können *peinlich* :roll:

Was mich noch interessieren würde, da ich hier immer lese, das $_HTTP_Get_Vars[op] veraltet ist und man $_GET[op] benutzen sollte...

manche Specials im Wald werden nicht angezeigt, oben steht nur .. Etwas besonderes aber es kommt nichts. (wenn man die aus der superuserliste klickt gehen sie, nur nicht wenn man sie aus Zufall im Wald bekommt) Ich habe alle mit Page Header versehen damit man weiss welches Script es ist, und alle sind mit $_GET[op] . Wenn ich die Special auf $_HTTP_Get_Vars[op] ändere, gehen die. Finde das nun etwas verwirrend und Frage mich an was sowas liegen könnte.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 01 Okt, 2009 15:19 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Setze zum Einleiten von besonderen Ereignissen:
$this->bbcode_second_pass_code('', 'if ($_GET['op'] == '' && $_GET['op'] == 'search')
// ...weiterer Code.')


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 01 Okt, 2009 15:51 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
nein, es liegt nicht an den specials sondern am Aufruf in der forest.php


bei dir:

$this->bbcode_second_pass_code('', 'if (count($events)==0){
output("`b`@Arrr, dein Administrator hat entschieden, dass es dir nicht erlaubt ist, besondere Ereignisse zu haben. Beschwer dich bei ihm, nicht beim Programmierer.");
}else{
$y = $HTTP_GET_VARS[op];
$HTTP_GET_VARS[op]="";
//echo "$x including special/".$events[$x];
include("special/".$events[$x]);
$HTTP_GET_VARS[op]=$y;
}
}else{
output("`c`b`\$FEHLER!!!`b`c`&Es ist nicht möglich die besonderen Ereignisse zu öffnen! Bitte benachrichtige den Administrator!!");
}')


ersetze den Part mit:
$this->bbcode_second_pass_code('', 'if (count($events)==0){
output("`b`@Arrr, dein Administrator hat entschieden, dass es dir nicht erlaubt ist, besondere Ereignisse zu haben. Beschwer dich bei ihm, nicht beim Programmierer.");
}else{
$y = $HTTP_GET_VARS['op'];
$yy = $_GET['op'];
$HTTP_GET_VARS['op']="";
$_GET['op'] = "";
include("special/".$events[$x]);
$HTTP_GET_VARS['op']=$y;
$_GET['op']=$yy;


}
}else{
output("`c`b`\$FEHLER!!!`b`c`&Es ist nicht möglich die besonderen Ereignisse zu öffnen! Bitte benachrichtige den Administrator!!");
}')


damit sollten alle specials funktionieren ;) sowohl die veralteten $HTTP_GET_VARS als auch die neueren $_GET

lg

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 01 Okt, 2009 18:43 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Thx...und

Jepp, Rikkarda.. nachdem ich das umgestellt habe so wie du sagst, scheint alles wunderbar wieder zu gehen und alles wird geladen :hüüüü..hüpf


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 01 Okt, 2009 21:27 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
Shawn hat geschrieben:
Thx...und

Jepp, Rikkarda.. nachdem ich das umgestellt habe so wie du sagst, scheint alles wunderbar wieder zu gehen und alles wird geladen :hüüüü..hüpf


Ich hatte das Problem damals auch, als die ersten anfingen mit $_GET zu arbeiten ;)

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 02 Okt, 2009 14:56 
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/
Kevz hat geschrieben:
Setze zum Einleiten von besonderen Ereignissen:
$this->bbcode_second_pass_code('', 'if ($_GET['op'] == '' && $_GET['op'] == 'search')
// ...weiterer Code.')


Das bitte nicht so übernehmen!
Andernfalls werden die Specials unbrauchbar!
Es müsste heißen:
$this->bbcode_second_pass_code('', 'if ($_GET['op'] == '' || $_GET['op'] == 'search')
// ...weiterer Code.')

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 02 Okt, 2009 21:43 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 02 Feb, 2009 21:11
Beiträge: 168
Geschlecht: Männlich
LoGD: salator.selfhost.de/lotgd
Auric hat geschrieben:
$this->bbcode_second_pass_code('', 'if ($_GET['op'] == '' || $_GET['op'] == 'search')
// ...weiterer Code.')

Eigentlich ist das doch auch Friemelei.
Jedes IF sollte ein ELSE haben (außer wenn im anderen Fall absolut nichts gemacht werden soll) und jeder SWITCH ein DEFAULT.
Praktischerweise legt man dann das Grundbild in den else-Zweig bzw default-Fall, so dass man im Fehlerfall nicht festhängt sondern das Grundbild sieht.
Alternativ kann man auch eine (aussagekräftige!) Fehlermeldung ausgeben. Für Anfänger oder wenn man den Originalcode nicht zu sehr umbauen will dürfte das die bessere Variante sein.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 08 Okt, 2009 08:28 
Offline
Lehrling
Lehrling

Registriert: Do 23 Okt, 2008 14:02
Beiträge: 26
Geschlecht: Männlich
LoGD: http://www.chro-lex.de/logd/source.php
Neues problem... ich poste das einfach mal hier rein und mache kein neuen Thread auf.

Also, nen Spieler hängt seit 12 Stunden im Badnav. Navsreparieren.. nen neuen Tag machen oder in der DB per update die seiten restoren funzt net --->
UPDATE `accounts` SET `output` = '', `allowednavs` = '', `restorepage` = '' WHERE `acctid` = '2702'

Er bekam einen Newday und dann nur ne fehlermeldung.

....
UPDATE accounts SET acctid='2702', name='`#Ei`mnf`Bühls`mam`#er `#J`mer`Bon`mim`#o`0', sex='0', specialty='1', darkarts='3', magic='0', thievery='0', experience='4707', charisma='4294967295', seenlover='0', gold='1822', weapon='Haganirs Qualitäts `@Sp`Te`2z`@i`Ta`2l `tPhaser +1', armor='Haganirs Qualitäts `@Sp`Te`2z`@i`Ta`2l `tKryptonweste +1', seenmaster='0', level='4', defence='145', attack='164', alive='1', goldinbank='28625', marriedto='3188', playerkills='1', spirits='0', laston='2009-10-08 07:35:37', hitpoints='416', maxhitpoints='416', gems='8', weaponvalue='52670', armorvalue='51418', location='209', turns='30', title='Meister', password='aa9dcf801f9b19532334ec5887243ea2', darkartuses='2', magicuses='0', thieveryuses='0', badguy='', allowednavs='a:1:{s:22:\"village.php?c=4-073537\";b:1;}', output='
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//DE\">

(... seiten output)

...

Wie kann ich dem seine Allowednavs oder die Restore page wieder so einstellen, das er nicht weiter im Badnav hängt??? :(
Hat nur er das prob.. alle anderen Accs funzen auf dem Server


EDIT: Problem selbst gefunden.. lag an Allmightys Steinen die nen Falschen Session wert übergaben...


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 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