Genau dieser Meinung bin ich eigentlich auch, dennoch muss man dazu sagen, wird dann nicht cheaten möglich? Weil irgendwie muss ja überprüft werden, ob ein Client sich korrekt bewegt.
Ok, in dem Sinne habt ihr recht. Jedoch frage ich mich ob dies nicht zu anfordernd wäre. Es muss doch irgendwie eine einfache Möglichkeit geben zu überprüfen, ob ein Spieler auf der Position stehen darf oder nicht.
Das Problem ist ich kann mir das derzeit schlecht vorstellen, weil eine Spielwelt besteht ja aus 3D Objekten und damit kann ja eine "Konsolenanwendung" nichts anfangen. Die Frage ist, welche Informationen ich speichern müsste um sowas zu überprüfen.
Ich habe derzeit ein Problem was die Entwicklung eines RPG Spiels betrifft. Ich kann mir nicht wirklich vorstellen wie man die Bewegung eines Spielers auf dem Host Server gegenprüfen könnte. Auf Clientseite hat man ja die Unterstützung der 3D Engine und kann auf Objektkollision prüfen etc. Auf dem Server jedoch hat man nicht sollche Informationen.
Ich habe auch überlegt die Heightmap (also das Terrain) als Information auf dem Server abzulegen, jedoch gibt es ja in der Spielwelt auch Objekte auf denen der Spieler stehen kann und diese werden ja damit nicht erfasst. Ich hab irgendwie einen Knoten im Kopf o.O
Gibt es eine Idee oder Ansatz wie man das realisieren kann?
Habe eine Frage bzgl der Vererbung von Klassen in WCF. Ich habe 2 Typen:
[DataContract]
[KnownType(typeof(MessageDB))]
public class Message : ICulvertEntry
{
// --------------------------------------------------------
// Class Properties
// --------------------------------------------------------
/// <summary>
/// Gets or sets the entry ID.
/// </summary>
/// <value>
/// The entry ID.
/// </value>
[DataMember]
public int EntryID
{
get;
set;
} // Property: EntryID
/// <summary>
/// Gets or sets the sender ID.
/// </summary>
/// <value>
/// The sender ID.
/// </value>
[DataMember]
public int SenderID
{
get;
set;
} // Property: SenderID
/// <summary>
/// Gets or sets the receiver ID.
/// </summary>
/// <value>
/// The receiver ID.
/// </value>
[DataMember]
public int ReceiverID
{
get;
set;
} // Property: ReceiverID
/// <summary>
/// Gets or sets a value indicating whether this <see cref="Message"/> is readed.
/// </summary>
/// <value>
/// <c>true</c> if readed; otherwise, <c>false</c>.
/// </value>
[DataMember]
public bool Readed
{
get;
set;
} // Property: Readed
/// <summary>
/// Gets or sets the subject.
/// </summary>
/// <value>
/// The subject.
/// </value>
[DataMember]
public String Subject
{
get;
set;
} // Property: Subject
/// <summary>
/// Gets or sets the body.
/// </summary>
/// <value>
/// The body.
/// </value>
[DataMember]
public String Body
{
get;
set;
} // Property: Body
} // class Message
/// <summary>
/// The MessageDB Class
/// </summary>
[DataContract]
public class MessageDB : Message
{
// --------------------------------------------------------
// Class Properties
// --------------------------------------------------------
/// <summary>
/// Gets or sets the owner ID.
/// </summary>
/// <value>
/// The owner ID.
/// </value>
[DataMember]
public int OwnerID
{
get;
set;
} // Property: OwnerID
// --------------------------------------------------------
// Class Functions
// --------------------------------------------------------
/// <summary>
/// Initializes a new instance of the <see cref="MessageDB"/> class.
/// </summary>
public MessageDB()
{
} // Constructor
/// <summary>
/// Initializes a new instance of the <see cref="MessageDB"/> class.
/// </summary>
/// <param name="ownerID">The owner ID.</param>
/// <param name="senderID">The sender ID.</param>
/// <param name="receiverID">The receiver ID.</param>
/// <param name="subject">The subject.</param>
/// <param name="body">The body.</param>
public MessageDB(int ownerID, int senderID, int receiverID, String subject, String body)
{
if (subject == null) throw new ArgumentNullException("subject");
if (body == null) throw new ArgumentNullException("body");
OwnerID = ownerID;
SenderID = senderID;
ReceiverID = receiverID;
Subject = subject;
Body = body;
} // Constructor
} // class MessageDB
Die Klasse MessageDB benutze ich um lokal auf der Festplatte zu speichern und besitzt noch einen zusätzlichen Parameter. Dann habe ich noch eine Service Funktion:
[OperationContract]
[WebGet(UriTemplate = "/GetInboxMessages")]
[Description("Return all inbox messages.")]
List<Message> GetInboxMessages();
Diese Funktion gibt auch alles sauber serialisiert als JSON zurück, jedoch auch den Member "OwnerID" von MessageDB. Ist es irgendwie möglich das nur die DataMember von Message serialisiert zurückgegeben werden?
Manchmal ist es einfacher als man glaubt :-) Man muss lediglich die Anwendung weiter ausführen, wenn Visual Studio eine unbehandelte Fehlermeldung wirft. Anscheinend wird der Fehler dennoch abgefangen wie erhofft.
Ich habe derzeit das Problem, das keine Exceptions weiter getriggert werden bei einem WebService. Ich kann mir jedoch nicht erklären warum.
// Initialize servicehost with with this as singletoninstance
_serviceHost = new WebServiceHost(this);
var endpoint = _serviceHost.AddServiceEndpoint(service,
new WebHttpBinding(WebHttpSecurityMode.None),
new Uri(game.BaseAddress, name));
// Enable the help page for service
endpoint.Behaviors.Add(new WebHttpBehavior {
HelpEnabled = true, FaultExceptionEnabled = true });
/// <summary>
/// The ITestService Interface
/// </summary>
[ServiceContract]
public interface ITestService
{
// --------------------------------------------------------
// Interface Functions
// --------------------------------------------------------
[OperationContract]
[WebGet(UriTemplate="/Greeting?name={name}",
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json)]
[Description("Returns a simple greeting text with your name.")]
String Greeting(String name);
} // interface ITestService
public String Greeting(String name)
{
throw new Exception("ex");
return "Hello " + name + ", welcome to Nations War! " +
"You are visitor number " + _counter++;
} // Greeting
Wenn ich jetzt Greeting aufrufe stürzt die Anwendung ab mit einer nicht behandelten Fehlermeldung, jedoch müsste doch der WebService so etwas abfangen und dem User schicken?
Habe eine Frage bzgl. Hole Punching. Für diesen Prozess initialisiere ich 2 UDPClient Klassen, gebe deren externe adresse UDP Port dem anderen bekannt und verbinde mich. Meine Frage wäre jetzt, ob man für jede Verbindung zu einem anderen Clienten wieder einen neuen Port belegen muss oder ob bisherige Verbindungen nutzbar sind (1 zu n Verbindung). Mein Problem ist, dass mein erster Ansatz ein Ping/Pong zu einem externen UDP Client war und danach das UDP Hole Punching zu einen anderen UDP Client probiert wurde, jedoch ohne Erfolg. Wurde dieser Ping vorher nicht unternommen geht es jedoch.
Und etwas in der Art, wie eine virtuelle Netzwerkkarte simulieren, welche dann die pakete erhält, die ich dann über das DHT schicke würde nicht gehen? Also VPN klingt so hochgegriffen.
Ich weiß gerade nicht wie ich es beschreiben soll, jedoch versuche ich es. Ich probiere mich gerade daran ein DHT Netzwerk zu entwickeln. Das funktioniert auch alles wunderbar. Da es allerdings langweilig ist nur dieses Netzwerk zu haben, frage ich mich ob es möglich wäre, auch so etwas wie ein virtuelles Netzwerk drauß zu machen (also ein "Lan" über Internet), so dass man z.B. Multiplayer darüber spielen kann. Aktuell ist es ja eher ein Programm, was auf jedem Rechenr läuft und diese programme kommunizieren über UDP Sockets.
Ich habe eine Frage bzgl. dem Kompilieren eines C# Projekts. Ich habe derzeit 2 Projekte, eine Libary und eine einfache Konsolenanwendung. Normalerweise fügt man die Libary als normale Referenz ein. Ich stoße jetzt aber auf das Problem, dass ich die Software wo anders als auf meinem Rechner kompilieren lasse (TeamCity vllt. kennt es jemmand) und dort liegt die benötigte Libary nicht in dem Pfad, wie das Projekt sie ursprünglich benötigt (die Libary wird dort auch compiliert und als Artefakt angelegt). Gibt es eine Möglichkeit in Visual Studio bestimmte Einstellungen zu machen um das Problem zu lösen? Oder gibt es andere Möglichkeiten (MsBuild vllt. udn wenn ja wie)?
Mich beschäftigt derzeit eine Frage über Remoting. Normalerweise gibt es ein ServerObject A und einen Clienten B, welcher dieses Objekt dann per Remotezugriff benutzt. Wie ist das, wenn der Client B ebenfalls ein weiterer Server B mit ServerObjekt B ist und dieser wiederrum erst durch Clienten C benutzt wird.
Also ich rufe eine Funktion von Server B auf und dieser eine Funktion von Server A. Server A gibt an B ein Objekt von MarshalByRef zurück und B gibt dieses weiter an Client C.
Ist dies überhaupt möglich? Und wenn ja wie sieht da die beziehung aus, wenn C auf das Objekt von A zugreift? Geht der Aufruf dann C->B->A oder geht das mit dem Objekt direkt: C->A
Richtig kompliziert wird es auch, wenn ich anfangen will die Fragmente nicht alle auf
einen Kreis zu legen sondern die Tree Hierarchy einhalten möchte. Quasi Vater
Fragment und darüber Kinder Fragmente.
Habt ihr vllt noch Anregungen oder Ideen wie man da einen effizienteren
Algorithmus finden kann?
Nun möchte ich diese Fragmente so komprimieren, das ich einen minimalen Platzaufwand
habe und somit das Sunburst zusammengezohen wird. Aktuell sage ich lediglich wie
viel Prozent der 3D Objekte maximal verschoben werden dürfen. Jedoch passiert das
ganze nur durch probieren beim Winkel, was auch viel Leistung verbraucht.
Sitze derzeit an einem Problem wo mir einfach keine effiziente Lösung einfallen will.
Ich habe ein Sunburst Layout, welches einen azyklischen Graphen wiederspiegelt,
dessen Blätter 3D Objekte sind. Ein Knoten, welcher sollche Blätter enthält wird
Fragment genannt.
Gibt eseine Möglichkeit einen Screenshot von einem Fenster zu machen, ohne das ich es in den Vordergrund holen muss? Vllt. das es vorher in einen Buffer gezeichnet wird, bevor es angezeigt wird?
Ich stehe mal wieder vor einem Problem. Hat Jemmand eine Idee wie ich einen gerichteten azyklischen Graphen abspeichern kann als Datei mit so wenig Platzverbrauch wie möglich.
Ich zerlege eine Datei in 8 Byte große Stücke und bilde zu jedem Stück einen Crypt Wert. Das Problem dabei ist halt das am besten gar keine Clashes bei dem Verfahren auftreten dürfen (was man aber nicht verhindern kann) aber ich weiß schon wie ich das umgehe. (Ich arbeite derzeit an einem Komprimierungsverfahren)
Ich habe mal eine Frage. Ist es möglich mit einem Hashalgorithmus 8 Byte auf weniger Bytes zu verkleinern? Es muss dabei nicht wieder umkehrbar sein. Das wichtigste ist das es eine hohe Wahrscheinlichkeit hat das es eindeutig ist und keine doppelten Schlüssel auftreten bei unterschiedlichen 8 Bytes Codes.
Ich bin am Ende mit meinem Latein! Ich programmiere ein Billiard Spiel und implementiere gerade eine KI. Diese soll eine beliebige Kugel aussuchen, welche vor einem Loch liegt und diese dann mit dem passenden Vektor einlochen. Vorher prüfe ich ob andere Kugeln im Weg liegen indem ich alle anderen Kugeln durchgehe und den Ray zwischen der Zielkugel und der Weißen mit deren Spheren vergleiche. Jedoch sagt er mir ständig das Kugeln im Weg liegen, obwohl diese total davon entfernt sind. Ich verzweifle noch.
Ich beschäftige mich derzeit mit Stößen zwischen 2 Billiardkugeln, und möchte dies implementieren als Test. Nun habe ich einen Code Aussschnitt gefunden, welcher die neuen Richtungsvektoren beider Kugeln berechnet, jedoch komme ich einfach nicht dahinter wie man auf diese Formel kommt. Vllt. hat jemmand von euch Erfahrungen damit.
//Abstandsvektor berechnen
//Der Abstandsvektor (dx,dy) ist der Vektor vom Mittelpunkt der Kugel 1
//zum Mittelpunkt der Kugel 2
Vector3 range = physic1.Position - physic2.Position;
// Länge von Range aber ohne Wurzel!
double rangeLength = range.Length() * range.Length();
//Skalarprodukt aus Richtungsvektor Kugel 1 und Abstandsvektor berechnen
double v1d = physic1.Speed.X * range.X + physic1.Speed.Y * range.Y + physic1.Speed.Z * range.Z;
//Skalarprodukt aus Richtungsvektor Kugel 2 und Abstandsvektor berechnen
double v2d = physic2.Speed.X * range.X + physic2.Speed.Y * range.Y + physic2.Speed.Z * range.Z;
//Für beide Kugeln nach der Formel die neue Richtung berechnen
physic1.Speed = new Vector3((float)(physic1.Speed.X - range.X * (v1d - v2d) / rangeLength),
(float)(physic1.Speed.Y - range.Y * (v1d - v2d) / rangeLength),
(float)(physic1.Speed.Z - range.Z * (v1d - v2d) / rangeLength));
physic2.Speed = new Vector3((float)(physic2.Speed.X - range.X * (v2d - v1d) / rangeLength),
(float)(physic2.Speed.Y - range.Y * (v2d - v1d) / rangeLength),
(float)(physic2.Speed.Z - range.Z * (v2d - v1d) / rangeLength));