anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 28 Mär, 2024 16:37

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa 09 Feb, 2008 14:59 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Hallo.

Ich habe hier vor ein paar Monaten die zwei Funktionen 'edituser' und 'getuser' gepostet. Daher diese einfach zu viel Code hatten, habe ich beide nochmal neu geschrieben. Nun sind es nur noch 35 Zeilen Code und nur noch eine Funktion für drei verschiedene Dinge. :p

Die Funktion nennt sich 'User' und kann folgende Dinge:

  • Eine Abfrage durchführen, ob der User genug von etwas hat.
  • Den Wert eines Tabellenfelder ändern.
  • Den aktuellen Wert des Tabellenfeldes zurück geben.

Die Funktion hat eigentlich recht wenig Sinn. Doch für Schreibfaule sollte sie genügen.

Funktion User:

$this->bbcode_second_pass_code('', 'function User($step,$field,$value = false,$operator = false) {

global $session;

switch ($step) {

case 'check':

if ($operator == 1) return $session['user'][$field] == $value;
if ($operator == 2) return $session['user'][$field] <= $value;
if ($operator == 3) return $session['user'][$field] >= $value;
if ($operator == 4) return $session['user'][$field] < $value;
if ($operator == 5) return $session['user'][$field] > $value;

break;

case 'change':

if ($operator == 1) return $session['user'][$field] += $value;
if ($operator == 2) return $session['user'][$field] -= $value;
if ($operator == 3) return $session['user'][$field] *= $value;
if ($operator == 4) return $session['user'][$field] /= $value;
if ($operator == 5) return $session['user'][$field] = $value;

break;

case 'callback':

return $session['user'][$field];

break;
}


}')

User('check'...):

$this->bbcode_second_pass_code('', 'if (User('check','gold',5000,1)) {

# true

} else {

# false

}')

User('change'...):

$this->bbcode_second_pass_code('', 'User('change','gold',5000,1);')

User('callback'....):

