anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 23 Apr, 2024 11:52

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Newday ohne Seite
BeitragVerfasst: Mo 02 Jul, 2007 14:54 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Zur Zeit schwebt mir eine etwas größere Änderung für mein LoGD vor, hier müssen aber alle änderungen in der newday.php ohne output geschehen. Sprich man bekommt die Zinsen, vl. nen Buff, Hp's werden aufgefüllt, Anwendungen, Erfahrung und so weiter aber es darf keine Neuer-Tag-Seite aufgerufen werden. ->Der User darf (während er z.B. im Wald kämpft oder Chattet) nur an der Veränderung in seinen Werten merken dass ein neuer Tag angebrochen ist, soll jedoch am selben Ort bleiben.

Ich würde das ganze ganze gern über die setnewday machen, z.B. mit
[php]db_query("UPDATE accounts SET hitpoints=maxhitpoints WHERE loggedin=1 usw... ;");[/php]
doch lassen sich damit keine individuellen Buffs verteilen. Außerdem sollen die bisher aktiven Buffs nicht verschwinden.

Wie würdet ihr die Sache angehen?

Lg,

Song Sinen

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 16:42 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Mo 24 Apr, 2006 18:21
Beiträge: 408
Geschlecht: Männlich
LoGD: http://localhost
mit einem redirect vielleicht? das wäre meiner meinung nach das einfachste. Einfach in die newday.php einbauen, das es zur letzten seite kommt, wie sonst mit dem link...

_________________
Mal wieder da...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 17:19 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Oder anstatt den Redirect auf den neuen Tag einfach dort die Werte ändern... Man munkelt, es sei die Funktion checkday(). Könnte aber auch is_new_day() sein... (nicht isnewday()).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 17:21 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 19 Mai, 2005 12:49
Beiträge: 112
Hallo Sinen,

die Idee find ich klasse ( wenn ichs richtig verstanden habe), besodners wenn man gard im Rpg ist und schreibt ohne auf die Zeit zu achten (bzw abschickt ohne auf die zeit zu achten) wäre Deine Idee klasse, weil man durch den neuen Tag nicht seinen ganzen Text verliert.
g Ne lösung hab ich ( wer hätts anders erwartet) nicht dafür, wollt nur sagen das ich die idee gut find

Newbi

_________________
....Kenny ist tot- es lebe Elvis
~~~~*~~~~
A:Weist du was auf einem reinen RPG Server echt von Vorteil sein kann?
M: Nein was?
A:..Wenn man lesen kann


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 17:24 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
newbi hat geschrieben:
Hallo Sinen,

die Idee find ich klasse ( wenn ichs richtig verstanden habe), besodners wenn man gard im Rpg ist und schreibt ohne auf die Zeit zu achten (bzw abschickt ohne auf die zeit zu achten) wäre Deine Idee klasse, weil man durch den neuen Tag nicht seinen ganzen Text verliert.
g Ne lösung hab ich ( wer hätts anders erwartet) nicht dafür, wollt nur sagen das ich die idee gut find

Newbi


Lol? Den Text verliert man nur, wenn der Programmierer so doof war, addcommentary() nach checkday() zu setzen anstatt vorher :lol:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 17:27 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 19 Mai, 2005 12:49
Beiträge: 112
damit kann ich das schon beheben?*gleich mal hingeht und versucht^^*

ok Edit: ist bei mir vor Checkday, aber trozdem verlier ich die posts

_________________
....Kenny ist tot- es lebe Elvis
~~~~*~~~~
A:Weist du was auf einem reinen RPG Server echt von Vorteil sein kann?
M: Nein was?
A:..Wenn man lesen kann


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 18:00 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Ok, danke.^^

Ich dachte eigentlich daran den newday einfach abzuschaffen und die Spieltage pro Tag auf 24 zu setzen. Per setnewday bekommt dann jeder Chara z.B. +10 Hp +1 Benutzung in der Spezialfertigkeit, -5 drunkenness, usw.. (natürlich WHERE hitpoints<maxhitpoints, WHERE turns<100 usw. als Limit). Wenn man stirbt werden die Runden nicht auf 0 gesetzt sondern nur -10 abgezogen, man soll auch ins Negative kommen können.

Kurz: Der Spieler regeneriert langsam usw. bekommt auch Zinsen, Runden wenn er nicht on ist... Wenn man mal 1,2 Tage nicht kann hat man einiges aufzuholen. (Das ganze ist im Standart-LoGD vl. nicht so toll doch ich hab ja auch keinen Drachen mehr.)

Dazu noch ein Zeit-Feld in der Datenbank (in der setnewday zeit+=1, if 25 zeit = 1) das wenn es den Wert 1 hat das Wetter usw. ändert.

In einer Umfrage waren die Spieler zwar zu fast 100% dafür,
aber ich befürchte dass die Level-Spieler (sprich die nich so aufs RP stehen) dann nur noch alle 2,3 Tage on kommen und schnell Runden abarbeiten. Das schadet dann der Community. 8/

