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 2 von 31 « Erste 123456913 ... Letzte »
Ergebnis 21 bis 40 von 606
  1. Beiträge anzeigen #21 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von Oparilames Beitrag anzeigen
    Kennt jemand von euch, eine Möglichkeit AI_-Befehle sofort auszuführen, ohne dass sie in die AI-Quene eingefügt werden?
    Theoretisch kann man die korrespondierende Engine-Funktion aufrufen, aber ich weiß nicht, ob das ohne den passenden Kontext so einfach funktioniert. Je nach Funktion gibt es aber auch eine Version, die sich nicht in die Queue einreiht.

  2. Homepage besuchen Beiträge anzeigen #22 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Was wäre der Unterschied zu:
    Npc_ClearAIQueue(self);
    AI_*

    Mehr als sofort anfangen geht ja sowieso nicht, AI-Befehle sind ja in der Regel so, dass es eine Weile braucht sie auszuführen.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  3. Beiträge anzeigen #23 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von Sektenspinner Beitrag anzeigen
    Was wäre der Unterschied zu:
    Npc_ClearAIQueue(self);
    AI_*

    Mehr als sofort anfangen geht ja sowieso nicht, AI-Befehle sind ja in der Regel so, dass es eine Weile braucht sie auszuführen.
    Vielleicht soll die AI-Queue nicht gelöscht werden, außerdem gibt es Befehle wie AI_EquipArmor() etc., die instantan ausgeführt werden könnten.

  4. Beiträge anzeigen #24 Zitieren
    Abenteurer Avatar von redleha
    Registriert seit
    Dec 2010
    Ort
    Новокуйбышевск, Россия
    Beiträge
    68
     
    redleha ist offline
    Today, dabbling with scripts, made a couple of interesting features. Maybe someone will need.
    The first two functions are not as good as Hook_Damage() (made by Lehona), but anyone can enjoy.

    Code:
    //Only for Melee Weapon, need reinit in init_global
    func void Npc_GetDamageMultiplier(var C_NPC slf,var int pos)
    {
    	var int DamMultiplier;	//float
    	CALL_RetValIsFloat();
    	CALL__thiscall(MEM_InstToPtr(slf),7729904);	//0075F2F0
    	DamMultiplier = CALL_RetValAsFloat();	//return hex (float32). Need to convert to float
    	//For_TEST:
    	PrintScreen(Float32ToString(DamMultiplier),1,pos,Font_ScreenSmall,6);
    };
    func void Npc_SetDamageMultiplier(var C_NPC slf, var int multiplier)
    {
    	CALL_FloatParam(mkf(multiplier));
    	CALL__thiscall(MEM_InstToPtr(slf),7729920);	//0075F300
    };
    And this function kills the victim (vict). Kills - (slf)
    Equivalently, as if it happened in the battle.

    Code:
    func void Npc_DoDie(var C_NPC vict, var C_NPC slf)
    {
    	CALL_PtrParam(MEM_InstToPtr(slf));
    	CALL__thiscall(MEM_InstToPtr(vict),7563104);	//00736760
    };

  5. Beiträge anzeigen #25 Zitieren
    Schwertmeister Avatar von Noraser
    Registriert seit
    Jun 2007
    Ort
    im Osten
    Beiträge
    937
     
    Noraser ist offline
    Ich versuch grad eine bilibige FK waffe die gezogen ist zu verändern.
    Sequenz: Waffe ablegen, waffe verändern, Waffe anlegen, waffe ziehen.
    Waffe anlegen schaft G2 mit den external ja nicht, daher hab ich versucht das ikarus beispiel zu verwenden:
    http://forum.worldofplayers.de/forum...1#post15341275

    das funktioniert bei mir aber nicht.

    wenn ich EquiqWeapon nutze, sind die Wafen zwar wieder angelegt, aber:
    a) FK waffe hat keien änderung
    b) NK waffe ist nur optisch im inventar angelegt, weder ist die waffe am Körper sichtbar, noch einsatzbereit -> Held nutzt Fäuste

    da ich die ganzen Sicherheitsabfragen eh nicht brauch, hab ich nur mal die beiden letzten CAL zeilen genutzt, nun stÜrzt G2 mit Fehler ab:
    00:58 Fault: 0 Q: [start of stacktrace]
    00:58 Fault: 0 Q: ASMINT_CALLMYEXTERNAL() + 5 bytes
    00:58 Fault: 0 Q: ASM_RUNONCE() + 77 bytes
    00:58 Fault: 0 Q: CALLINT_MAKECALL(7577648, 0) + 263 bytes
    00:58 Fault: 0 Q: CALL__STDCALL(7577648) + 21 bytes
    00:58 Fault: 0 Q: CALL__THISCALL(384824288, 7577648) + 73 bytes
    00:58 Fault: 0 Q: EVT_TAGEBUCH() + 483 bytes
    00:58 Fault: 0 Q: [end of stacktrace]
    Ref-Counter != 0 after vertexbuffer release! .... <zError.cpp,#474>

    EVT_Tagebuch ist die Funktion wo das Problem entsteht:
    Code:
    if (MEM_KeyPressed(KEY_p) == KEY_PRESSED)
    	{
    	
    	FK_Waffe = Npc_GetEquippedRangedWeapon(Hero);
    	
    	if Npc_HasReadiedRangedWeapon (hero)
    	{	NK_Waffe = Npc_GetEquippedMeleeWeapon(hero);
    		AI_UnequipWeapons (hero);
    		AI_RemoveWeapon (hero);
    		If pfeil_nummer ==0 {FK_Waffe.munition=ItRw_Special_MagicArrow; pfeil_nummer =1;	PrintScreen	("Magischer Pfeil.", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==1 {FK_Waffe.munition=ItRw_ShrinkArrow;	pfeil_nummer =2; PrintScreen("Zoom Pfeil", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==2 {FK_Waffe.munition=ItRw_Special_FireArrow; pfeil_nummer =3;	PrintScreen	("Brand Pfeil.", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==3 {FK_Waffe.munition=ItRw_Arrow; pfeil_nummer =0; PrintScreen	("normaler Pfeil", -1,-1, FONT_ScreenSmall ,2);};
    		CALL_PtrParam(MEM_InstToPtr(NK_Waffe));
    		CALL__thiscall(MEM_InstToPtr(hero), oCNpc__EquipWeapon);
    		CALL_PtrParam(MEM_InstToPtr(FK_Waffe));
    		CALL__thiscall(MEM_InstToPtr(hero), oCNpc__EquipWeapon);
    		
    		//EquipWeapon 	(hero, NK_Waffe);
    		//EquipWeapon 	(hero, FK_Waffe);
    		//AI_ReadyRangedWeapon (hero);
    	}
    	else
    	{
    		If pfeil_nummer ==0 {FK_Waffe.munition=ItRw_Special_MagicArrow; pfeil_nummer =1;	PrintScreen	("Magischer Pfeil.", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==1 {FK_Waffe.munition=ItRw_ShrinkArrow;	pfeil_nummer =2; PrintScreen("Zoom Pfeil", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==2 {FK_Waffe.munition=ItRw_Special_FireArrow; pfeil_nummer =3;	PrintScreen	("Brand Pfeil.", -1,-1, FONT_ScreenSmall ,2);}
    		else if pfeil_nummer ==3 {FK_Waffe.munition=ItRw_Arrow; pfeil_nummer =0; PrintScreen	("normaler Pfeil", -1,-1, FONT_ScreenSmall ,2);};
    	};
    	};
    Prinzipell brauch ich ja nur etwas was für das "vollständige" verlassen des Kampfmoduses sorgt, da der Teil, wo die Waffe nicht gezogen ist, funktioniert. Reines wegstecken der Waffe reicht nicht.


    gruss
    Noraser
    MOD: JURAN 1.4.6 Juran 1.5 Fertig: Sprachdateien 99%, Videos 50%, Weg der Magie (done), Weg des Geschicks (90%)
    Geändert von Noraser (15.10.2013 um 22:40 Uhr)

  6. Beiträge anzeigen #26 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Du benutzt AI_Funktionen, das könnte ein Problem sein. LeGo hat (Un-)Equip Funktionen in der EngineAdr.d, dann brauchst du die nicht selber bauen.

  7. Beiträge anzeigen #27 Zitieren
    Schwertmeister Avatar von Noraser
    Registriert seit
    Jun 2007
    Ort
    im Osten
    Beiträge
    937
     
    Noraser ist offline
    Ich hab jetzt mal verschieden Ansätze durchprobiert:
    block 1:
    Hier hab ich mich an den script für das austauschen von visibles beim ziehen der Waffen (ikarus #3) orientiert.
    Der pfeil verschwindet, aber der neue pfeil taucht nicht auf, nach abschuss eines 'leer' pfeils, kommt wieder der alte

    block 2:
    versuch das script oben auf oCNpc__UnequipItem umzustellen. Hier hab ich gar nix lauffähiges zustande bekommen... Mein fehler scheint zu sein, das ich den pointer nicht auf die Waffe zeige.

    block3: letzter versuch von gestern abend. Lief einmal richtig, danach nie wieder... Gothic stürzt mit Fehler in EquipWeapon funktion ab.

    das pfeiländern hab ich jetzt ausgelagert, das dieser teil funktioniert, sieht man dadran, das es bei nicht gezogenen Bogen immer funktioniert.

    Code:
    //FF_ApplyOnceExt(Arrow_Change_key,2000, -1);
    	if (MEM_KeyPressed(KEY_p) == KEY_PRESSED)
    	{
    	var C_ITEM FK_Waffe; FK_Waffe = Npc_GetEquippedRangedWeapon(Hero);
    	
    	if Npc_HasReadiedRangedWeapon (hero)
    	{	/*
    	const int oCNpc__RemoveFromSlot = 7643760; //0x74A270
                CALL_IntParam(true);  //kill effect
                CALL_IntParam(false); //dont drop
                CALL_zStringPtrParam("ZS_RIGHTHAND");//pfeil rechts!
                CALL__thiscall(MEM_InstToPtr(hero), oCNpc__RemoveFromSlot);
    	Arrow_Change (FK_Waffe);
    	 const int oCNpc__PutInSlot = 7642288; //0x749CB0
                CALL_IntParam(true); //is in inventory
                CALL_PtrParam(MEM_InstToPtr(item));
                CALL_zStringPtrParam("ZS_RIGHTHAND"); //pfeil rechts!
                CALL__thiscall(MEM_InstToPtr(hero), oCNpc__PutInSlot);
    	*/
    	var int FK_Waffe1; FK_Waffe1 = Hlp_GetInstanceID(FK_Waffe);
    	const int oCNpc__UnequipItem = 7546560; //0x7326C0
    	CALL_IntParam(true);  //kill effect
        CALL_IntParam(false); //dont drop
        CALL_zStringPtrParam("ZS_RIGHTHAND");
    	CALL__thiscall(MEM_InstToPtr(hero), oCNpc__UnequipItem);
    	PrintScreen	("bogen weg", -1,-1, FONT_ScreenSmall ,2);
    	//Arrow_Change (FK_Waffe);
    	//const int oCNpc__EquipItem  = 7545792; //0x7323C0
    	//CALL_IntParam(true); //is in inventory
    	//CALL_PtrParam(MEM_InstToPtr(item));
    	//CALL_zStringPtrParam("ZS_LEFTHAND"); //bogen links!
    	//CALL__thiscall(MEM_InstToPtr(hero), oCNpc__EquipItem);
    	
    	/**
    	//NK_Waffe = Npc_GetEquippedMeleeWeapon(hero);
    		var int NK_Waffe1;
    		var int FK_Waffe1;
    		 NK_Waffe1 = Npc_GetMeleeWeapon (hero);
    		 FK_Waffe1 = Npc_GetRangedWeapon (hero);
    		AI_UnequipWeapons (hero);
    		AI_RemoveWeapon (hero);
    		//AI_EquipBestMeleeWeapon	(hero);
    		//AI_EquipBestRangedWeapon (hero);
    		AI_Function_I ( hero, EquipWeapon, NK_Waffe1);
    		AI_Function_I ( hero, EquipWeapon, FK_Waffe1);
    		
    		AI_Function (hero, Arrow_Change);
    		AI_ReadyRangedWeapon (hero);
    		**/
    	}
    	else
    	{
    	Arrow_Change (FK_Waffe);
    	};
    	};
    MOD: JURAN 1.4.6 Juran 1.5 Fertig: Sprachdateien 99%, Videos 50%, Weg der Magie (done), Weg des Geschicks (90%)

  8. Beiträge anzeigen #28 Zitieren
    Neuling
    Registriert seit
    Jan 2014
    Ort
    Gdańsk
    Beiträge
    5
     
    QazPL ist offline
    Hello, I have a problem after use this code:
    https://forum.worldofplayers.de/foru...8#post15483138
    Gothic crashing (in loading, 80%) and I see DoStack Error (Acces Violation). I have Ikarus 1.2 ver. (Gothic 1).

    Thanks for any help.

  9. Beiträge anzeigen #29 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von QazPL Beitrag anzeigen
    Hello, I have a problem after use this code:
    https://forum.worldofplayers.de/foru...8#post15483138
    Gothic crashing (in loading, 80%) and I see DoStack Error (Acces Violation). I have Ikarus 1.2 ver. (Gothic 1).

    Thanks for any help.
    Those addresses only work for Gothic 2, sorry.

  10. Beiträge anzeigen #30 Zitieren
    Neuling
    Registriert seit
    Jan 2014
    Ort
    Gdańsk
    Beiträge
    5
     
    QazPL ist offline
    Is there a script to Gothic 1 in this topic? I would like to see the possibility of Ikarus.

  11. Beiträge anzeigen #31 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Zitat Zitat von QazPL Beitrag anzeigen
    Is there a script to Gothic 1 in this topic? I would like to see the possibility of Ikarus.
    Not that I know of. Sadly enough I don't have Gothic 1 installed ony my machine right now, so I can't find the correct adresses for G1.

  12. Beiträge anzeigen #32 Zitieren
    Ritter Avatar von Diego93
    Registriert seit
    Dec 2008
    Ort
    Ortenau, Baden
    Beiträge
    1.412
     
    Diego93 ist offline
    Als Ikarus-Anfänger bin ich mit den ganzen Dingen noch nicht so vertraut. Ich möchte auch lediglich ein kleines Feature umsetzen, klappt aber leider nicht. Vielleicht erkennt jemand von euch sofort den Fehler.

    Es geht mir um die Gamma-Korrektur (Hauptmenu -> Einstellungen -> Video -> Helligkeit, Kontrast, Gamma).
    Eine Get und Set Funktion habe ich in der Tabelle mit den Speicheradressen (habe leider den Author vergessen) gefunden, da steht folgendes:

    Code:
    virtual float __thiscall zCRnd_D3D::Vid_GetGammaCorrection(void)   	0x00659610	0	6	public:	virtual float	__thiscall	zCRnd_D3D::Vid_GetGammaCorrection(void)
    Also habe ich an einer beliebigen Stelle (Dialog) folgendes eingebaut:

    Code:
    	
    //zCRnd_D3D::Vid_GetGammaCorrection(void)
    const int GetGammaCorrection = 6657552;	//0x00659610
    //zCRnd_D3D::~zCRnd_D3D(void)       
    const int zCRnD_D3D = 6595952;			//0x0064A570
    	
    
    CALL_RetValIsFloat();
    CALL__thiscall (zCRnD_D3D, GetGammaCorrection);
    
    print (IntToString( CALL_RetValAsFloat () ));
    Der Wert ändert sich jedoch nicht, wenn die Einstellungen im Menu ändere. Mit SetGammaCorrection bekomme ich nicht mehr als einen Absturz hin. Anzumerken wäre vielleicht noch, dass die Get-Funktion einen virtual float liefert, die Set-Funktion aber 3 floats will.

    Ist mein Vorgehen grundsätzlich richtig?

  13. Beiträge anzeigen #33 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Das erste Problem wäre mal, dass du die Adresse der Destruktor-Funktion benutzt, anstelle der Adresse des zCRnd_D3D-Objekts Wo und ob du die richtige this-Adresse leicht rausfinden kannst, weiß ich so mal eben nicht.

  14. Beiträge anzeigen #34 Zitieren
    Warrior Avatar von Thanduriel
    Registriert seit
    Sep 2009
    Ort
    Magdeburg
    Beiträge
    438
     
    Thanduriel ist offline
    Die Adresse die der constructor bei mir zurückgibt ist:
    Code:
    const int zCRnD_D3D = 2129199156; //0x7EE90034
    Damit kommen bei mir beim einstellen des Gamma Wertes Werte von [0,1] raus.
    These days, most of my projects can be found on github.

  15. Beiträge anzeigen #35 Zitieren
    Ritter Avatar von Diego93
    Registriert seit
    Dec 2008
    Ort
    Ortenau, Baden
    Beiträge
    1.412
     
    Diego93 ist offline
    So funktioniert das also...
    Habe die Werte jetzt umstellen können, vielen Dank!

  16. Beiträge anzeigen #36 Zitieren
    General Avatar von Rantragon
    Registriert seit
    May 2008
    Beiträge
    3.903
     
    Rantragon ist offline
    Wahrscheinlich bin ich einfach nur vernagelt, aber wie zur Hölle bekomme ich den String, wenn ich nur einen Zeiger auf einen habe?

    Code:
    str = _^(_@s(str2));
    Das geht ja nicht. Jedenfalls nicht in dem Kontext, den ich vorliegen habe (Pointer von Strings werden an Liste übergeben und dann wieder ausgelesen und konvertiert)

    Könnt ihr mir helfen?

    Grüße

  17. Beiträge anzeigen #37 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Auf dem Haney bekomme ich den Code gerade nicht zusammen, aber dir ist bewusst, dass die Zeiger ein speichern/laden nicht unbedingt überleben? Wenn du die "dauerhaft" speichern willst, musst du sie selber sichern - ich kann dir heute Nachmittag den Code dazu zeigen.

  18. Beiträge anzeigen #38 Zitieren
    General Avatar von Rantragon
    Registriert seit
    May 2008
    Beiträge
    3.903
     
    Rantragon ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Auf dem Haney bekomme ich den Code gerade nicht zusammen, aber dir ist bewusst, dass die Zeiger ein speichern/laden nicht unbedingt überleben? Wenn du die "dauerhaft" speichern willst, musst du sie selber sichern - ich kann dir heute Nachmittag den Code dazu zeigen.
    Ist mir wohl bewusst. Die Liste wird auch unmittelbar beschrieben und dann wieder ausgelesen.

    Übrigens...GROßEN Respekt für LeGo, an dich und Gottfried. Ein rundum gelungenes Paket, welches ich äußerst intensiv nutze
    Ebenso Ikarus, unglaublich, wie viel Arbeit das gewesen sein muss!

    Ich danke euch 3en (Sekti, Lehona, Gottfried) recht herzlich

  19. Beiträge anzeigen #39 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Dann frage ich mich, warum du eine Liste brauchst Aber egal, da gibt es sicherlich einige Gründe für.

    Hast du zString* oder char*? In letzterem Fall würde folgende Funktion funktionieren:
    Code:
    func string zString_zString(var int charPtr) {
    	const int zString__zString = 4198592; //0x4010C0 
    	CALL_PtrParam(charPtr);
    	var int strPtr; strPtr = MEM_Alloc(20); 
    	CALL__thiscall(strPtr, zString__zString);
    	return CALL_RetValAszString();
    };
    Wenn du bereits einen zString* hast, dann sollte folgendes funktionieren:
    Code:
    var string s; s = MEM_ReadString(strPtr);

  20. Beiträge anzeigen #40 Zitieren
    General Avatar von Rantragon
    Registriert seit
    May 2008
    Beiträge
    3.903
     
    Rantragon ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Dann frage ich mich, warum du eine Liste brauchst Aber egal, da gibt es sicherlich einige Gründe für.

    Hast du zString* oder char*? In letzterem Fall würde folgende Funktion funktionieren:
    Code:
    func string zString_zString(var int charPtr) {
    	const int zString__zString = 4198592; //0x4010C0 
    	CALL_PtrParam(charPtr);
    	var int strPtr; strPtr = MEM_Alloc(20); 
    	CALL__thiscall(strPtr, zString__zString);
    	return CALL_RetValAszString();
    };
    Wenn du bereits einen zString* hast, dann sollte folgendes funktionieren:
    Code:
    var string s; s = MEM_ReadString(strPtr);
    Habe beides probiert.

    1.:
    Code:
    var string s; s = "A";
    var int ptr; ptr = _@s(s);
    Print(zString_zString(ptr))
    Der Print liefert
    Code:
    dae,
    nur, dass das d durchgestrichen und ae zusammen als ein Zeichen gefasst ist, also Quatsch.

    2.:
    Code:
    var string s; s = "A";
    var int ptr; ptr = _@s(s);
    var zString zs; zs = _^(ptr);
    s = MEM_ReadString(zs.ptr);
    Print(s)
    Da liefert der Print gar nichts, s = ""

    Was mache ich falsch?

Seite 2 von 31 « Erste 123456913 ... 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