Zeitsystem

Moderator: Mods - Sphere

Antworten
Nachricht
Autor
Dwayne1988
Senior Mitglied
Beiträge: 101
Registriert: 25 Nov 2007 22:29
Wohnort: Menden Sauerland
Kontaktdaten:

Zeitsystem

#1 Beitrag von Dwayne1988 » 16 Jan 2009 15:46

Hier mal ein kleines erweiterebares Zeitsystem was mit Ratschlägen von Nazghul gescriptet habe.

Hier die nötigen änderungen für das ganze:

sphere.ini
Hier müssen wir nach Timercall gehen und ihm den Wert geben der eine Stunde Ingame ergeben soll.
Zum Beispiel 6 RL Minuten = Ingames eine Stunde

Code: Alles auswählen

// Amount of minutes to call f_onserver_timer %u280 disables this, default%u29
TimerCall=6
Anschliessend suchen wir noch nach EventsRegion und tragen dort folgendes ein:

Code: Alles auswählen

//Events related to all regions
EventsRegion=r_lichtfix
sphere_serv_triggers.scp
Hier müssen wir folgenden Scriptcode einfügen.

Code: Alles auswählen

 [FUNCTION f_onserver_timer] 
f_zeitsystem
sphere_region.scp
Hier müssen wir folgenden Scriptcode eintragen:

Code: Alles auswählen

 [REGIONTYPE r_lichtfix]
ON=@ENTER
SRC.TIMERF 2,f_lichtfix

[FUNCTION f_lichtfix]
SRC.UPDATE
Hier nun das eigentliche Script.

Code: Alles auswählen

[FUNCTION Zeitsetzen] // Setzt die Zeit wo das Zeitsystem starten soll
SERV.LOG Zeitsystem Die Startzeit wurde gesetzt!
var.stunde=1
var.tag=1
Var.monat=1
var.jahr=1500

[FUNCTION f_Zeitsystem] // Zeitrechnung
var.stunde +=1
if (<var0.stunde> > 23)
  var.stunde=0
  var.tag +=1
  if (<var0.tag> > 30)
    var.tag=1
    var.monat +=1
      if (<var0.monat> > 12)
        var.monat=1
        var.jahr +=1
    endif
  endif
endif

//Setze Licht von Tag und Nacht
serv.newitem i_zeitsystem
NEW.p 1,1,0,0
//Lichtlevel
if (<var.stunde> == 0)
new.region.LIGHT 24
elseif (<var.stunde> == 1) || (<var.stunde> == 23)
new.region.LIGHT 22
elseif (<var.stunde> == 2) || (<var.stunde> == 22)
new.region.LIGHT 20
elseif (<var.stunde> == 3) || (<var.stunde> == 21)
new.region.LIGHT 18
elseif (<var.stunde> == 4) || (<var.stunde> == 20)
new.region.LIGHT 16
elseif (<var.stunde> == 5) || (<var.stunde> == 19)
new.region.LIGHT 14
elseif (<var.stunde> == 6) || (<var.stunde> == 18)
new.region.LIGHT 12
elseif (<var.stunde> == 7) || (<var.stunde> == 17)
new.region.LIGHT 10
elseif (<var.stunde> == 8) || (<var.stunde> == 16)
new.region.LIGHT 8
elseif (<var.stunde> == 9) || (<var.stunde> == 15)
new.region.LIGHT 6
elseif (<var.stunde> == 10) || (<var.stunde> == 14)
new.region.LIGHT 4
elseif (<var.stunde> == 11) || (<var.stunde> == 13)
new.region.LIGHT 2
elseif (<var.stunde> == 12)
new.region.LIGHT 0
endif

[ITEMDEF i_Zeitsystem]
ID=i_guildstone
NAME=Zeitsystem
TYPE=t_script

ON=@CREATE
ATTR=attr_decay
TIMER=0

ON=@TIMER
SAY Uhrzeit <dvar.stunde>
SAY Lichtlevel <sector.LIGHT>

[FUNCTION ZEIT]
SRC.SMSG Stunde <dvar0.stunde>, Tag: <dvar0.tag>, Monat <dvar0.monat> Jahr: <dvar0.jahr>
Bei Feedback oder Fehlern könnt ihr mir gern eine PN schicken.
Zuletzt geändert von Dwayne1988 am 11 Mär 2010 23:42, insgesamt 13-mal geändert.
Bild

earlg100

#2 Beitrag von earlg100 » 05 Mai 2009 13:46

Vorschläge:
- bei Funktion Zeit: SYSMESSAGE nicht SES
- dort weiter: <eval> einfügen, damit die .zeit Funktion korrekte Zahlen anzeigt.
- Logausgaben bei ausgeführter Startfunktion ( SERV.LOG Zeitsetzen: Startzeit gesetzt!))

Läuft ansonsten gut!

Dwayne1988
Senior Mitglied
Beiträge: 101
Registriert: 25 Nov 2007 22:29
Wohnort: Menden Sauerland
Kontaktdaten:

