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

 

Ergebnis 1 bis 5 von 5
  1. Beiträge anzeigen #1 Zitieren
    Ritter Avatar von aebo
    Registriert seit
    Oct 2008
    Beiträge
    1.278
     
    aebo ist gerade online

    AI_UnequipMeleeWeapon/AI_UnequipRageWeapon

    Moin zusammen,

    aus Zeitgründen und weil es hier sicher einige interessierte Programmierer gibt bitte ich um zwei Funktionen.
    Die eine soll es ermöglichen die aktuell angelegte MeleeWeapon abzulegen (vom Gürtel zu lösen).
    die andere soll es ermöglichen die aktuell angelegte RageWeapon abzulegen (vom Rücken zu lösen).

    Vielen Dank
    Das Wappen
    -Eine fantastische Spielwelt erwartet dich-
    -bis zu 100 Stunden Spielzeit-

  2. Beiträge anzeigen #2 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von aebo Beitrag anzeigen
    Moin zusammen,

    aus Zeitgründen und weil es hier sicher einige interessierte Programmierer gibt bitte ich um zwei Funktionen.
    Die eine soll es ermöglichen die aktuell angelegte MeleeWeapon abzulegen (vom Gürtel zu lösen).
    die andere soll es ermöglichen die aktuell angelegte RageWeapon abzulegen (vom Rücken zu lösen).

    Vielen Dank
    Mit der Funktion hier unten kannst du eine Waffe An/Ausziehen
    Dafür benötigst du dann den entsprechenden Npc, die Instanz-Id des Items und kannst mitgeben ob sie, falls sie bereits angezogen ist, ausgezogen werden soll

    natürlich kannst du das auch abändern wie du willst, z.b. das die Methode guckt ob das schon ausgerüstet ist, wenn nein, dann einfach nichts machen...

    Für die anwendung mit den aktuellen waffen, kannst du dann z.b. Npc_GetEquippedMeleeWeapon(..) & Npc_GetEquippedRangedWeapon(..) verwenden

    Sowas wie "if (Hlp_IsValidItem(Npc_GetEquippedMeleeWeapon(..))) { X_ToggleWeapon(npc, Npc_GetEquippedMeleeWeapon(..), FALSE); }
    (das ist alles aus dem Kopf geschrieben, müsste man erstmal testen)

    Aber die Methode sollte erstmal als denkanstoss reichen denke ich

    Code:
    func void X_ToggleWeapon (var C_NPC slf, var int ItemInst, var int on) {
    
        if (!Npc_HasItems (slf, ItemInst)) {
            MEM_Info ("X_EquipWeaponIfExists: Player has no weapon. Ignoring request.");
            return;
        };
    
        if (!Npc_GetInvItem(slf, ItemInst)) {
            MEM_AssertFail("Unexpected behaviour in X_EquipWeaponIfExists.");
            return;
        };
    
        if ((item.flags & ITEM_ACTIVE_LEGO) && on) {
            /* calling EquipWeapon would unequip the weapon. */
            MEM_Info ("X_EquipWeaponIfExists: This weapon is already equipped. Ignoring request.");
            return;
        };
    
        CALL_PtrParam(MEM_InstToPtr(item));
        CALL__thiscall(MEM_InstToPtr(slf), oCNpc__EquipWeapon);
    };
    Geändert von Kirides (28.07.2020 um 11:28 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Ritter Avatar von aebo
    Registriert seit
    Oct 2008
    Beiträge
    1.278
     
    aebo ist gerade online
    Zitat Zitat von Kirides Beitrag anzeigen
    Mit der Funktion hier unten kannst du eine Waffe An/Ausziehen
    Dafür benötigst du dann den entsprechenden Npc, die Instanz-Id des Items und kannst mitgeben ob sie, falls sie bereits angezogen ist, ausgezogen werden soll

    natürlich kannst du das auch abändern wie du willst, z.b. das die Methode guckt ob das schon ausgerüstet ist, wenn nein, dann einfach nichts machen...

    Für die anwendung mit den aktuellen waffen, kannst du dann z.b. Npc_GetEquippedMeleeWeapon(..) & Npc_GetEquippedRangedWeapon(..) verwenden

    Sowas wie "if (Hlp_IsValidItem(Npc_GetEquippedMeleeWeapon(..))) { X_ToggleWeapon(npc, Npc_GetEquippedMeleeWeapon(..), FALSE); }
    (das ist alles aus dem Kopf geschrieben, müsste man erstmal testen)

    Aber die Methode sollte erstmal als denkanstoss reichen denke ich

    Code:
    func void X_ToggleWeapon (var C_NPC slf, var int ItemInst, var int on) {
    
        if (!Npc_HasItems (slf, ItemInst)) {
            MEM_Info ("X_EquipWeaponIfExists: Player has no weapon. Ignoring request.");
            return;
        };
    
        if (!Npc_GetInvItem(slf, ItemInst)) {
            MEM_AssertFail("Unexpected behaviour in X_EquipWeaponIfExists.");
            return;
        };
    
        if ((item.flags & ITEM_ACTIVE_LEGO) && on) {
            /* calling EquipWeapon would unequip the weapon. */
            MEM_Info ("X_EquipWeaponIfExists: This weapon is already equipped. Ignoring request.");
            return;
        };
    
        CALL_PtrParam(MEM_InstToPtr(item));
        CALL__thiscall(MEM_InstToPtr(slf), oCNpc__EquipWeapon);
    };
    Super gut, super schnell

    Vielen Dank für die Hilfe :-)
    Das Wappen
    -Eine fantastische Spielwelt erwartet dich-
    -bis zu 100 Stunden Spielzeit-

  4. Beiträge anzeigen #4 Zitieren
    Ritter Avatar von aebo
    Registriert seit
    Oct 2008
    Beiträge
    1.278
     
    aebo ist gerade online
    habe da doch nochmal eine Frage zu.

    hier ist mal ein Beispiel wie ich mir das bei einem besonderen Dolch vorstelle.

    Code:
    FUNC VOID Equip_ItMw_1h_Vlk_Dagger()
    {
    
    	if (Npc_IsPlayer (self))
    		{
    		if (hero.attribute[ATR_STRENGTH] >= 18)
    			{
    			hero.attribute[ATR_STRENGTH] = hero.attribute[ATR_STRENGTH] - 18;
    			}
    			else
    				{
    				X_ToggleWeapon(hero, ItMw_1h_Vlk_Dagger, FALSE);  	
    				};
    		};	
    };
    leider klappt das nicht so ganz
    Das Wappen
    -Eine fantastische Spielwelt erwartet dich-
    -bis zu 100 Stunden Spielzeit-

  5. Beiträge anzeigen #5 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von aebo Beitrag anzeigen
    habe da doch nochmal eine Frage zu.

    hier ist mal ein Beispiel wie ich mir das bei einem besonderen Dolch vorstelle.

    Code:
    FUNC VOID Equip_ItMw_1h_Vlk_Dagger()
    {
    
    	if (Npc_IsPlayer (self))
    		{
    		if (hero.attribute[ATR_STRENGTH] >= 18)
    			{
    			hero.attribute[ATR_STRENGTH] = hero.attribute[ATR_STRENGTH] - 18;
    			}
    			else
    				{
    				X_ToggleWeapon(hero, ItMw_1h_Vlk_Dagger, FALSE);  
    				};
    		};	
    };
    leider klappt das nicht so ganz
    Das würde erfordern, das der Dolch zu dem Zeitpunkt auch ausgerüstet ist. Kannst ja mal mit "var C_ITEM equipWeap; equipWeap = Npc_GetEquippedMeleeWeapon(hero);" prüfen welche Waffe zu dem Zeitpunkt ausgerüstet ist.

    AddItemEffects wird innerhalb von EquipItem ausgeführt, kurz bevor das Item angezogen würde.


    In den Spiel-Skripten werden verschiedene Item-Instanzen verwendet um das was du willst zu erreichen.

    Siehe: ItMw_BeliarWeapon_Raven, hier wird ein Mana Wert von 666666 benötigt um die Klaue tragen zu können (un-gebetete Klaue direkt von Raven).
    Wenn man das Mana nicht hat, wird G_CanNotUse ausgeführt, wo dann irgendwas ausgeführt werden kann.
    Geändert von Kirides (30.07.2020 um 08:47 Uhr)

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