Ach ja...
*unentschlossen ist*

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 18:47 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Okay, dann geht dieser Weg: Tabelle "Transaktionen", in der du die Aktionen einnspeicherst, und n' Cronjop, der die newday.php ausführt (Mit Passwort verriegelt). Dann trägst du in die Transaktionstabelle zum Beispiel für jeden User ein:
$this->bbcode_second_pass_code('', 'acctid |what |value
1 |newdayv |NULL')

Per Spieleinstellung ist geregelt, wieviel newdayv von was alles ist, und dann bei jedem Klick z.B. auf die village.php prüfst du, ob da was da ist, in der Tabelle, wenn ja, aktualisierst du es für den Aktuellen Account. Ein Update quer über die Account-Datenbank ist SEHR gefährlich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 19:47 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
newbi hat geschrieben:
damit kann ich das schon beheben?*gleich mal hingeht und versucht^^*

ok Edit: ist bei mir vor Checkday, aber trozdem verlier ich die posts


setz einfach den checkday vor den page footer in den Seiten und du hast definitiv keinen Text mehr weg..

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 20:12 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Da hast du wohl recht... danke Elli!^^
Dann versuch ich mich mal dran, wenn das mit dem Cronjob bugfrei läuft, post ichs hier.

EDIT:
Hm, gut jetzt weis ich a) was ein cronjob is und b) das mein Host (Hosteurope) sie nicht zulässt. 8/ Schade...

Obwohl ich ihn vl. garnicht brauche, ich lass einfach die Tabelle in der setnewday schreiben und dann wie du sagst einzeln auslesen. *mal probier*

EDIT²:
Apropos, wie war das mit dem redirect gemeint?
Wie merkst du dir wo der User vorher war um ihn vom newday zurückzuführen? Oder sollte ich den checknewday() einfach auf dem Dorfplatz und nur dort machen um dem Problem aus dem Weg zu gehen?

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 20:37 
Offline
Großmeister
Großmeister

Registriert: Fr 21 Jul, 2006 00:00
Beiträge: 416
o.O wieso so umständlich?
Einfach in function checkday gucken ob Spieler neuen Tag haben darf wenn ja redirect auf Datei X dort werden die Werte gesetzt und dann wird von dort aus mit hilfe eines redirects der Spieler wieder dort hin gebracht wo er vor dem neuen Tag war...
EDIT:
Man merkt an dem Accountsfeld "restorepage" wo der User zuletzt war ;)
dort wird der Pfad zur letzten Datei gespeichert auf dem sich der User
zuletzt im Game befunden hat


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 20:45 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Hm, das erste hab ich in meinem Post ja ausgefürht aber das zweite gefällt mir auch recht gut. ^^ Restorepage benutzt er doch auch in der Bio wenn ich mich nicht irre...

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 20:49 
Offline
Großmeister
Großmeister

Registriert: Fr 21 Jul, 2006 00:00
Beiträge: 416
Nein in der Bio wirds über die URL gemacht ;)
im Link zur Bio wird in $_GET ein neuer Arrayschlüssel angelegt mit
dem Namen return und als Wert hat er den Pfad zur zuletzt aufgerufenden
Datei ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 20:54 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
^^ Ok.
Restorepage also...

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 21:46 
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 hätte jetzt spontan alle Änderungen der Newday.php in eine Funktion gepackt, den User übergeben oder geglobalt und dann ganz normal mit desm Script weitergemacht. So spart man sich den redirect...

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 22:18 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 19 Mai, 2005 12:49
Beiträge: 112
gg und wie hättest du das gemacht Auric?


(irgendie komm ich mir je länger ich hier lese, noch dümmer vor..zum heulen)

_________________
....Kenny ist tot- es lebe Elvis
~~~~*~~~~
A:Weist du was auf einem reinen RPG Server echt von Vorteil sein kann?
M: Nein was?
A:..Wenn man lesen kann


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 22:19 
Offline
Großmeister
Großmeister

Registriert: Fr 21 Jul, 2006 00:00
Beiträge: 416
Hmm würde auch gehen ;)
einfach nee Function die schaut ob Werte gesetzt werden sollen
wenn ja setzt sie die Werte und das ganze ruft man einfach in der common
auf


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 02 Jul, 2007 23:29 
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/
newbi hat geschrieben:
gg und wie hättest du das gemacht Auric?

Erstmal ne neue Datei anlegen, in die die funktion reinkommt - ist zwar etwas doppelt gemoppelt, aber ordentlicher und performanter.
Da hinein kommen nun alle relevanten Wertsetzungen aus der newday.php: Berechnung der neuen Waldkämpfe, Charmemodifikationen und der Ganze Kram, der wieder auf null gesetzt werden muss, wie drunkenness usw.
die wird dann anstatt dem Redirect auf die newday.php erst eingebunden (die Datei) und dann aufgerufen. Fertig ist der Salat!

Hier muss man nur aufpassen, das man Fälle wie Neuanmeldung/Drachenkill beachtet, also die normale Rassenwahl usw. nicht zerschiest, sondern gesondert behandelt. Prinzipiell dürften die dafür nötigen IF-Verzeigungen aber ja bereits in der newaday.php stehen.