$this->bbcode_second_pass_code('', 'output('`@Du hast Momentan `^'.User('callback','gold').' Goldstücke`@.');')

Viel Spaß damit.

My.

Ps: Änderungen an Array-Feldern sind derzeit nicht möglich. (prefs,donationsconfig,etc.)

_________________
Never change a running system. Bullshit! ;)


Zuletzt geändert von MySql am Sa 27 Mär, 2010 01:45, insgesamt 8-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Sa 09 Feb, 2008 17:05 
Offline
Profi
Profi

Registriert: Mo 25 Dez, 2006 21:45
Beiträge: 109
Fraglich, ob Beispielcode 1 so funktionieren kann:
$this->bbcode_second_pass_code('', 'if (check('gold') > 5000 || check('gold') == 5000)
{
output('Genug Gold dabei,,,,');
}
else {
output('Nicht genug Gold dabei....');
}')

Mit solch einer Funktion...ohne Rückgabewert...

$this->bbcode_second_pass_code('', 'Function check($what,$ausgabe = false)
{
global $session;
$session['user'][$what];
if ($ausgabe === true)
{
output($session['user'][$what]);
}
}')

:dumm: Naja... wer's braucht... :nene:
:D

_________________
26. April 2007 - 8. Juni 2007 auf http://www.dragonfantasies.de
28. Juli 2007 - 31. Dezember 2008 auf http://www.atrahor.de

LoGD ist das programmierte Grauen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Sa 09 Feb, 2008 17:13 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Yep, Richtig erkannt. Check geht genau... Gar nicht. NUL (\0, 0x00) ist nunmal nie = 5000 oder > 5000, sondern einfach "gar nichts". An deiner Stelle, MySQL, würd ich nochmal die Dokumentation zu Funktionen durchlesen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Sa 09 Feb, 2008 17:45 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
[........]

_________________
Never change a running system. Bullshit! ;)


Zuletzt geändert von MySql am Sa 27 Mär, 2010 01:43, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Sa 09 Feb, 2008 18:04 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
MySql hat geschrieben:
Wie gesagt alte sinnlose Funktionen.

Obriger Beitrag editiert.


Du solltest wirklich die Doku lesen. Wenn eine Funktion keinen Wert zurück gibt, kann man auch nix in einen String einbauen lassen:
$this->bbcode_second_pass_code('', 'output('Dein Name ist '.check('name').', dein Level ist '.check('level'));')

Ausgabe (Name=Eliwood;Level=15):

Wasili15Dein Name ist , dein Leven ist

Grund: check() gibt selbst bereits mit output die Daten aus (Gibt sie nicht zurück!). Da nun aber output noch nicht beendet wird, werden zuerst die Werte von name und level ausgegeben (Da in check() ein Output drin ist). Wenn du schon sinnlose Funktionen postest, dann bitte auch richtige ;)

http://ch2.php.net/manual/de/language.functions.php

Was du meinst, ist sowas:

$this->bbcode_second_pass_code('', 'Function check($what) {
global $session;
return $session['user'][$what];
}')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Mo 11 Feb, 2008 23:10 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Das kann man doch auch mit weniger vielen Funktionen machen, wenn man ein drittes Argument einbaut:
$this->bbcode_second_pass_code('', 'function values($field, $op, $value='0') {
global $session;

if($op == '==') {
return $session['user'][$field];
}
elseif($op == '+') {
$session['user'][$field] += $value;
}
elseif($op == '*') {
$session['user'][$field] *= $value;
}
elseif($op == '-') {
$session['user'][$field] -= $value;
}
elseif($op == '/') {
$session['user'][$field] /= $value;
}
}')

Allerdings ist der Aufruf der Funktion jetzt beinahe gleich aufwändig wie wenn man $session['user'] schreiben würde xD

MfG Draz

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Di 12 Feb, 2008 00:09 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
wenn das ganze

if
elseif
elseif
.
.
.

jetzt noch ein switch() wäre, säh es nicht nur schöner aus, sondern wär auch schneller =)

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Di 12 Feb, 2008 00:45 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Okay, der geht an dich :D

$this->bbcode_second_pass_code('', 'function values($field, $op, $value='0') {
global $session;

switch($op) {
case '==':
return $session['user'][$field];
break;
case '*':
$session['user'][$field] += $value;
break;
case '*':
$session['user'][$field] *= $value;
break;
case '-':
$session['user'][$field] -= $value;
break;
case '/':
$session['user'][$field] /= $value;
break;
}
}')


Liege ich eigentlich richtig damit, dass man das Ganze nicht auf 2 Abfragen aufteilen könnte? In Scheme könnte man es einfach so schreiben (ohne den ersten Fall für die Ausgabe):

$this->bbcode_second_pass_code('', '(define values
(lambda (field op value)
(op $session['user'][field] value)))')
[[es sei außer Acht gelassen, dass Scheme keine variablen mit $ unterstützt, es diente nur zur Verdeutlichung]]

Ich meien damit, den Operator in einer Variablen abspeichern.
Also ~ so:
$this->bbcode_second_pass_code('', '
$session['user'][$field].$op.$value;')

Ich weiß, dass es nicht geht, aber kann man es irgendwie auf eine solche Weise machen?

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Di 12 Feb, 2008 18:51 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Mit eval - ja. Sonst nein. Und wenn eval die Antwort ist, war die Frage falsch. Normalerweise braucht man eval nicht ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Fr 15 Feb, 2008 01:22 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Also nein ^^
eval, wie es in php.net beschrieben wird (vor allem das Beispielt mit dem Bierglas und dem Namen) leuchtet mir nicht ein...

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 "sinnlose" Funktionen. (User)
BeitragVerfasst: Fr 15 Feb, 2008 14:06 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Drazaar hat geschrieben:
Also nein ^^
eval, wie es in php.net beschrieben wird (vor allem das Beispielt mit dem Bierglas und dem Namen) leuchtet mir nicht ein...


$this->bbcode_second_pass_code('', 'eval('echo "Das ist eine Ausgabe, die PHP-Code in PHP-Code ist.";');')


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi 15 Jul, 2009 13:24 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
[........]

_________________
Never change a running system. Bullshit! ;)


Zuletzt geändert von MySql am Sa 27 Mär, 2010 01:44, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 16 Jul, 2009 10:08 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
[........]

_________________
Never change a running system. Bullshit! ;)


Zuletzt geändert von MySql am Sa 27 Mär, 2010 01:44, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 16 Jul, 2009 12: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/
Zum einen: Wozu brauche ich die Funktion getuser? Kapselung ist zwar gut und schon, aber das ist nun wirklich nicht besser als der direkte Zugriff auf $session['user'] - zumal nicht mal auf das vorhandensein des Feldes geprüft wird.

Zum anderen: Deine Beschreibung zu edituser stimmt nicht ganz:
$this->bbcode_second_pass_code('', ' * edituser($session['user']['acctid'],'gold','+',100);
* oder auch:
* $_U = $session['user'];
* edituser($_U,'gold','+',5);')
Es findet keine Prüfung statt, ob $_THIS_USER ein Array oder eine Zahl ist! Dem entsprechend funktioniert das zweite Beispiel nicht!

Und noch ein Hinweis zur Nomenklatur: Das die Variablennamen auf nicht viel Gegenliebe stoßen, hast du ja scheinbar schon gemerkt. Insbesondere da die $_VAR-Notation sonst für superglobals verwendet wird ist das für sich sehr verwirrend.
"getuser" hingegen halte ich für schlicht und ergreifend falsch, da man eben keinen User zurück gegeben bekommt, sondern ein Attribut des derzeit aktiven Spielers. "getPlayerAttribute" oder "getPlayerField" würde ich ja noch verstehen (streng genommen handelt es sich ja um Daten der Spielfigur/des Chars und nicht des Users).

Ist als Anregung zu verstehen.

Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 17 Jul, 2009 16:25 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
[........]

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa 27 Mär, 2010 01:46 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Funktionen geändert / erneuert und gepostet. Wie gesagt, eher sinnlos. ^^

_________________
Never change a running system. Bullshit! ;)


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

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