anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 14 Nov, 2019 08:16

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Atrahor Wetterklasse
BeitragVerfasst: Sa 14 Mär, 2009 13:28 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Servus ich hab Harthas versprochen die Atrahor Wetterklasse mal zu posten.

Die Klasse wird statisch aufgerufen und definiert nicht nur das gesamte wetter sondern legt auch fest welches Wetter wann aufgerufen wird. Es kann festgelegt werden welches Wetter worauf mit welcher Wahrscheinlichkeit folgt, so dass im Schneestürme im Sommer nicht mehr auftreten :-)

Als Vorbedingung benötigt man folgende Methode:

$this->bbcode_second_pass_code('', '
/**
* Gibt gewählte Komponente der Spielzeit zurück:
* h => Stunde
* m => Minute
* @param string $str_part Gewünschte Zeitkomponente (h | m)
* @param string $str_gametime Spielzeit diezerlegt werden soll (im Format hh:mm). Falls null (Standard), wird aktuelle Spielzeit verwendet.
* @return string
*/
function get_gametime_part($str_part, $str_gametime = null)
{
$arr_tmp = array();

if(is_null($str_gametime))
{
$str_gametime = getgametime();
}

$arr_tmp = explode(':',$str_gametime);

switch($str_part)
{
case 'h': return (isset ( $arr_tmp[0] ) ? (int)$arr_tmp[0] : 1);
case 'm': return (isset ( $arr_tmp[1] ) ? (int)$arr_tmp[1] : 1);
default : echo('Fehler: '.$str_part.' als Zeitteil nicht bekannt!'); return -1;
}
}
')

$this->bbcode_second_pass_code('', '
<?php

/**
* Wetterklasse verwaltet das Wetter in Atrahor
* @author Dragonslayer
* @copyright Dragonslayer for Atrahor
*/
class Weather implements Countable, Iterator, ArrayAccess
{
/**
* Neblig
*/
const WEATHER_FOGGY = 0x001;
/**
* Heiss und sonnig
*/
const WEATHER_HOT = 0x002;
/**
* Wechselhaft und kühl, mit sonnigen Abschnitten
*/
const WEATHER_COLD = 0x004;
/**
* Regnerisch
*/
const WEATHER_RAINY = 0x008;
/**
* Warm und sonnig
*/
const WEATHER_WARM = 0x010;
/**
* Kalt bei klarem Himmel
*/
const WEATHER_COLDCLEAR = 0x020;
/**
* Starker Wind mit vereinzelten Regenschauern
*/
const WEATHER_WINDY = 0x040;
/**
* Gewittersturm
*/
const WEATHER_TSTORM = 0x080;
/**
* Schneeregen
*/
const WEATHER_SNOWRAIN = 0x100;
/**
* Schneefälle
*/
const WEATHER_SNOW = 0x200;
/**
* Orkanartige Sturmböen
*/
const WEATHER_STORM = 0x400;
/**
* Sintflutartige Regenfälle
*/
const WEATHER_HEAVY_RAIN = 0x800;
/**
* Frostig mit schmerzhaft beißendem Wind
*/
const WEATHER_FROSTY = 0x1000;
/**
* Starke Hagelschauer
*/
const WEATHER_HAIL = 0x2000;
/**
* Klarer Himmel mit seltsamem Wetterleuchten
*/
const WEATHER_BOREALIS = 0x4000;
/**
* Blutroter Himmel mit leichtem Flammenregen
*/
const WEATHER_FLAMES = 0x8000;
/**
* Sonnenfinsternis
*/
const WEATHER_ECLIPSE = 0x10000;
/**
* Wolkenloser Himmel und Sonnenschein
*/
const WEATHER_CLOUDLESS = 0x20000;
/**
* Stark bewölkt
*/
const WEATHER_CLOUDY = 0x40000;
/**
* Schwül-heiss
*/
const WEATHER_MUGGINESS = 0x80000;
/**
* Schwach bewölkt
*/
const WEATHER_CLOUDY_LIGHT = 0x100000;

/**
* Enthält nähere Infos über die Wettertypen und deren Beziehungen zueinander
* @var array
*/
static $weather = array(
self::WEATHER_FOGGY => array(
'name'=>'Neblig',
'months'=>array(1=>1, 2=>1, 3=>2, 4=>2, 5=>1, 6=>1, 7=>1, 8=>1, 9=>3, 10=>4, 11=>5, 12=>3),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,
self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_SNOW,
self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,
self::WEATHER_SNOWRAIN
)
),
self::WEATHER_HOT => array(
'name'=>'Heiß und sonnig',
'name_night'=>'Drückend schwüle Nacht',
'months'=>array(1=>0, 2=>0, 3=>0, 4=>0, 5=>1, 6=>2, 7=>3, 8=>4, 9=>3, 10=>0, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE
)
),
self::WEATHER_MUGGINESS => array(
'name'=>'Schwül-heiß',
'name_night'=>'Schwül-warme Nacht',
'months'=>array(1=>0, 2=>0, 3=>0, 4=>0, 5=>1, 6=>2, 7=>3, 8=>3, 9=>3, 10=>0, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_STORM,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE
)
),
self::WEATHER_COLD => array(
'name'=>'Wechselhaft und kühl, mit sonnigen Abschnitten',
'name_night'=>'Wechselhaft und kühl, mit sternenklaren Abschnitten',
'months'=>array(1=>1, 2=>2, 3=>2, 4=>3, 5=>1, 6=>1, 7=>1, 8=>1, 9=>2, 10=>3, 11=>4, 12=>1),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_RAINY => array(
'name'=>'Regnerisch',
'months'=>array(1=>2, 2=>2, 3=>2, 4=>4, 5=>2, 6=>2, 7=>2, 8=>2, 9=>2, 10=>3, 11=>4, 12=>2),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_CLOUDY => array(
'name'=>'Stark bewölkt',
'name_night'=>'Dunkle Nacht',
'months'=>array(1=>3, 2=>3, 3=>3, 4=>2, 5=>2, 6=>1, 7=>1, 8=>1, 9=>2, 10=>3, 11=>3, 12=>3),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_CLOUDY_LIGHT => array(
'name'=>'Schwach bewölkt',
'name_night'=>'Nacht mit vereinzelten Sternen',
'months'=>array(1=>3, 2=>3, 3=>3, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2, 9=>3, 10=>3, 11=>3, 12=>3),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_WARM => array(
'name'=>'Warm und sonnig',
'name_night'=>'Lauwarme Nacht',
'months'=>array(1=>0, 2=>0, 3=>1, 4=>2, 5=>3, 6=>3, 7=>4, 8=>4, 9=>3, 10=>1, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_CLOUDLESS => array(
'name'=>'Wolkenloser Himmel und Sonnenschein',
'name_night'=>'Wolkenloser Himmel mit glitzernden Sternen',
'months'=>array(1=>0, 2=>0, 3=>1, 4=>2, 5=>3, 6=>3, 7=>4, 8=>4, 9=>3, 10=>1, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_COLDCLEAR => array(
'name'=>'Kalt bei klarem Himmel',
'months'=>array(1=>4, 2=>4, 3=>3, 4=>1, 5=>0, 6=>0, 7=>0, 8=>0, 9=>3, 10=>4, 11=>4, 12=>4),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_WINDY => array(
'name'=>'Starker Wind mit vereinzelten Regenschauern',
'months'=>array(1=>2, 2=>2, 3=>3, 4=>3, 5=>1, 6=>2, 7=>1, 8=>1, 9=>3, 10=>4, 11=>4, 12=>3),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_TSTORM => array(
'name'=>'Gewittersturm',
'months'=>array(1=>0, 2=>0, 3=>1, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2, 9=>2, 10=>1, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,
self::WEATHER_HAIL,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_SNOW => array(
'name'=>'Schneefälle',
'months'=>array(1=>4, 2=>4, 3=>2, 4=>1, 5=>0, 6=>0, 7=>0, 8=>0, 9=>0, 10=>1, 11=>2, 12=>4),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_STORM => array(
'name'=>'Orkanartige Sturmböen',
'months'=>array(1=>2, 2=>2, 3=>2, 4=>2, 5=>1, 6=>0, 7=>0, 8=>2, 9=>3, 10=>3, 11=>3, 12=>2),
'follows_after'=>array(
self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_HEAVY_RAIN => array(
'name'=>'Sintflutartige Regenfälle',
'months'=>array(1=>1, 2=>1, 3=>2, 4=>2, 5=>2, 6=>1, 7=>0, 8=>0, 9=>1, 10=>2, 11=>2, 12=>2),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_FROSTY => array(
'name'=>'Frostig mit schmerzhaft beißendem Wind',
'months'=>array(1=>4, 2=>4, 3=>3, 4=>1, 5=>0, 6=>0, 7=>0, 8=>0, 9=>0, 10=>3, 11=>4, 12=>4),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_HAIL => array(
'name'=>'Starke Hagelschauer',
'months'=>array(1=>1, 2=>1, 3=>2, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2, 9=>2, 10=>1, 11=>1, 12=>1),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_BOREALIS => array(
'name'=>'Klarer Himmel mit seltsamem Wetterleuchten',
'months'=>array(1=>1, 2=>1, 3=>1, 4=>1, 5=>0, 6=>1, 7=>0, 8=>1, 9=>1, 10=>1, 11=>1, 12=>2),
'follows_after'=>array(
self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_FROSTY,
self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE
)
),
self::WEATHER_FLAMES => array(
'name'=>'Blutroter Himmel mit leichtem Flammenregen',
'months'=>array(1=>0, 2=>0, 3=>0, 4=>0, 5=>0, 6=>0, 7=>0, 8=>0, 9=>0, 10=>0, 11=>0, 12=>0),
'follows_after'=>array(
self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_STORM,self::WEATHER_FROSTY,
self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE
)
),
self::WEATHER_ECLIPSE => array(
'name'=>'Sonnenfinsternis',
'name_night'=>'Besonders dunkle Nacht',
'months'=>array(1=>0, 2=>0, 3=>0, 4=>1, 5=>0, 6=>1, 7=>0, 8=>1, 9=>0, 10=>0, 11=>1, 12=>0),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_HOT,self::WEATHER_MUGGINESS,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_BOREALIS,self::WEATHER_FLAMES,self::WEATHER_ECLIPSE,self::WEATHER_SNOWRAIN
)
),
self::WEATHER_SNOWRAIN => array(
'name'=>'Schneeregen',
'months'=>array(1=>4, 2=>4, 3=>2, 4=>1, 5=>0, 6=>0, 7=>0, 8=>0, 9=>0, 10=>1, 11=>2, 12=>4),
'follows_after'=>array(
self::WEATHER_FOGGY,self::WEATHER_COLD,self::WEATHER_RAINY,self::WEATHER_CLOUDY,self::WEATHER_CLOUDY_LIGHT,self::WEATHER_CLOUDLESS,
self::WEATHER_WARM,self::WEATHER_COLDCLEAR,self::WEATHER_WINDY,self::WEATHER_TSTORM,self::WEATHER_SNOW,self::WEATHER_STORM,self::WEATHER_HEAVY_RAIN,self::WEATHER_FROSTY,
self::WEATHER_HAIL,self::WEATHER_FLAMES,self::WEATHER_SNOWRAIN
)
)
);

/**
* Das aktuelle Wetter
*
* @var int
*/
static $actual_weather;

///Iterator Interface

public function rewind() {
reset(self::$weather);
}

public function current() {
$var = current(self::$weather);
return $var;
}

public function key() {
$var = key(self::$weather);
return $var;
}

public function next() {
$var = next(self::$weather);
return $var;
}

public function valid() {
$var = self::current() !== false;
return $var;
}

///END Iterator Interface

///Countable Interface
public function count()
{
$var = count(self::$weather);
return $var;
}
///END Countable Interface

///ArrayAccess Interface
public function offsetExists ($offset)
{
return isset(self::$weather[$offset]);
}
public function offsetGet ($offset)
{
return self::$weather[$offset];
}
public function offsetSet ($offset, $value)
{
self::$weather[$offset] = $value;
}
public function offsetUnset ($offset)
{
unset(self::$weather[$offset]);
}
///END ArrayAccess Interface

/**
* Ermittelt neues Wetter und speichert dieses in DB; gibt ID des neuen Wetters zurück
*
* @param int $weather_id ID des zu setzenden Wetters. Falls 0, wird dieses ermittelt (optional, Standard 0)
* @return int Neue Wetter-ID
*/
public function set_weather ($weather_id=0)
{
$arr_act_weather = self::get_weather();

if(!$weather_id)
{ // Ermitteln

$month = get_gamedate_part('m');
$list = array();

foreach(self::$weather as $id => $w)
{
if($w['months'][$month] > 0 && in_array($arr_act_weather['id'],$w['follows_after']))
{
for($i=0;$i < $w['months'][$month];$i++)
{
$list[] = $id;
}
}

}

$weather_id = $list[ e_rand(0,sizeof($list)-1) ];

}

savesetting('weather',$weather_id);

self::$actual_weather = $weather_id;

return(self::$weather[$weather_id]);

}

/**
* Aktualisiere das im Objekt abgespeicherte Wetter
*/
public function read_actual_weather()
{
self::$actual_weather = getsetting('weather',0);
}

/**
* Ermittelt aktuelles Wetter
*
* @return array Wetter-Array des aktuell vorherrschenden Wetters
*/
public function get_weather ()
{

$int_saved_weather = self::$actual_weather;
$time = getgametime(true);
$hour = get_gametime_part("h");

$arr_w = self::$weather[$int_saved_weather];

$arr_w['id'] = $int_saved_weather;

// Nacht
if( ($hour > 20 || $hour < 6) && isset($arr_w['name_night']) )
{
$arr_w['name'] = $arr_w['name_night'];
}

return($arr_w);

}

/**
* Überprüft, ob das aktuelle Wetter dem übergebenen Wetterarten gleicht
*
* @param int $int_weather
* @return bool
*/
public function is_weather($int_weather)
{
return self::$actual_weather & $int_weather;
}
} //End Class weather

//Ja, das muss hier wirklich stehen!
Weather::read_actual_weather();

?>
')

Um sich ein Wetter zu holen ruft man das ganze wie folgt auf:
$this->bbcode_second_pass_code('', '
$arr_weather = Weather::get_weather();
')

Um das wetter an einem neuen Tag zu verändern wird in der setnewday.php folgender Code eingebunden:

$this->bbcode_second_pass_code('', '
// Wetter (sollte nach Datum erfolgen)
Weather::set_weather();
')

Will man ein bestimmtes wetter setzen nutzt man

$this->bbcode_second_pass_code('', '
//Ein Beispiel
Weather::set_weather(Weather::WEATHER_WINDY);
')

Ich würd mich freuen wenn ihr Verbesserungen oder neue Wetterarten hinzufügen würdet und sie dann hier ebenfalls ausstellt.

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 14 Mär, 2009 13:36 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Wunderschön, ich danke dir viel Mals.
Werde sie bei Gelegenheit auch ausprobieren. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 14 Mär, 2009 16:09 
Offline
Held
Held
Benutzeravatar

Registriert: Mi 10 Dez, 2008 17:10
Beiträge: 235
Wohnort: München
Geschlecht: Männlich
LoGD: läuft derzeit Lokal
öhm... ich würd das auch gern bei mir einbauen, nur... :/

den ersten Abschnitt denke ich, kann ich in die lib/functions.lib.php packen, nur wohin mit dem rest? muss ich da den inhalt der gameplay.misc.php überschreiben? oder erstmal ne eigene datei anlegen

_________________
Hungrig in München? www.24lieferservice.de
___________________________________________________
spiele auch Du Quests of Gallendor (Welt 1 nur über Einladung möglich)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 14 Mär, 2009 16:18 
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/
Wow, sehr schön ordnetlich und die implementieren Interfaces stellen ein schöne Schmankerl dar.
Womöglich wäre die Implementierung über einzelne Wetterzustände als Objekte noch ein bisschen dynamischer und ob man nun eine statische Klasse verwendet oder ein Singleton.... aber vor allem featuremäßig ein klasse Ding (ha-ha)

Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 19:00 
Offline
User
User

Registriert: So 24 Sep, 2006 17:33
Beiträge: 23
Wohnort: dresden
Geschlecht: Männlich
hallo, ichdenk mal da die wetterklasse von dragonslayer eingestellt wurde dass es auch für die dragonslayer-version gemacht ist?
gibt es etwas ähnliches auch für die normale 0.9.7er?
mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 19:06 
Offline
Held
Held

Registriert: Fr 17 Okt, 2008 20:06
Beiträge: 253
Geschlecht: Männlich
LoGD: off
Wenn ich mich nicht ganz täusche gibts in deer 0.97 schon ein Wetter system oder nicht? Nur ob das wegen den Schneestürmen im Sommer z.b. .. ka ob das in der 0.97 auch so ist

_________________
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  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 19:12 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
In der 0.9.7 EXT GER gibt es tatsächlich ein kleines Wetter-System ( setnewday.php ). Nur lässt die Klasse von Dragonslayer deutlich mehr Möglichkeiten zu. Gewisse Wetter-Reihenfolgen (Schnee nach Wolken, Flammenregen nach warmem Wetter, monatliche Eingrenzung (Bestimmtes Wetter nur in bestimmten Monaten), Unterteiltung Tag / Nacht, e.t.c).

Man kann diese Klasse allerdings auch in die 0.9.7 einbauen - Dragonslayer hat ja quasi bereits beschrieben wie.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 19:58 
Offline
User
User

Registriert: So 24 Sep, 2006 17:33
Beiträge: 23
Wohnort: dresden
Geschlecht: Männlich
öhm, hat er?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 20:00 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Er erklärt wie man das Wetter setzt, und wie man es abruft. Mehr braucht man nicht ;-)
Nun musst du natürlich noch die betreffenden Zeilen in der setnewday.php ausfindig machen und ersetzen. Und die jeweilen Stellen bearbeiten, wo das Wetter ausgegeben wird. Eine dateiübergreifende Suche macht das allerdings eine kleine Sache.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Fr 12 Feb, 2010 20:11 
Offline
Held
Held

Registriert: Fr 17 Okt, 2008 20:06
Beiträge: 253
Geschlecht: Männlich
LoGD: off
nur vll. den namen der datei wo die Klassen des Wetters definiert werden.. oder ist das egal? Oder bin ich blind (weil mich würde das auch interresieren.. habe zwar noch nie ein AUge aufs Wetter geworfen.. aber logisch wäre es schon^^)

_________________
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  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 13 Feb, 2010 04:07 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Zur Zeit wird es in der setnewday.php in die settings geschrieben.
Aber der Name der Wetter-Klassen-Datei ist egal. Muss nur in die common.php eingebunden werden ( Oder zumindest in all jene Dateien, wo sie später gebraucht wird).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 13 Feb, 2010 10:39 
Offline
Held
Held

Registriert: Fr 17 Okt, 2008 20:06
Beiträge: 253
Geschlecht: Männlich
LoGD: off
Harthas hat geschrieben:
Zur Zeit wird es in der setnewday.php in die settings geschrieben.
Aber der Name der Wetter-Klassen-Datei ist egal. Muss nur in die common.php eingebunden werden ( Oder zumindest in all jene Dateien, wo sie später gebraucht wird).


ok danke. Dass heißt dann überall

require_once "wetterklassen.php"; falls ich sie so nenn, richtig?

_________________
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  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 13 Feb, 2010 13:10 
Offline
User
User

Registriert: So 24 Sep, 2006 17:33
Beiträge: 23
Wohnort: dresden
Geschlecht: Männlich
also:
in die z.b. village.php
require_once "wetter.php";
und
$arr_weather = Weather::get_weather();

in die setnewday.php
Weather::set_weather();

in die common.php die
function get_gametime_part($str_part, $str_gametime = null)
...

und das wetterzeug in die z.b.
wetter.php

alles so richtig?
mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: Sa 13 Feb, 2010 13:41 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Ja, das klingt soweit eigentlich in Ordnung.
Nicht zu vergessen: Das alte Wetter-Zeugs entfernen. Wird ja nicht mehr gebraucht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: So 14 Feb, 2010 16:32 
Offline
User
User

Registriert: So 24 Sep, 2006 17:33
Beiträge: 23
Wohnort: dresden
Geschlecht: Männlich
so, versuchs noch mal hier:
function get_gametime_part($str_part, $str_gametime = null)
...
wie angefordert eingebaut.
nach einbau wird bei einem neuen tag dieser fehler ausgegeben:
Fatal error: Call to undefined function get_gamedate_part()

die funktion ist gametime
und im fehler steht gamedate.

wie ist dieser fehler nun zu beseitigen?
auch wenn man in der wetterfunktion in zeile 376 gamedate in gametime ändert, erscheint zwar kein fehler mehr, aber auch kein wetter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: So 14 Feb, 2010 16:46 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
$this->bbcode_second_pass_code('', '/**
* Gibt gewählte Komponente des Spieldatums zurück:
* d => Tag
* m => Monat
* y => Jahr
* Wenn invalides Datum übergeben wird, schreibt Funktion Meldung in das Syslog
*
* @param string $str_part Gewünschte Datumskomponente (y | m | d)
* @param string $str_gamedate Spieldatum, das zerlegt werden soll (im Format y-m-d). Falls null (Standard), wird aktuelles Spieldatum verwendet.
*/
function get_gamedate_part ($str_part,$str_gamedate = null)
{

$arr_tmp = array();

if(is_null($str_gamedate))
{
$str_gamedate = get_raw_gamedate();
}

$arr_tmp = explode('-',$str_gamedate);

// Kein valides Datum
if(count($arr_tmp) != 3)
{
systemlog('`^Code-Fehler: Invalides Datum in get_gamedate_part(), Param str_gamedate = '.$str_gamedate.'; Seite: '.$GLOBALS['SCRIPT_NAME']);
}

switch($str_part)
{
case 'y': return (isset ( $arr_tmp[0] ) ? (int)$arr_tmp[0] : 1);
case 'm': return (isset ( $arr_tmp[1] ) ? (int)$arr_tmp[1] : 1);
case 'd': return (isset ( $arr_tmp[2] ) ? (int)$arr_tmp[2] : 1);
default : echo('Fehler: '.$str_part.' als Datumsteil nicht bekannt!'); return -1;
}

}')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Atrahor Wetterklasse
BeitragVerfasst: So 14 Feb, 2010 17:11 
Offline
User
User

Registriert: So 24 Sep, 2006 17:33
Beiträge: 23
Wohnort: dresden
Geschlecht: Männlich
harthas
function get_gamedate_part
und dragonslayers anfangs geschriebene
function get_gametime_part(
sind nun in der common.php

fehlt gametime in der common gibts fehler,
fehlt gamedate in der common gibts fehler,

gametime_part und gamedate_part sind nun in der common, alles in der setnewday, wetter.php ist angelegt.
es wird nach neuem tag nichts angezeigt.
und nun der nächste fehler:
Fatal error: Call to undefined function get_raw_gamedate()

wie viel funktionen werden noch benötigt?
ich lass es damit sein.
trotzdem danke


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 1 Gast


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