Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 7 von 21 « Erste ... 345678910111418 ... Letzte »
Ergebnis 121 bis 140 von 410
  1. Beiträge anzeigen #121
    Moderator Avatar von ukur
    Registriert seit
    Jan 2009
    Ort
    Ukraine
    Beiträge
    233
     
    ukur ist offline
    Teron Gorefiend
    Not all understand from your questions (in English it would be better, or Russian ), but here is slice of my script.

    Previously, I used Trigger-Script, but then hung up on FF_Apply (B_GlobalLoop);

    Code:
    var int PC_AimingLost; \\ var for delay before target decrease
    var int PC_AIM_PERCENT; \\ MAX 100% used for aimbar, and calculate damage in B_PC_AimingTarget
    
    func void B_GlobalLoop()
    {
    
    \\\\\\\
    \\\\\\\
    	if(Npc_IsInFightMode(hero,FMODE_FAR)) //Hero in far mode (draw bow)
    	{
    		if(Npc_GetTarget(hero)) //Hero has target (victim in focus)
    		{
    			if(Npc_IsAiming(hero,other)) //Hero is aiming (pulls bow)
    			{
    				PC_AimingLost = 100; //for loop frame per second ~ 60
    				B_PC_AimingTarget(TRUE); //Func for calculate...
    			else
    			{
    				PC_AimingLost -= 1; //Decrease delay every cycle if hero not aiming
    				if(PC_AimingLost < 1)
    				{
    					B_PC_AimingTarget(FALSE); //Func for calculate... FALSE - Reset
    					PC_AimingLost = FALSE;
    				};
    			};
    			B_InitFightSkills(hero); //Func for calculate... 
    		}
    		else
    		{
    			PC_AIM_PERCENT = FALSE; //Reset aim
    		};
    \\\\\\
    \\\\\\
    };

  2. Beiträge anzeigen #122
    Dragonslayer Avatar von Teron Gorefiend
    Registriert seit
    Nov 2006
    Ort
    im Alchemielabor
    Beiträge
    4.793
     
    Teron Gorefiend ist offline
    hi ukur, thaught you wont look again in this post so I used my language.

    however something doesnt work. I can load the game without crashing. but one sec before the game starts the game crashes and i get this message

    X: XD3D_Init_PerDX_ Cant Initialize with 32 bit depth buffer, trying 24bit...
    i click on ok
    X: XD3D_Init_PerDX_ Cant Initialize with 32 bit depth buffer, trying default
    Q: Exception handler was involked. Ikarus tried to print a Daedlus-Stacktrace to zpy. Gothic will now crash
    2* Application error.

    The game worked before.
    Ok I know the error. I used a very big bar and a very small max_value. I changed that and know it works perfectly thanks ukur.

    Ok another question to the LeGo tean. Does LeGo works with g1? Today i tried G1 and it didnt work. Just made everything like G2 except other Ikarus scripts. Errors I didnt get when working with G2 (or already forgot that errors)
    for example: U:PAR: Not a valid class or prototype name: cGamemanager (line 3736). After replaced ikarus.d with a newer version. ok sehe gerade das ikarus 1.2 nur für g2 funzt, das erklärt einiges.
    Geändert von Teron Gorefiend (28.06.2012 um 21:20 Uhr)

  3. Beiträge anzeigen #123
    Neuling
    Registriert seit
    Jun 2012
    Beiträge
    6
     
    FrancyTheKing ist offline
    Hi there. I have some problems with this mod. First of all, I added the Ikarus files and the LeGo files in the Gothic.src:
    _Intern\Ikarus_Const_G2.d
    _Intern\EngineClasses_G2\Misc.d
    _Intern\EngineClasses_G2\oCAiHuman.d
    _Intern\EngineClasses_G2\oCGame.d
    _Intern\EngineClasses_G2\oCInfoManager.d
    _Intern\EngineClasses_G2\oCItem.d
    _Intern\EngineClasses_G2\oCMob.d
    _Intern\EngineClasses_G2\oCNpc.d
    _Intern\EngineClasses_G2\oCZoneMusic.d
    _Intern\EngineClasses_G2\zCCamera.d
    _Intern\EngineClasses_G2\zCConsole.d
    _Intern\EngineClasses_G2\zCConsole.d
    _Intern\EngineClasses_G2\zCMenu.d
    _Intern\EngineClasses_G2\zCOption.d
    _Intern\EngineClasses_G2\zCParser.d
    _Intern\EngineClasses_G2\zCSkyController.d
    _Intern\EngineClasses_G2\zCTrigger.d
    _Intern\EngineClasses_G2\zCWaynet.d
    _Intern\EngineClasses_G2\zCWorld.d
    _Intern\EngineClasses_G2\zCZoneZFog.d
    _Intern\Ikarus.d
    LeGo\Header.src

    Then, I tried to compile the GOTHIC.DAT with Gothic Sourcer but it gives me a LOT of errors (115 of them).
    What I have to do in order to fix the errors? Do you think that in GothicStarter it would work?

  4. Beiträge anzeigen #124
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    The GothicSourcer is flawed and can't cope with Ikarus/LeGo. Use the GothicStarter.

  5. Beiträge anzeigen #125
    Neuling
    Registriert seit
    Jun 2012
    Beiträge
    6
     
    FrancyTheKing ist offline
    So, I've tried to compile with GothicStarter, but it gives me an error like this:
    LeGo\Locals.d(90): Error: Undefined function: _@S

    what the hell?

  6. Beiträge anzeigen #126
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    You will need the latest version of Ikarus. (1.2a)
    And don't forget to install the float package too.

    WfG Gottfried
    Geändert von Gottfried (08.07.2012 um 16:29 Uhr)

  7. Beiträge anzeigen #127
    Neuling
    Registriert seit
    Jun 2012
    Beiträge
    6
     
    FrancyTheKing ist offline
    Where can I download that "Float package"?
    New error: After downloading the newest Ikarus and LeGo, an another error appears:

    LeGo\Timer.d(47): Error: Undefined function: MKF

  8. Beiträge anzeigen #128
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    Copy the script from this topic: http://forum.worldofplayers.de/forum...ntarium-Floats
    The error will vanish when you use that script

  9. Beiträge anzeigen #129
    Neuling
    Registriert seit
    Jun 2012
    Beiträge
    6
     
    FrancyTheKing ist offline
    Thank you all. It works.

  10. Beiträge anzeigen #130
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    • LeGo 2.2.2
      • HookEngine
        • Der Register edi wird jetzt gemäß der Variable EDI aktualisiert


    Dieses Update soll bloß die Benutzung der eigenen Schadensberechnung vereinfachen.
    Geändert von Lehona (20.07.2012 um 15:26 Uhr)

  11. Homepage besuchen Beiträge anzeigen #131
    Teutonic Team Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    10.850
     
    Bonne6 ist offline
    Hat die Beschränkung auf 256 Buttons irgendeinen Sinn oder kann ich da beliebig dran rumschrauben?

  12. Beiträge anzeigen #132
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    "Wer mehr Buttons hat, hat doch 'nen Rad ab Kann aber auch gerne erweitert werden."
    Um es mit den behutsamen Worten Lehonas auszudrücken. (So steht es zumindest im Code als Kommentar )

    Die Beschränkung existiert nur weil Lehona zu faul war da ne dynamische Collection zu nutzen schätze ich

    MfG Gottfried

  13. Homepage besuchen Beiträge anzeigen #133
    Teutonic Team Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    10.850
     
    Bonne6 ist offline
    Ok, steht ja in der Zeile drunter

    Muss die Anzahl hochsetzen, weil ich für die EW-Maussteuerung auch eine 2D-Map einbaue und die Magierfelder da Buttons werden, damit ich's leichter hab.
    Geändert von Bonne6 (27.07.2012 um 22:23 Uhr)

  14. Beiträge anzeigen #134
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    Dann hast du offiziell ein Rad ab
    Nein, Konstanten sind dazu da, um verändert zu werden. Zumindest manchmal
    Ich kann das aber auch umbauen, der Code der Buttons ist noch von vor ForEachHndl().

  15. Homepage besuchen Beiträge anzeigen #135
    Teutonic Team Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    10.850
     
    Bonne6 ist offline
    Weil ich jetzt eben erstmal die Kommentarfunktion soweit fertig eingebaut hab, ist mir aufgefallen, dass beim automatischen Zeilenumbruch beim View mit dem Seperator die neue Zeile zu hoch angefangen wird, die zwei Zeilen sich also überlagern, sieht nicht so gut aus

    Als Font hab ich übrigens Font_ScreenSmall genommen
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Kommentarbox.jpg 
Hits:	83 
Größe:	203,0 KB 
ID:	38585  

  16. Beiträge anzeigen #136
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    Das sollte nicht passieren. Es kann sein, dass du die Funktion mit einem falschen Parameter aufgerufen hast (Ich kann dir das aber nicht 100% garantieren, vielleicht habe ich auch tatsächlich einen Fehler gemacht, der mir beim Testen nicht aufgefallen ist) - würdest du mir deinen Code zeigen? Entweder hier oder per ICQ

  17. Homepage besuchen Beiträge anzeigen #137
    Teutonic Team Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    10.850
     
    Bonne6 ist offline
    Klick (Zeile 1149 geht's los), der Text selbst gesetzt wird in Zeile 1183. CommentTextEingabe ist einfach eine Zeichenkette und alle 50 Zeichen kommt ein ~ für den Zeilenumbruch.

  18. Beiträge anzeigen #138
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    In der View.d in Zeile 228 gab es einen Fehler in der Berechnung der Höhe (Es war v.pposy+v.psizey anstatt nur v.psizey). Das ist mir beim Testen nicht aufgefallen, weil das unter bestimmten Bedingungen (View sehr nahe am oberen Bildschirmrand) nahezu keine Auswirkung auf das Ergebnis hat und sich im Bereich von einigen wenigen realen Pixel aufhält. Im nächsten Release wird das behoben sein.

  19. Beiträge anzeigen #139
    Demigoddess
    Registriert seit
    Jul 2007
    Beiträge
    9.795
     
    Lehona ist offline
    Ich habe das PermMem-Tutorial mal ein wenig aktualisiert - und zwar mit ForEachHndl().

    Spoiler:(zum lesen bitte Text markieren)
    Da vor kurzem jemand nach einer Möglichkeit zum Respawn gefragt hat und ich fanatisch LeGo angepriesen habe, dache ich mir, dass das ein geeignetes praktisches Beispiel sei, um den Umgeang mit PermMem ein wenig näher zu beleuchten. Aber Vorsicht, es folgt ein ziemlich langer Post. Wer also PermMem beherrscht oder einfach nicht so viel lesen will, sollte wohl gar nicht erst anfangen...

    Als erstes müssen wir uns ein klares Ziel definieren bzw. aufschreiben, in unserem Fall das Respawn System:
    "Unser System soll jedes Monster, das bestimmte Bedingungen erfüllt, nach einer bestimmten Zeit respawnen. Die Respawn-Zeit ist linear abhängig vom Level des Monsters und wird täglich (bzw. nächtlich in der SleepABit.d) geprüft."
    Das hätten wir also. Da wir verzögert respawnen (Alles andere wäre für den Spieler ja eh frustrierend) müssen wir uns die relevanten Informationen merken. Daher sollten wir uns genau ansehen, was wir brauchen:

    1. Monster Typ oder Instanz (Wir wollen ja keinen Ork an Stelle eines Wolfes spawnen)
    2. Waypoint um zu wissen, wo der Respawn vollzogen werden soll
    3. Zeitpunkt, an dem der Respawn erfolgen soll


    Der Übersicht halber nochmal in Daedalus formuliert:
    Code:
    class RespawnObject {
        var int inst; //Die Monsterinstanz
        var string wp; //Der Wegpunkt
        var int respawnDay; // Der Tag des Respawns, wobei der erste Tag den Wert 0 hat... Genau wie Gothic.
    };
    Ich habe unserer Informationsstruktur (Im folgenden "Klasse"... Wer noch gar nichts über Klassen weiß, sollte sich mal in der Ikarus-Dokumentation umsehen) einfach mal den Namen RespawnObject gegeben, Englisch ist schließlich hip.

    In einem Objekt (einer Instanz) dieser Klasse können wir also alle nötigen Daten speichern.

    Wenn jetzt ein Monster stirbt (und es unsere Bedingungen, z.B. kein Mensch, erfüllt), wollen wir ein Objekt erzeugen und es mit den entsprechenden Informationen füllen.

    Wenn man sich jetzt fragt, warum es dazu PermMem braucht, ist die Frage völlig gerechtfertigt.
    Ikarus bietet die Möglichkeit, Speicher zu allozieren und auch, den Speicher (bzw. einen Zeiger auf den Speicher) einer Instanz zuzuweisen. Aber (Und das ist ein großes Aber) Ikarus garantiert keinen sicheren Speicher, er ist bloß einen Frame sicher gültig. Anders formuliert: Wenn der Spieler lädt oder ähnliche Aktionen durchführt, führt das sehr oft dazu, dass der Speicher nicht mehr da steht, wo er soll (oder sogar ganz weg ist).
    Genau das übernimmt aber PermMem: Es merkt sich den Speicherblock und "zwingt" den User im Gegenzug eine eindeutige Zahl ("Handle" genannt) zu benutzen, die PM immer einem Zeiger zuordnen kann. Wenn gespeichert wird, schreibt PM den Inhalt all dieser Speicherblöcke nach bestimmten Regeln (s. weiter unten oder in den Beispielen) in eine eigene Speicherdatei; beim Laden wird diese Datei ausgelesen, interpretiert und die Daten werden wieder in den Speicher geschrieben.
    Des Weiteren kann PM noch ein paar andere tolle Sachen, z.B. werden Objekte an Hand einer Instanz-Funktion initialisiert, Instanz-Funktionen meint sowas:
    Code:
    instance myNpc(C_NPC) {
        Print("Ich bin eine Instanz-Funktion!");
    };
    Später erlaubt das, die Objekte nicht nur auf Grund ihrer Klasse zu unterscheiden sondern auch an Hand der Instanz, mit der sie erzeugt wurden, somit kann man sie unterschiedlich löschen oder speichern.

    Wie auch immer, zurück zu unserem Problem: Das Respawn-System.
    An geeigneter Stelle sollten wir so ein Objekt erzeugen - wir brauchen uns nichteinmal eine Referenz merken, weil wir alle wichtigen Objekte ja an ihrer Ursprungsinstanz identifizieren können (Wird später noch klar). Ab jetzt geht das Scripten wirklich los:
    Wir erzeugen als erstes ein Respawn-Objekt mit dem Befehl new(). Aber was erwartet new() für Parameter? Ein Blick ins Wiki hilft:
    Code:
    int new(instance inst)
    Gut, new() will also eine Instanz... Aber wir haben ja gar keine Instanz? Unser Code sieht ja bisher so aus:
    Code:
    class RespawnObject {
        var int inst; //Die Monsterinstanz
        var string wp; //Der Wegpunkt
        var int respawnDay; // Der Tag des Respawns, wobei der erste Tag den Wert 0 hat... Genau wie Gothic.
    };
    New() möchte eine Instanz als Parameter, da damit das Objekt initialisiert wird (werden kann). Eigentlich wird einfach die Instanz-Funktion (s.o.) ausgeführt. Da wir die Instanz-Funktion nicht allzu sinnvoll parametrisieren können, nehmen wir einfach eine leere:
    Code:
    instance RespawnObject@(RespawnObject);
    // oder
    instance RespawnObject@(RespawnObject){};

    Code:
    func void AddToRespawnArray(var c_npc slf) {
         var int hndl; hndl = new(RespawnObject@);};

    Nun, das ist noch nicht vollständig und das könnt ihr euch vermutlich denken. Wir müssen noch die Informationen in unser Objekt schreiben. Dafür brauchen wir die Funktionen get() oder getPtr(). Es ist einfacher, direkt ein Objekt zu nutzen anstatt erst den Zeiger in ein Objekt zu verwandeln, daher werden wir get() benutzen. Wir definieren also eine Variable des Typs RespawnObject, das geht wie mit Integern und Strings:
    Code:
    var RespawnObject myRespawnObject;
    Dieser Variable weisen wir dann einfach unser Handle zu (korrekt: get(hndl);) und können ohne Probleme die Informationen in das Objekt schreiben. Also:

    Code:
    func void AddToRespawnArray(var c_npc slf) {
         var int hndl; hndl = new(RespawnObject@);     
         var RespawnObject myRespawnObject; myRespawnObject = get(hndl);
         myRespawnObject.inst = Hlp_GetInstanceID(slf);
         myRespawnObject.wp = slf.spawnPoint;
         myRespawnObject.respawnDay = Wld_GetDay() + (slf.level/10)+2; // Irgendeine Formel
    };
    Und das war es eigentlich auch schon, damit sind alle wichtigen Informationen verstaut. Jetzt müssen wir die Funktion nur noch an einem sinnvollen Ort aufrufen - und was eignet sich da besser als die ZS_Dead()? Richtig, nichts.

    Es ist eigentlich völlig egal, wo wir unsere Funktion in der ZS_Dead() aufrufen, aber der Übersicht halber machen wir es ganz am Anfang. Da wir nicht alle Monster wiederbeleben wollen, packen wir das Ganze auch noch in eine Abfrage:

    Code:
    func int MeetsRespawnCondition(var c_npc slf) { 
        return (slf.guild > GIL_SEPERATOR_HUM); // Überprüft bisher bloß, ob 'slf' nicht menschlich ist 
    };
    
    
    func void ZS_Dead ()
    {    
        if (MeetsRespawnCondition(self)) {
            AddToRespawnArray(self);
        };
        [...]
    };
    Die Abfrage ist noch nicht so toll und euch fallen bestimmt noch andere wichtige Sachen rein, aber ich will ja bloß ein Konzept vorstellen.

    Okay... Ein kleiner Rückblick: Wir haben uns die wichtigen Informationen erfolgreich gemerkt... Und mehr nicht. 'Ne ganze Menge Arbeit für so eine kleine Aufgabe, nicht?
    Wenn wir zurück schauen, sehen wir aber: Das waren eigentlich bloß ein paar Zeilen, kaum eine zweistellige Anzahl. Sobald man PM verstanden habt (Und ich bin mir sicher das werdet ihr nach diesem Tutorial), kann man das sehr schnell tippen. Machen wir uns aber nun an den eigentlichen Teil unseres Systems: Das Respawnen. Um einen geeigneten Zeitpunkt zum Auslösen des Respawns kümmern wir uns später. Wir wollen jetzt also eine Funktion, die testet, ob der aktuelle Tag größer gleich dem "Respawn-Tag" ist und gegebenfalls das Monster in die Welt einfügen, das ist auch gar nicht so schwierig, der Code erklärt sich, mitsamt Kommentaren, eigentlich von selbst:
    Code:
     
    func void CheckRespawns() {
     ForEachHndl(RespawnObject@, _CheckRespawns);/* Dieser Part bedarf vielleicht einer kurzen Erklärung:
        Mit ForEachHndl() führe ich eine angegebene Funktion (2. Parameter) für alle Objekte/Handles 
        einer angegebenen Ursprungsinstanz (1. Parameter) aus. So kann ich ganz einfach
        alle RespawnObjects überprüfen :) */
      };
    Code:
    func int _CheckRespawns(var int hndl) { // In diesem Parameter steht, für welches Handle die Funktion gerade ausgeführt wird
             var RespawnObject myRespawnObject; myRespawnObject = get(hndl);
            //Jetzt haben wir unser Objekt!
            
            if (myRespawnObject.respawnDay <= Wld_GetDay()) { // Der Tag des Respawns ist gekommen! \o/
                Wld_InsertNpc(myRespawnObject.inst, myRespawnObject.wp); // Daher fügen wir einfach den NPC an seinem WP ein :)
                // Allerdings müssen wir nun unser Objekt auch entfernen, sonst würde es ja beim nächsten Mal wieder eingefügt!
                // Ich werde daher einfach mal die Funktion RemoveRespawnObject() aufrufen - wie die aussehen muss, schauen wir später.
                RemoveRespawnObject(hndl);
        return rContinue; // Wir wollen schließlich weiterhin alle Handles durchlaufen - bis wir alle haben
    };
    So weit, so gut, das war nicht so kompliziert, jetzt müssen wir uns aber um die RemoveRespawnObject() kümmern. Die ist aber eigentlich ganz simpel: Wir müssen bloß unser RespawnObject löschen (Und damit den Speicher wieder freigeben), darum kümmert sich PM aber fast ganz von alleine:

    Code:
    func void RemoveRespawnObject(var int hndl) {
      delete(hndl); // Alles weitere macht PM dann selber. Unter anderem wird versucht, Respawn_Object_Delete() aufzurufen
    };
    Wir hätten auch direkt bloß delete(hndl) aufrufen können, das macht keinen Unterschied.

    Das rufen wir jetzt noch in der PC_Sleep() (Datei: Scripts\Content\Story\Dialog_Mobsis\SleepABit.d) auf, optimalerweise nachdem die Zeit geändert wurde:

    Code:
    func void PC_Sleep (var int t)
    {
        AI_StopProcessInfos(self);        // [SK] ->muss hier stehen um das update zu gewährleisten
    
        PLAYER_MOBSI_PRODUCTION    =    MOBSI_NONE;
        self.aivar[AIV_INVINCIBLE]=FALSE;
        if    (Wld_IsTime(00,00,t,00))
        {
            Wld_SetTime    (t,00);
        }
        else
        {
            t = t + 24;
            Wld_SetTime    (t,00);
        };
    
        CheckRespawns();
        
        [...]
    };
    Der Kern unseres Systems ist damit geschaffen und wir näherns uns (rapide!) dem Ende, eigentlich möchte ich bloß noch eine (in diesem Fall unnötige) Sache aufzeigen:
    Klassen in Gothic haben leider nicht genug Informationen, um sie (immer) vernünftig speichern zu können, Zeiger unterscheiden sich z.B. nicht von normalen Ganzzahlwerten. Daher bietet LeGo sog. structs an. Das ist dem eigentlichen Begriff aus anderen Programmiersprachen ein wenig entfremdet, in unserem Fall ist das bloß ein String, der den Aufbau der Klasse beschreibt. Dabei wird einfach Stück für Stück der "Typ" einer Objekt-Eigenschaft angegeben, wobei einfache Werte (Func, float, int, string) einfach als 'auto' (für 'automatisch') referenziert werden. Man kann auch eine Anzahl angeben, wenn mehrere Eigenschaften des selben Typs aufeinander folgen. In unserem Fall sähe das so aus:
    Code:
    const string RespawnObject_Struct = "auto|3";
    // oder
    const string RespawnObject_Struct = "auto auto auto";
    Hätten wir in unserer RespawnObject-Klasse am Ende noch einen Zeiger auf ein weiteres Respawn-Object, sähe das so aus:
    Code:
    const string RespawnObject_Struct = "auto|3 RespawnObject*";
    Der Sternchen-Operator zeigt, wie aus anderen Programmiersprachen gewohnt, einen Zeiger an.

    Es ist auch möglich, die Speicherregeln komplett von Hand vorzugeben, aber das werde ich in diesem Tutorial nicht behandeln und sollte aus der Dokumentation im Wiki auch ersichtlich werden.


    Und damit sind wir endlich am Ende angekommen! Was dem ein oder anderen wie ein Haufen Arbeit erscheint haben mag, war letztendlich ganz wenig - ca. 75 Zeilen, wobei davon einige Leerzeilen oder Kommentare waren.


    Abschließende Worte: Ich habe nicht großartig gegengelesen, wenn also jemand noch Fehler findet (Syntaxfehler in Script oder auch Sprache), behebe ich das gerne. Semantisch sollte das im Groben und Ganzen eigentlich korrekt sein, ich gebe allerdings zu, es nichtmal durch den Parser gejagt zu haben. Wenn es nicht funktioniert, seht es einfach als zusätzliche Aufgabe, es zu beheben
    Geändert von Milky-Way (24.01.2017 um 23:01 Uhr) Grund: func void _CheckRespawns -> func int _CheckRespawns

  20. Beiträge anzeigen #140
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    8.312
     
    Bisasam ist offline
    ich hab wahrscheinlich eine dumme frage zu AI-function:

    ich möchte, dass items erst der reihe nach übergeben werden (beispiel: npc sagt "Hallo", dann "Hier ist deine Waffe" und DANN erst soll geprintet werden, dass man ne waffe gekriegt hat!) und dachte, dazu könnte man AI-function wohl benutzen. aber ich weiß nicht, welche ich für B_GiveInvItems am besten nehme. kann mir da jemand weiterhelfen?


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

Seite 7 von 21 « Erste ... 345678910111418 ... Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide