|
-
Tür abschließen.
Hat schon mal jemand mit Ikarus Türen abgeschlossen, also locked auf 1 gesetzt?
Laut Anfangspost von Sektenspinner solls ja gehen. Ich weiß aber gar nicht wie ich da rangehen müsste.
Kann mir einer helfen?
-
Durch die Vobliste iterieren, bis etwas mit dem gewünschten Namen gefunden ist. Das gefundene Objekt als oCMobDoor nutzen. Und dann würde ich mir mal die Eigenschaften
Code:
//oCMobLockable
var int _oCMobLockable_bitfield;
var string _oCMobLockable_keyInstance;
var string _oCMobLockable_pickLockStr;
ansehen, und dabei den Zustand der Tür variieren.
Das wäre mein Ansatz gewesen.
-
Mit MEM_SearchVobByName(string name); findest du den Pointer auf deine Tür, Türen sind abgeleitet von oCMobLockable. In der Eigenschaft _oCMobLockable_bitfield sind mehrere Eigenschaften gespeichert (die meistens nur ein oder wenige Bits Platz benötigen), u.a. auch: oCMobLockable_bitfield_locked. Diese Eigenschaft gibt an, ob das Mob verschlossen ist. Wenn du diese Eigenschaft im Bitfeld auf 1 setzen möchtest, geht das so:
Code:
var int ptr; ptr = MEM_SearchVobByName("TUER");
var oCMobLockable mob; mob = _^(ptr);
mob._oCMobLockable_bitfield = mob._oCMobLockable_bitfield | oCMobLockable_bitfield_locked;
Nach dem Code sollte die Tür verschlossen sein. Wenn du sie aufschließen willst, benutze
Code:
mob._oCMobLockable_bitfield = mob._oCMobLockable_bitfield &~ oCMobLockable_bitfield_locked;
-
Ok, danke. Ich hatte leider noch keine Zeit die Ikarus Doku zu lesen, aber diesen Code hab ich verstanden.
Kann ich davon ausgehen, dass die Objekte genauso/fast genauso heißen wie im Spacer? Also oCMobLockable -> Wie im Spacer zB. Türen und Truhen?
Edit: Oh falsch ausgedrückt. Ich meinte natürlich klassen, die objekte kann man ja selbst wählen den namen.
Geändert von TheEternal (24.07.2014 um 16:41 Uhr)
-
Ich nehme an, dass Sektenspinner sie so benannt hat. Du kannst sie in den Dateien im "EngineClasses" Ordner von Ikarus aber auch ansehen.
-
Ich löse das ganz einfach über den ConditionFunc, ob eine Tür "locked" ist oder nicht. Das wird einfach gefaked.
Code:
// So kann man jederzeit über eine Var verändern
// ob eine Tür abgeschlossen ist oder nicht.
// Zum Zeitpunkt "X" einfach per Script umschalten
// Keinen Schlüsseleintrag in OnStateFunc machen
var int lockdoor01;
func int B_LockDoor_01() // Eintrag im Spacer (B_LOCKDOOR_01)
{
if Npc_IsPlayer(self) // PC_Hero
{
if (lockdoor01 == 0) // Tür offen, kein Schlüssel erforderlich
{
return TRUE;
}
else if (lockdoor01 == 1) // Tür zugeschlossen Schlüssel erforderlich
&& (Npc_HasItems(self, Itke_Key01) > 0)
{
return TRUE;
}
else
{
PRINT_KeyMissing;
return FALSE;
};
}
else // alle Npc können durch (immer, ohne Schlüssel haben zu müssen)
{
return TRUE;
};
};
Man benötigt nicht für jede Kleinigkeit Ikarus und muss studieren .....
Edit
Frage mich sowieso, warum der ConditionFunc so "stiefmütterlich" behandelt wird. Eine der besten Funktionen überhaupt. Man kann damit zum Beispiel
-das "Item-Doppeln" durch Mobsi-Abbruch (Waffe ziehen) verhindern...
-wenn NPC im TA etwas aufschliessen, dann ist das auch für den Hero auf, auch wenn er keinen Schlüssel hat, kann man ebenfalls verhindern..
- Truhen beim ersten mal öffnen per Script befüllen, was den Vorteil hat, dass man nicht immer den Spacer öffnen muss, wenn man noch was reintut, etwas rausnehmen will....
und vieles mehr.
EWAGA MOD .... "echtes Gothic"!
Geändert von Dalai Zoll (25.07.2014 um 09:30 Uhr)
-
Niemand muss studieren, um Ikarus zu benutzen, ich z.B. beginne mein Studium erst dieses Wintersemester
Außerdem kann man mit meiner Variante jede Tür öffnen (indem man z.B. die Tür im Fokus nimmt), dafür müsste man im Spacer jeder Tür eine ConditionFunc geben. Wenn man dafür noch anderen Nutzen hat (weil z.B. viele NPCs durch die Türen gehen oder so), mag das sinnvoll sein, aber meistens wäre das ziemlich viel Aufwand.
Es ist doch wirklich egal, wie ein Problem gelöst wird, solange beide Lösungen auf das Problem bezogen äquivalent sind.
-
Zitat von Lehona
Niemand muss studieren, um Ikarus zu benutzen, ich z.B. beginne mein Studium erst dieses Wintersemester
Außerdem kann man mit meiner Variante jede Tür öffnen (indem man z.B. die Tür im Fokus nimmt), dafür müsste man im Spacer jeder Tür eine ConditionFunc geben. Wenn man dafür noch anderen Nutzen hat (weil z.B. viele NPCs durch die Türen gehen oder so), mag das sinnvoll sein, aber meistens wäre das ziemlich viel Aufwand.
Es ist doch wirklich egal, wie ein Problem gelöst wird, solange beide Lösungen auf das Problem bezogen äquivalent sind.
Hat auch niemand behauptet, sondern man muss nicht Ikarus studieren um eine Tür zuschliessen oder zu öffnen.
Und deine Variante interessiert mich nicht! Und meine Variante war nicht an dich gerichtet. Es wird wohl niemand alle seine 200 Türen pausenlos locken und unlocken müssen. Deine Haarspalterei ist absolut unangebracht!
Hör endlich auf mit deinem Bushing gegen meine Person. Oder hast du die Erlaubnis fast hinter jeden meiner Posts eine unsinnige Bemerkung zu schreiben? Ich mache auch nicht fortwährend Bemerkungen zu Männern in Frauengewändern!
EWAGA MOD .... "echtes Gothic"!
Geändert von Dalai Zoll (25.07.2014 um 13:10 Uhr)
-
Zitat von Dalai Zoll
Hat auch niemand behauptet, sondern man muss nicht Ikarus studieren um eine Tür zuschliessen oder zu öffnen.
Und deine Variante interessiert mich nicht! Und meine Variante war nicht an dich gerichtet. Es wird wohl niemand alle seine 200 Türen pausenlos locken und unlocken müssen. Deine Haarspalterei ist absolut unangebracht!
Da habe ich dich dann wohl falsch verstanden...
Naja, doch? Wenn er z.B. einen Zauber scripten möchte, mit dem er eine Tür (die im Fokus) aufschließen möchte, dann muss das für alle möglichen Türen funktionieren. Es geht doch nur darum, auf die Unterschiede in den Lösungsansätzen hinzuweisen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|