#3 Beitrag von Dwayne1988 » 19 Jun 2009 21:39

Updatet...
Schreibfehler entfernt
SERV.LOG bei Zeitsetzen eingebaut
Eval bei .Zeit eingesetzt für richtige Darstellung.
Regionen mit eigenen Licht Leveln sind nun möglich auch wenn hoffe das bessere möglichkeit der umsetzung dafür gibt. (keine 100%function...)
Zuletzt geändert von Dwayne1988 am 30 Jun 2009 21:59, insgesamt 1-mal geändert.
Bild

darksmaug

#4 Beitrag von darksmaug » 30 Jun 2009 16:41

Hallo also ich würde das system gern nutzen. Hab alels da reinkopiet wo es hin muss, aber wenn ich .zeit einbgebe passiert das :

Bild

Naja müsste doch .zeitsetzen eingeben um die Grunszeit zu setzen wie die Variablen halt im script stehen.
Und ich glaub die Zeit ist auch festgefroren.

Hilfe was mach ich falsch =P

Dwayne1988
Senior Mitglied
Beiträge: 101
Registriert: 25 Nov 2007 22:29
Wohnort: Menden Sauerland
Kontaktdaten:

#5 Beitrag von Dwayne1988 » 30 Jun 2009 21:47

Timercall gesetzt und f_zeitsystem in der sphere_serv_triggers.scp gesetzt?...
Generell muss man etwas abwarten nach den zeitsetzen bis eine stunde vergangen ist und das licht sich auch entsprechend schaltet.
Zum testen einfach mal Timercall auf 1 Minute stellen dann wird man das ergebnis wohl sehen.
Bild

darksmaug

#6 Beitrag von darksmaug » 01 Jul 2009 09:45

sooo jetzt teste ich das nochmal.
also war soweit alels richtig. aber das mit der studne hab ich nicht beachtet.

mal sehn was jetzt passiert.

danke erstmal

darksmaug

#7 Beitrag von darksmaug » 03 Jul 2009 19:35

also in der console schreibt er:

19:15:ERROR:(zeitsys.scp,70)Can't resolve <0>
19:15:ERROR:(zeitsys.scp,70)Undefined keyword 'SYSMESSAGE'

is nich normal oder ? =D

Korshurl
Senior Newbie
Beiträge: 50
Registriert: 18 Jan 2009 10:17

Re: Zeitsystem

#8 Beitrag von Korshurl » 04 Jul 2009 01:16

SYSMESSAGE ist ein zulanges Wort für mein geschmack, Sphere versteht auch smsg und ist das gleiche. Ich hatte letztens auch Probleme mit Doppelpunkten, nutz lieber ein Koma dann läuft auch alles rund.

Mache var0 daraus, dann spuckt er dir brav die 0 aus ohne Konsolenfehler:

Code: Alles auswählen

SRC.smsg Stunde <eval <var0.stunde>>, Tag <eval <var0.tag>>, Monat <eval <var0.monat>>, Jahr <eval <var0.jahr>>

und theoretisch geht dvar0 und du kannst eval sogar noch raus kürzen:

Code: Alles auswählen

SRC.smsg Stunde <dvar0.stunde>, Tag <dvar0.tag>, Monat <dvar0.monat>, Jahr <dvar0.jahr>

darksmaug

#9 Beitrag von darksmaug » 05 Jul 2009 15:59

*seuftz* ich stelle mich wohl zu blöd an.
also die anzeige ist jetzt richtig, zeigt alles 1 an, ABER es geht nicht weiter =D
also weder stunde, tag, monat oder jahr zählt weiter.
=(

Korshurl
Senior Newbie
Beiträge: 50
Registriert: 18 Jan 2009 10:17

#10 Beitrag von Korshurl » 08 Aug 2009 15:52

Ja klar kann ich dir auch verraten warum. *g* schau dir das mal genauer an...

Code: Alles auswählen

ON=@CREATE
ATTR=attr_decay
TIMER=0 
Wie bitte schön soll da etwas vorran kommen? ich finde in deinem script nichts das dien timer immer weiter setzt bzw hab ich beim überflug nichts gesehen.

Edit: Ach ja das es im Doungen normale lichtverhältnise gibt würde ich eher von den regionen den flag abfragen und ggf dann erst das lichtlevel setzen

Dwayne1988
Senior Mitglied
Beiträge: 101
Registriert: 25 Nov 2007 22:29
Wohnort: Menden Sauerland
Kontaktdaten:

#11 Beitrag von Dwayne1988 » 08 Aug 2009 17:02

Das ganze system wird durch den Timercall betrieben.

Timercall ist eine Function die erlaubt alle X minuten ausgeloest zu werden.

was er aber ausloest wird in der sphere_serv_triggers.scp
unter diesen schnippsel zugefügt:

[FUNCTION f_onserver_timer]

da dort f_zeitsystem steht wir demnach mit jeden Timercall die function f_zeitsystem aufgerufen womit die Zeit um eine stunde vorgestellt wird.
Bild

Antworten