anpera.net
http://anpera.homeip.net/phpbb3/

Atrahor Wetterklasse
http://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=4834
Seite 1 von 1

Autor:  dragonslayer [ Sa 14 Mär, 2009 13:28 ]
Betreff des Beitrags:  Atrahor Wetterklasse

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.

Autor:  Harthas [ Sa 14 Mär, 2009 13:36 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

Wunderschön, ich danke dir viel Mals.
Werde sie bei Gelegenheit auch ausprobieren. ;-)

Autor:  Liath [ Sa 14 Mär, 2009 16:09 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

ö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

Autor:  Auric [ Sa 14 Mär, 2009 16:18 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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

Autor:  the-black-rain [ Fr 12 Feb, 2010 19:00 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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

Autor:  Patzue [ Fr 12 Feb, 2010 19:06 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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

Autor:  Harthas [ Fr 12 Feb, 2010 19:12 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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.

Autor:  the-black-rain [ Fr 12 Feb, 2010 19:58 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

öhm, hat er?

Autor:  Harthas [ Fr 12 Feb, 2010 20:00 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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.

Autor:  Patzue [ Fr 12 Feb, 2010 20:11 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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^^)

Autor:  Harthas [ Sa 13 Feb, 2010 04:07 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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).

Autor:  Patzue [ Sa 13 Feb, 2010 10:39 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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?

Autor:  the-black-rain [ Sa 13 Feb, 2010 13:10 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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

Autor:  Harthas [ Sa 13 Feb, 2010 13:41 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

Ja, das klingt soweit eigentlich in Ordnung.
Nicht zu vergessen: Das alte Wetter-Zeugs entfernen. Wird ja nicht mehr gebraucht.

Autor:  the-black-rain [ So 14 Feb, 2010 16:32 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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.

Autor:  Harthas [ So 14 Feb, 2010 16:46 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

$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;
}

}')

Autor:  the-black-rain [ So 14 Feb, 2010 17:11 ]
Betreff des Beitrags:  Re: Atrahor Wetterklasse

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

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/