World of Gothic Archiv > Editing
[G1]Item Flags
Seite 1 von 1  1 
13.04.2004, 20:19 #1
König Rhobar II
Beiträge: 639
[G1]Item Flags
ich habe einen neuen item flag eigefügt, damit ich die Gürtel aus G2dndr in eine G1 Mod einbauen kann.
Das klappt auch allerdings kann ich unendlich viele Gürtel auf einmal anlegen. Wo kann ich festlegen, wie viele Items dieser Sort man anlegen kann?
13.04.2004, 21:03 #2
Ken Suyoko
Beiträge: 923

seltsamer weise hab ichd as mit Amrbändern gemacht und ich kann ebenfalls hunderte anziehen. Vielleicht kann man da einfach nur als Bedinung 2 verschiedene Sorten von Gürteln oder Armbändern ins spiel binden. Jedoch gibt es da auch noch die cheater...
14.04.2004, 09:00 #3
Maharreshi
Beiträge: 82

Ich würde sagen, das liegt daran, dass Gothic I überhaupt keine Gürtel / Armbänder kennt.

Während in Gothic II eine C++-gecodete Abfrage existiert, wieviele Items dieser Art der Spieler schon equipped hat und ob er überhaupt noch eins von der Sorte equippen darf, denkt sich Gothic I in dem Sinne halt nix dabei...


Ich würde mich allerdings auch gern noch eines Besseren belehren lassen;)
14.04.2004, 09:13 #4
Ken Suyoko
Beiträge: 923

Aber bei G1 ist doch auch diese Begrenzung da. das man nur 1 Amulet und 2 Ringe anziehen kann.
Drum muss es doch da cuh so etwas wie:

equipItem ITEM_AMULET = 1
equipItem ITEM_RING = 2

aber ich finde das nicht. bei de G2 skripten such ich auch vergebents...
14.04.2004, 09:29 #5
Ken Suyoko
Beiträge: 923

Sry für doppelpost aber irgenwie konnte ich nicht eidtieren.
ich habe in den Gothic Sachen folgenden Skript gefunden:
E:GamesGothic IIG2_workDataScriptsContentAIHumanC_Human


// ******************************************************************
// C_NpcIsUndead
// -------------
// checkt ob der übergebene NSC ein untoter ist
// ******************************************************************

func int C_NpcIsUndead(var C_NPC slf)
{
if (slf.guild == GIL_GOBBO_SKELETON)
|| (slf.guild == GIL_SUMMONED_GOBBO_SKELETON)
|| (slf.guild == GIL_SKELETON)
|| (slf.guild == GIL_SUMMONED_SKELETON)
|| (slf.guild == GIL_SKELETON_MAGE)
|| (slf.guild == GIL_ZOMBIE)
|| (slf.guild == GIL_SHADOWBEAST_SKELETON)
|| (slf.guild == GIL_UNDEADORC)
|| (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)
{
return TRUE;
};

return FALSE;
};


Das kann man doch umschreiben in:

// ******************************************************************
// C_NpcueArmband
// -------------
// checkt ob der übergebene NSC ein Armband trägt
// ******************************************************************

func int C_NpcUseItem_Armband(var C_NPC slf)
{
if (hero == useITEM_ARMBAND)
|| (other == useItem_ARMBAND)
{
return TRUE;
};

return FALSE;
};

so änlich aber nun muss nach der COndition die Folge sein! Und das weis ich noch net wie ich das schreiben soll.
14.04.2004, 10:00 #6
Maharreshi
Beiträge: 82

quote:
Ken Suyoko schrieb:
aber ich finde das nicht. bei de G2 skripten such ich auch vergebents...


Ich meinte ja, dass man danach in den Skripten wahrscheinlich lange suchen kann und doch nix findet, weil diese Beschränkungen im C++-Gothic I/II-Programmcode festgelegt sind.

Edit:

Ich hab mir mal n paar Gedanken gemacht:

THEORETISCH könnte es funktionieren, wenn man eine globale variable definiert, die die Anzahl der equippten Armbänder enthält.
In der OnEquip-Funktion wird diese Variable um 1 erhöht, in OnUnEquip-Funktion um 1 verringert.

In der OnEquip-Funktion müsste dann noch folgendes stehen:
Wenn die Variable nach der Addierung von 1 größer ist als die maximal mögliche Anzahl gleichzeitig getragener Armbänder (eine globale Konstante), wird das Armband direkt wieder UnEquipped.
Da es leider keine AI_UnEquipItem-Funktion gibt, könnte es EVENTUELL funktionieren, wenn man dem Spieler das jeweilige Item komplett abnimmt und anschließend direkt wieder dem Inventar hinzufügt...
Wie gesagt: „Grau is alle Theorie...“


P.S.:
quote:
Aber bei G1 ist doch auch diese Begrenzung da. das man nur 1 Amulet und 2 Ringe anziehen kann.


Ich habe mich schon immer gefragt, warum nur 2 Ringe gleichzeitig tragen kann... Logisch wären doch 10:D
14.04.2004, 18:39 #7
Ken Suyoko
Beiträge: 923

Sorry aber das versteh ich net.
kannst du es mir bitte nochmal erklären? und bitte ohne Zitate. sag einfach in welchen srkipt ich was reinschreiben soll. am besten du machst das für mich und ich kopier einfach nur rein^^
14.04.2004, 18:50 #8
Maharreshi
Beiträge: 82

Hm... G1 oder G2?

Aber ich würde sagen, bevor du dir was kopierst, teste ich erst mal, ob's überhaupt funktioniert...:D
14.04.2004, 21:17 #9
Ken Suyoko
Beiträge: 923

also zu der ersten Frage: ich bastel noch immer an G1 rum! Wenn ich gut genug bin wage ich mich an G2 ran und kann endlich wieder platz auf meiner Platte schaffen^^

also dann teste mal schneller. Ich will etwas kopieren damit ich eigene Armbänder machen kann...
14.04.2004, 21:59 #10
Maharreshi
Beiträge: 82

es könnte leider noch n bisschen dauern, ich muss noch den Lizenztext absegnen lassen ;W
14.04.2004, 22:11 #11
Ken Suyoko
Beiträge: 923

hahaha.
aber hohfentlich gehts....
14.04.2004, 22:46 #12
Maharreshi
Beiträge: 82

Also mal sehen...

Es funktioniert. Leider nur teilweise. Versuche im Moment das irgendwie zu fixen.

Ich poste mal, was ich bis jetzt habe:

code\:
CONST INT Armband_MAX = 2; // 2 Arme = 2 Armbänder
VAR INT Armband_Count; // Hier kommt die Anzahl der equippten Armbänder rein

INSTANCE Armband1 (C_ITEM) // Test-Armband No. 1
{
name = "Armband1";

mainflag = ITEM_KAT_MAGIC; // Dadurch kommts im Inventar zu den Ringen, Amuletten, etc. und wird auch so ähnlich behandelt.

value = 10;

visual = "ItRu_MassDeath.3ds"; // Halt irgendein Visual
material = MAT_METAL;

description = name;
TEXT[0] = "Ein Armband1.";
TEXT[2] = "Es können nur 2 gleichzeitig";
TEXT[3] = "angelegt werden.";
TEXT[5] = NAME_Value; COUNT[5] = value;

on_equip = Armband1_Equip;
on_unequip = Armband1_UnEquip;

//INV_ZBIAS = INVCAM_ENTF_MISC2_STANDARD; // Beeinflusst irgendwie die Anzeige im Inventory [G2]
};

FUNC VOID Armband1_Equip ()
{
Armband_Count += 1; // So. Anzahl um 1 erhöht.

if (Armband_Count > Armband_MAX) // Ist die Anzahl dadurch größer als 2?
{
//Write ("Nur 2 Armbänder gleichzeitig!", 3); // Die Funktion 'Write' gibt's nur bei mir!

Npc_RemoveInvItem (self, Armband1); // Also weg damit!
CreateInvItem (self, Armband1); // Und wieder her!

//Armband_Count -= 1; // unsicher (siehe *_UnEquip)
};
};

FUNC VOID Armband1_UnEquip () // Müsste eigentlich auch durch das *_RemoveInvItem ausgeführt werden... hm...
{
Armband_Count -= 1; // Anzahl um 1 verringern.
};


INSTANCE Armband2 (C_ITEM) // Test-Armband No. 2
{
name = "Armband2"; // Wie oben halt. Alles andere auch wie oben.

mainflag = ITEM_KAT_MAGIC;

value = 20;

visual = "ItMi_Gold.3ds";
material = MAT_METAL;

description = name;
TEXT[0] = "Ein Armband2.";
TEXT[2] = "Es können nur 2 gleichzeitig";
TEXT[3] = "angelegt werden.";
TEXT[5] = NAME_Value; COUNT[5] = value;

on_equip = Armband2_Equip;
on_unequip = Armband2_UnEquip;

//INV_ZBIAS = INVCAM_ENTF_MISC2_STANDARD;
};

FUNC VOID Armband2_Equip ()
{
Armband_Count += 1;

if (Armband_Count > Armband_MAX)
{
//Write ("Nur 2 Armbänder gleichzeitig!", 3); // Siehe oben!

Npc_RemoveInvItem (self, Armband2);
CreateInvItem (self, Armband2);

//Armband_Count -= 1;
};
};

FUNC VOID Armband2_UnEquip ()
{
Armband_Count -= 1;
};


So, das alles am Besten in eine Datei packen (nicht vergessen wg. G1-Kompatibilität die Visuals anzupassen)!

Wie gesagt, so ganz funktioniert es noch nicht. Aber zum Testen reicht es, vielleicht findet ja jemand anderes 'ne Lösung *hoff*...
15.04.2004, 02:42 #13
HornOx
Beiträge: 1.458

