|
-
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-
-
Zitat von aebo
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)
-
Zitat von Kirides
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-
-
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-
-
Zitat von aebo
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
|
|