Mitglied-163113.12.2004, 13:49 Uhr
Grüße,
wie vielleicht schon in meinen letzten Post's gelesen haben wir ein kleinen Shard. Nun möchte ich für diesen Online Status veröffentlichen. Halt mit Gildennamen, Spielern und deren Skills (nur GM 100 Skills) und halt solche schicken Sachen. Habe hierfür schon etwas gesammelt, komme aber nicht ganz weiter. Eigentlich steckt das Problem im Detail, um von RunUO überhaupt eine Information zu bekommen muss das Ding über ein MySQL laufen. Hierbei kann ich dann Query oder View für meine HP generieren. Bloss, wie bekomme ich RunUO dazu diese Daten auszulagern :d_gutefrage: geschweige warum funktioniert es bei mir nicht :sterne:
Vielleich habt ihr schon einige Erfahrungen damit oder vielleicht auch eine kleine Anleitung. Ich würde mich freuen.
Mitglied-163124.01.2005, 14:51 Uhr
Gibt es niemanden, der das schon einmal gemacht hat ?
Mitglied-154124.01.2005, 20:03 Uhr
MyRunUO: http://www.runuo.com/forum/showthread.php?t=38740&highlight=myrunuo
Du kannst auch mit XML arbeiten, musst also nicht MySQL verwenden.
Mitglied-163125.01.2005, 18:27 Uhr
Das ist aber ein wenig eingeschränkt... oder ?
Gilden finde ich an der standard xml jedoch nicht raus...
Mitglied-154125.01.2005, 20:54 Uhr
XML? Musst du sicher alles selbst scripten. Bei MyRunUO ist schon vieles dabei.
Mitglied-160626.08.2005, 10:57 Uhr
Hat sich das 'Problem' gelöst, ansonsten würde ich hier eine Antwort hinschreiben :)
Mitglied-181326.08.2005, 11:02 Uhr
Schreib doch eine Antwort, damit es andere Leute auch einmal wissen, falls sie einmal das selbe Problem haben sollten ;-)
Mitglied-154126.08.2005, 12:01 Uhr
Bei der neuen RunUO 1.0.0 funktioniert MyRunUO sowieso problemlos, ist sogar gleich beim Originalpaket in den Scripts von RunUO dabei...
Mitglied-160626.08.2005, 12:16 Uhr
Nunja ich würde daraus 2 Status machen
einen WebStatus, wie gewohnt mit Playername + Guildabkürzung und Gildentitel
Und einen zweiten der nur Guilds anzeigt.
WebStatus.cs
protected override void OnTick()
{
if ( !Directory.Exists( \"dein ordner\" ) )
Directory.CreateDirectory( \"Ordnererstellung\" );
using ( StreamWriter op = new StreamWriter( \"Ordner/status.html\" ) )
Der Rest ist halt das Aussehen, kannst du ja so machen wie du lustig bist.
{
op.WriteLine( \"<html>\" );
op.WriteLine( \" <head>\" );
op.WriteLine( \" <title>RunUO Server Status</title>\");
op.WriteLine( \" </head>\" );
op.WriteLine( \" <body>\" );
op.WriteLine( \" <h1>RunUO Server Status</h1>\" );
op.WriteLine( \" Online clients:<br>\" );
op.WriteLine( \" <table>\" );
op.WriteLine( \" <tr>\" );
op.WriteLine( \" <td><font>Name</font></td><td><font>Location</font></td><td><font>Kills</font></td><td><font>Karma / Fame</font></td>\" );
op.WriteLine( \" </tr>\" );
usw. kannst du, wie gesagt ändern, wie du willst.
foreach ( NetState state in NetState.Instances )
{
Mobile m = state.Mobile;
if ( m != null )
{
Guild g = m.Guild as Guild;
op.Write( \" <tr><td>\" );
if ( g != null )
{
op.Write( Encode( m.Name ) );
op.Write( \" [\" );
string title = m.GuildTitle;
if ( title != null )
title = title.Trim();
else
title = \"\";
if ( title.Length > 0 )
{
op.Write( Encode( title ) );
op.Write( \", \" );
}
op.Write( Encode( g.Abbreviation ) );
op.Write( ']' );
}
else
{
op.Write( Encode( m.Name ) );
}
Gildenabkürzung + Titel
eigentlich ist das alles Standart ;)
Kannst du halt editieren bis zum geht nichtmehr.
GuildStatus...
Leg dir eine .cs Datei an die im Grunde genauso aufgebaut ist.
using System;
using System.IO;
using System.Text;
using System.Collections;
using Server;
using Server.Network;
using Server.Guilds;
namespace Server.Misc
{
public class GuildListPage : Timer
{
public static void Initialize()
{
new GuildListPage().Start();
}
public GuildListPage() : base( TimeSpan.FromMinutes( 2.0 ), TimeSpan.FromMinutes( 5.0 ) )
{
Priority = TimerPriority.FiveSeconds;
}
Wie oft die html Datei überschrieben bzw. neu erstellt wird.
Hier sinds, wie man sehen kann 2 - 5 Minuten.
Dann der Replace, was du halt willst hier zB.:
private static string Encode( string input )
{
StringBuilder sb = new StringBuilder( input );
sb.Replace( \"&\", \"&\" );
sb.Replace( \"<lt>\", \">\" );
sb.Replace( \"\\\"\", \""\" );
sb.Replace( \"'\", \"'\" );
sb.Replace( \"ä\", \"ä\" );
sb.Replace( \"ö\", \"ö\" );
sb.Replace( \"ü\", \"ü\" );
return sb.ToString();
}
Dann kommen schon wieder die Ordner und Dateierstellung, wo es hin geschrieben wird.
protected override void OnTick()
{
if( !Directory.Exists( \"dein Ordner\" ) )
Directory.CreateDirectory( \"Ordnererstellung\" );
using( StreamWriter op = new StreamWriter( \"Ordner/Guildstatus.html\" ) )
{
Jetzt kommen wir zu der zuweisung der Gilden;
Hashtable guildList = Guild.List;
IDictionaryEnumerator guildListEnumerator = guildList.GetEnumerator();
Guild guild;
int chaos = 0;
int order = 0;
int regular = 0;
int Enemies = 0;
int Members = 0;
direkt darunter euer 'Design' wie auch beim WebStatus oben.
op.WriteLine( \"<html><head><style>\" );
op.WriteLine( \"<!--\" );
op.WriteLine( \"body { background-color: eure farbe; color: eure farbe; font-size: größe; font-family: eure schriftfarben; text-align: center; }\" );
usw.
Nun folgen die Guilds.
while( guildListEnumerator.MoveNext() )
{
Mobile m = guild.Leader as Mobile;
bool tempfirst;
guild = (Guild)Guild.Find( (int)guildListEnumerator.Key );
Und dann erneut ein Design wie der 'Kasten' der Gilde aussehen soll
op.WriteLine( so wie ihr es halt wollt + Encode(guild.Name) + \" [\" + Encode(guild.Abbreviation) + \"] )
op.WriteLine( \"<tr><td>Leader:</td><td>\" + Encode(guild.Leader.Name) + \"</td></tr>\" );
op.WriteLine( \" wie ihr wollt + zB.: <a>\" + Encode(guild.Website) usw.. );
op.WriteLine( \"so wie ihr wollt \" zB.: + Encode(guild.Charter) + \"usw.\" );
Gildenzuweisung von Order. Chaos, Neutral:
if( guild.Type == GuildType.Regular )
{
op.WriteLine( \"<tr><td>Gesinnung:</td><td>Neutral</td></tr>\" );
regular++;
}
else if( guild.Type == GuildType.Order )
{
op.WriteLine( \"<tr><td>Gesinnung:</td><td>Order</td></tr>\" );
order++;
}
else if( guild.Type == GuildType.Chaos )
{
op.WriteLine( \"<tr><td>Gesinnung:</td><td>Chaos</td></tr>\" );
chaos++;
}
Mitgliederliste Design
op.WriteLine( euer design (\" + guild.Members.Count.ToString() + \"usw.\" );
foreach( Mobile m in guild.Members )
foreach( Mobile m in guild.Members )
{
if (tempfirst != true) op.WriteLine( \", \" );
op.WriteLine( Encode(m.Name) );
tempfirst = false;
}
Nun könnt ihr noch die Gildengegner hinzufügen:
op.WriteLine( \"euer design aufs neue\");
tempfirst = true;
op.WriteLine( \"eure zuweisung\" + guild.Enemies.Count.ToString() + \"usw.\" );
foreach( Guild g in guild.Enemies )
{
if (tempfirst != true) op.WriteLine( \", \" );
op.WriteLine( Encode(g.Name) );
tempfirst = false;
}
Ihr könnt, falls vorhanden, auch Alliierte hinzufügen;
tempfirst = true;
op.WriteLine( design: (\" + guild.Allies.Count.ToString() + \")\" );
foreach( Guild g in guild.Allies )
{
if (tempfirst != true) op.WriteLine( \", \" );
op.WriteLine( Encode(g.Name) );
tempfirst = false;
}
}
Wenn es keine Gilden gibt der if dafür:
else
{
op.WriteLine( \"euer design\" Gibt keine Gilden.\" );
}
Abschluss des Status nochmaliges Design, wie es auf der HP auftauchen soll:
op.WriteLine( \"euer design und text\" );
op.WriteLine( \"design und text again\" );
op.WriteLine( \"usw usw usw.);
Ende des gesamten Scripts;
}
}
}
Eigentlich logisch und auch noch simpel, ich will euch nicht meine ganze datei so hier rein stellen das ihr sie direkt gebrauchen könnt,
so funktioniert es aber in etwa :)
Viel Spaß beim um bzw. neu coden ;)
Ich hoffe ich konnte helfen.
Mitglied-160626.08.2005, 12:20 Uhr
Ihr müsst natürlich die Html datein, die erstellt werden in dem oben angegebenen Ordner auch auf eurer HP 'einbinden'. Sonst gehts logischerweise nicht. :D
Mitglied-163115.01.2006, 17:09 Uhr
Das ist ja alles gut uns schön und danke für das Script. Nur, ein vernünftiges Webaccounting oder CustomReports ist nur schwer möglich ohne eine einigermassen vernünftige DB.
Das MyRunUO von der Version 1.0 habe ich getestet, leider läuft das unter SunUO nicht stabil und musste deshalb auf inport und export von CSV Datein zurückgreifen.
Also danke noch mal für die Antworten.