Es kann auch vorkommen das das der Spieler ein Armband mehrfach hat, besser mit Npc_HasItems, Npc_RemoveInvItems und CreateInvItems alle entfernen und wieder einfügen anstatt nur eins.
Dann brauchst du imho noch 2 globale variablen in dem die aktuell angelegten armbänder abgespeichert sind.
15.04.2004, 13:40 #14
König Rhobar II
Beiträge: 639

Ich hab das mal versucht, ich kann immernoch mehrere Gürtel anlegen, und jedsmal, wenn ich einen zweiten anlege verdoppelt sich die anzahl der Gürtel^^.
Ich hab das allerdings ein bischen anders gemacht:
code\:
var int belt_equipped;
var int belt_anzahl;
/ ************************************************************************ ******************/
INSTANCE itbe_grd_01(C_Item)
{
name = "leichter Gardegürtel";

mainflag = ITEM_KAT_MAGIC;
flags = ITEM_BELT;

value = 100;

visual = "ItMi_Amulet_ICE_01.3ds"; // hab noch kein mesh dafür

visual_skin = 0;
material = MAT_LEATHER;
on_equip = Equip_itbe_grd_01;
on_unequip = UnEquip_itbe_grd_01;

description = name;
TEXT[1] = NAME_Prot_Edge;
COUNT[1] = 5;
TEXT[2] = NAME_Prot_Fire;
COUNT[2] = 5;
TEXT[4] = "Zusammen mit leichte gardenrüstung: +";
COUNT[4] = 5;
TEXT[5] = NAME_Value;
COUNT[5] = value;
};

FUNC VOID Equip_itbe_grd_01()
{
self.protection [PROT_FIRE] += 5;
self.protection [PROT_EDGE] += 5;
self.protection [PROT_BLUNT] += 5;

grd_belt_l = TRUE; // damit, wenn man die l. GRD Rüstung anzieht der Bonus zu den Werten addiert wird

if (grdarmorl == TRUE) // damit, wenn man die Rüstung schon anhat, der Bonus addiert wird
{
self.protection [PROT_EDGE] += 5;
self.protection [PROT_BLUNT] += 5;
self.protection [PROT_POINT] += 5;
self.protection [PROT_FIRE] += 5;
self.protection [PROT_MAGIC] += 5;
};

if (belt_equipped == TRUE) // Wenn man schon einen anhat:
{
belt_anzahl = Npc_HasItems (hero, itbe_grd_01); //So viele Gürtel hat pc_hero von diser Sorte
Npc_RemoveInvItems (hero, itbe_grd_01, belt_anzahl); //Alle Gürtel dieser Sorte entfernen
CreateInvItems (self, itbe_grd_01, belt_anzahl); //Genausoviele Gürtel dieser Sorte wieder hinzufügen
if (grd_belt_l == TRUE) // Wenn der andere Gürtel der gleiche ist:
{
grd_belt_l = FALSE; //beides auf False stellen, da der Gürtel dann auch abgelegt wird. Sonst kann man gar keinen Gürtel mehr anlegen
belt_equipped = FALSE;
};
}
else
{
belt_equipped = TRUE; // Ein Gürtel ist angelegt
};
};


FUNC VOID UnEquip_itbe_grd_01()
{
self.protection [PROT_FIRE] += 5;
self.protection [PROT_EDGE] += 5;
self.protection [PROT_BLUNT] += 5;

grd_belt_l = FALSE;
belt_equipped = False;

if (grd_belt_l == TRUE)
{
self.protection [PROT_EDGE] -= 5;
self.protection [PROT_BLUNT] -= 5;
self.protection [PROT_POINT] -= 5;
self.protection [PROT_FIRE] -= 5;
self.protection [PROT_MAGIC] -= 5;
};
};



kann sein dass ich hier totalen Mist gebaut hab^^
irgendwo wird da was falsch sein

edit: ich hab mir das nochmal angesehen: Er fügt die Gürtel wieder hinzu, aber er entfernt sie vorher nicht.
17.04.2004, 00:01 #15
JonathanSalznik
Beiträge: 22

Npc_RemoveInvItems funktioniert nur korrekt bei Gegeständen, die gestapelt werden können (flag |= ITEM_MULTI) wie Pfeile oder Bolzen.

Gegenstände zu stapeln, die angezogen werden können, macht meistens wenig Sinn, da man dann nur noch einen der gestapelten Gegenstände anziehen kann. Bei Gürteln sollte es allerdings kein grosses Problem sein, da man eh nur einen gleichzeitig tragen darf.
17.04.2004, 00:24 #16
NicoDE
Beiträge: 1.398

quote:
Zitat von König Rhobar II
code\:
grd_belt_l = FALSE;
belt_equipped = False;

if (grd_belt_l == TRUE)
{

17.04.2004, 13:10 #17
König Rhobar II
Beiträge: 639

ich hab noch ein paar andere Fehler gefunden, aber jetzt klappt es, danke
17.04.2004, 13:42 #18
Ken Suyoko
Beiträge: 923

Alles gute zum Satansbraten, Rhobar!!!!


war ich auch schon bin aber shcon einige posts drüber hinaus^^
Seite 1 von 1  1