Typ statt Integer verwenden...?



  • Hallo Leute,
    vorab muss ich erstmal sagen, dass ich von C++ in etwa so viel verstehe wie die Kuh vom melken. Ich bin lediglich GM auf einem Freeshard und normaler Weise verlustigt sich unser Developer mit so etwas, aber der is grad im Skiurlaub. Ich versuche jetzt einmal kurz in Laiensprache das Problem zu erklären:
    Das folgende Script erzeugt ein Item, welches man im Spiel aufrufen kann:

    using System;
    
    namespace Server.Items
    {
    	public class DecRock : Item
    	{
                    public override TimeSpan DecayTime { get { return TimeSpan.FromMinutes( 1.0 ); } }
    
    		[Constructable]
    		public DecRock() : base( 0x1773 )
    		{
    		        Weight = 1.0; 
    		        Name = "melted wall remains";
                            Hue = 1161;
    			Movable = true;
                            LootType = LootType.Regular; 
    		}
    
    		public DecRock( Serial serial ) : base( serial )
    		{
    		}
    
    		public override void Serialize( GenericWriter writer )
    		{
    			base.Serialize( writer );
    			writer.Write( (int) 0 );
    		}
    
    		public override void Deserialize( GenericReader reader )
    		{
    			base.Deserialize( reader );
    			int version = reader.ReadInt();
    		}
    	}
    }
    

    Das einzig Interessante für mein Problem im obigen Script ist, dass es ein Item erzeugt welches auf den Namen "DecRock" hört und die ItemID "6003" hat. So weit so gut, im Spiel kann ich das Item auch probemlos mit unserem Konsolenbefehl [add DecRock hinzufügen. Jetzt gibt es ein Script, welches Items anhand ihrer ItemID spawnt. Siehe Codeschnipsel:

    public class DesCityWallSouth : DamageableItem
    	{
    		[Constructable]
    		public DesCityWallSouth( int, int, class )
    			: base( 641, 631, 6003 ) 
                    // 6003 = ItemID vom DecRock, 641 & 631 sind ItemIDs von anderen Items
    		{
    

    Nun kommt aber der besondere Fall das ich das 2te Script dahingehend abändern muss, dass es das Item nicht per ItemID sondern über den Typ implementiert. Ändere ich den Code allerdings um in:

    public class DesCityWallSouth : DamageableItem
    	{
    		[Constructable]
    		public DesCityWallSouth( int, int, class )
    			: base( 641, 631, DecRock() )
    		{
    

    dann geht garnix mehr. Ich muss der Funktion also quasi sagen, dass nur an den beiden ersten Stellen eine integer eingelesen wird, das aber an der dritten Stelle jetzt der Typ benutzt wird. Ich hab aber nicht die geringste Ahnung wie???? Bitte helft mir, ich werd hier noch wahnsinnig. 😞



  • Das ist kein C++. Das ist C# und somit bist du im falschen Unterforum.



  • drakon schrieb:

    Das ist kein C++. Das ist C# und somit bist du im falschen Unterforum.

    Ups, Sorry. Da kannst du mal sehn wie wenig Ahnung ich davon habe. ^^

    Ok, ich hab den Thread jetzt im C# Forum gepostet, könnte den Thread hier dann bitte ein Mod. löschen?



  • Das wird nicht einfach werden. Um statt der Zahl (vom Typ System.Int32 oder 64) ein typeof(DecRock) (vom Typ System.Type) uebergeben zu koennen, musst du da eine Menge Refactoring (http://en.wikipedia.org/wiki/Refactoring) betreiben.

    Wenn du uns deine Motivation hinter dem Vorgehen schilderst, koennen wir dir evtl mehr helfen. Ich vermute du willst ueber dein Script nicht laenger Objekte ueber Zahlen ins Spiel einfuegen, sondern ueber deren Namen? Oder wollt ihr die magischen Zahlen loswerden - das waere keine an sich keine schlechte Idee 😉



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum C# und .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • endline schrieb:

    Das wird nicht einfach werden. Um statt der Zahl (vom Typ System.Int32 oder 64) ein typeof(DecRock) (vom Typ System.Type) uebergeben zu koennen, musst du da eine Menge Refactoring (http://en.wikipedia.org/wiki/Refactoring) betreiben.

    Wenn du uns deine Motivation hinter dem Vorgehen schilderst, koennen wir dir evtl mehr helfen. Ich vermute du willst ueber dein Script nicht laenger Objekte ueber Zahlen ins Spiel einfuegen, sondern ueber deren Namen? Oder wollt ihr die magischen Zahlen loswerden - das waere keine an sich keine schlechte Idee 😉

    Ok, du hast es nich anders gewollt. ^^ Dann versuch ich den Murks mal näher zu erklären. Sagen wir mal Du hast ein Item (In unserem Fall einen Stein). Dieser hat verschiedene Eigenschaften und eine bestimmte Optik. Die Optik wäre noch recht egal aber mit den Eigenschaften des Steins kann man nicht viel anfangen, deshalb muss ein neuer Stein her, der aber wie der alte aussieht, oder zumindest nur mit einer anderen Farbe versehen. So einen "neuen" Stein kann mann ganz einfach in einem Miniscript erzeugen (siehe das erste von mir gespostete Script).
    Das neue Item lässt sich danach auch über den gewählten Namen (in unserem Fall DecRock) mit dem Konsolenadbefehl [add des Gameservers prima ins Spiel integrieren. Schaut man sich mit dem Konsolenbefehl [probs beide Items an sieht man schön die Unterschieder der beiden Items. Soweit wäre alles in Butter. Will man jedoch so ein Item per script einbinden geht das nur über den Namen des Items und nicht über die ID, weil die bei beiden Steinen gleich ist (die ID referenziert immer auf die verwendete Grafik). siehe:
    http://www.pictureupload.de/originals/pictures/020210192937_WallRemains.jpg
    Ich hab aber eben mal mit unserem Developer telefoniert und der meinte der Aufwand sei gigantisch, da sich der Murks nicht auf die geposteten Zeilen des zweiten Skripts allein beschränkt, sondern sich auf mehrere weitere Skripte ausdehnt. Ich werd also warten bis der Sack aus dem Urlaub zurück ist, sonst müsste ich hier etliche Skripte hochladen und die durchzusehn kann ich niemandem zumuten. Ganz davon abgesehn, das das ohne runuo-server auch noch eine brutale Trockenübung wäre. Dennoch vielen Dank für die gezeigte Hilfsbereitschaft.



  • kann das mal jemand schließen ... ist doppelt -> http://www.c-plusplus.net/forum/viewtopic-var-t-is-260264.html



  • Dieser Beitrag wurde gelöscht!


  • Dieser Beitrag wurde gelöscht!

Anmelden zum Antworten