Ich kann dir jetzt leider keine fertige Lösung präsentieren, da ich meine newday.php nicht zuletzt eines anderen Rassensystems reichlich umgemuddelt habe und es auch schon recht spät ist.

Aberich hoffe, du kannst damit was anfengan - ist ja großteils Copy & Paste.

Auric :wink:

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 05 Jul, 2007 10:53 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Ok, hier eine kurze Umbauanleitung:
(Ist alles glaub ich recht selbst erklärend. Ach ja, die Spielerei mit der 19.30-20.30 Uhrzeit ersetzt den Cronjob, um die Uhrzeit kommen fast zu 100% immer User on laut meiner Statistik, sollten keine kommen fällt einfach ein Neuer Tag aus für alle Spieler die an diesem Tag schon on waren, was aber sehr unwahrscheinlich und sicher zu verkraften ist.
Die andere Spielerei mit dem <19.30 sorgt dafür dass die Änderung beim ersten Besuch des ersten Users an diesem RL Tag stattfindet. Man könnte also meinen es wäre um 0 Uhr gewesen, sprich am neuen Tag. Dass es nicht so ist kann niemand merken. (Fällt ein Baum im Wald und niemand ist da der es hört...^^)

Änderungen in der Datenbank:
Erstelle:
statustag int(2) default '1'
statuswert int(11) default '0'
Ändere:
turns (turns soll negativ werden können, darum das unsigned weg!)

Änderungen überall dort wo es vorkommt (v.a. shades.php und die specials):
Statt turns=0; turns-=20; (o.ä.)

Änderung forest.php (es sei denn ihr macht ne variable in den weiter-nav in der newday, wie das geht wurde von Auric hier ja schon erklärt)
checkday() raus! (nur noch in der village!)

Und nun zum eigentlichen Hauptteil:

Änderung setnewday:

Setze vor
[php]?>[/php]
das hier
[php]
}
if(date("Gi")>="1930" && date("Gi")<="2030"){ // Nur einmal in 24 h beim ersten Besuch des Tages B
db_query("UPDATE `global` SET `status` = '1' WHERE `tag` = '1';");}[/php]

Setze vor den Teil in der setnewday der nur einmal in 24 h ausgefürht werden soll (das wetter soll sich ja nicht stündlich ändern!)

[php]// Warum hier extra Felder für Runden usw? Einfach die Spieltage zählen...
db_query("UPDATE accounts SET statuswert=statuswert+1;");

// Nur einmal in 24 h beim ersten Besuch des Tages A
$sql = "SELECT status FROM global WHERE `tag` = '1'";
db_query($sql);
$result = db_query($sql);
$row = db_fetch_assoc($result);
$status=$row['status'];
if($statustag==1 && date("Gi")<"1930"){ // Nur einmal in 24 h Anfang
db_query("UPDATE `global` SET `status` = '0' WHERE `tag` = '1';");
db_query("UPDATE `accounts` SET `statustag` = '1';");[/php]

Alles was jedesmal ausgeführt werden soll kommt _davor_!

Jetzt noch zur newday.php

Wir haben 3 Teile:
1. Systemkram usw, soll immer ausgefürht werden
2. Die Änderungen die nur beim ersten Besuch an diesem Tag stattfinden sollen (der User kann bis zu 24 newdays haben, aber nur beim 1. kommt eine Seite und manche Änderungen kommen auch nur hier=
3. Der Kram der Stündlich aktualisiert werden soll wie runden, hp usw.

Die Reihenvolge macht ihr wie oben beschrieben (wobei 1 und 3 auch zusammenfallen können. Wichtig ist nur:

Das kommt vor den 2. Teil:

[php]// (2/3) 1/24 - das hier soll nur einmal in 24 h durchlaufen!
if ($session['user']['statustag']==1){
$session['user']['statustag']=0;[/php]

Das hier zwischen den 2. und den 3. Teil:
[php]
$neuertag=1;
addnav("Reise, Reise!","village.php");}[/php]

Und das vor den footer:
[php]if($neuertag!=1){
redirect("village.php");}[/php]

Ach ja, bei mir gibt es kein Totenreich mehr, wie ihr das mit alive macht müsst ihr euch dann wohl überlegen. 8/ Und ihr müsst die Anzahl der neuen Tage pro Kalendertag auf 24 setzen. (Oder wann auch immer die Erholung kommen soll.)

Und noch ein Beispiel für die Abrechnung von statuswert (sprich der ZEit die man nicht on war) für die Werte:

[php]// (3/3) 24/24 - das hier rechnet die Werte ab!
$statuswert=$session['user']['statuswert'];
$session['user']['statuswert']=0;
// Erholung
if ($session['user']['turns']<50){
$session['user']['turns']+=$statuswert*4;
if ($session['user']['turns']>50)$session['user']['turns']=50;}
// Drunkenness baut ab
if ($session['user']['drunkenness']>=0){
$session['user']['drunkenness']-=$statuswert*8;
if ($session['user']['drunkenness']<0)$session['user']['drunkenness']=0;}[/php]

Lg,

Song Sinen

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

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