|
-
Zauber-slots abfragbar
Hi. Ich frage mich, ob man die einzelnnen slots in denen man die zauber hat (sprich: shortcut 4-0) nach den enthaltenen spells abfragen kann.
Also z.B.
"Ist im Slot 5 der Zauber xy?"
Dabei meine ich nicht den aktiven spell sondern auch die spells die sich nur "am Gürtel" befinden.
(diesen hochachtungsvoll-kram spar ich mir heute )
EDIT: ich habe jetzt den befehl unter den externen befehlen gefunden, frage mich aber welchen wert/name ich für spells bei category eintragen muss.
Npc_GetInvItemBySlot(var c_npc self, var int category, var int slotnr)
Geändert von mud-freak (13.05.2007 um 10:59 Uhr)
-
Afaik hilft dir Npc_GetInvItemBySlot hier nicht weiter, da mit slot hier wohl Kästchen im Inventar gemeint ist.
Hier dazu mehr:
http://forum.worldofplayers.de/forum...tInvItemBySlot
Das Problem könntest du versuchen mit Equip und Unequip-Funktionen bei den Runen zu lösen, bei denen ein Zähler die Runennummer mitzählt.
Sprich: Rune wird equippt, Variable um 1 erhöht , sodass die Anzahl der equippten Runen bekannt ist.
Dazu wird in 7 Slotvariablen die Spellkonstante gespeichert:
(Slotvariable_4 = SPL_FEUERBALL)
4 wäre dann mit dem Feuerball belegt.
Allerdings ergeben sich folgende Probleme:
Der Spieler kann duch Gebrauch der Zifferntasten die Nummern ungeordnet vergeben und er kann jede beliebige Rune sofort unequippen(also auch in falscher Reihenfolge).
-
Also, nach einigem probieren muss ich sagen, dass die Equip/Unequip funktion bei Runen nicht geht!(?)
hab ich etwas falsch gemacht oder lieg ich mit meiner vermutung richtig?
Code:
INSTANCE ItRu_Enemy (C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_Enemy;
visual = "ItRu_Enemy.3ds";
material = MAT_STONE;
mag_circle = 3;
spell = SPL_enemy;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER_RED";
description = NAME_SPL_enemy;
TEXT [0] = NAME_Mag_Circle;
COUNT [0] = mag_circle;
TEXT [1] = NAME_Manakosten;
COUNT [1] = SPL_COST_enemy;
TEXT [5] = NAME_Value;
COUNT [5] = value;
on_equip = Equip_Enemy;
on_unequip = UnEquip_Enemy;
};
func void Equip_Enemy()
{
PrintScreen ("ENEMY_equip FUNKTION", -1,-1, FONT_Screen, 5); //Zum prüfen
Rune_equip (ItRu_Enemy); //Funktion außerhalb wird nicht durchlaufen
};
func void UnEquip_Enemy ()
{
PrintScreen ("ENEMY_UNequip FUNKTION", -1,-1, FONT_Screen, 5); //Zum prüfen
Rune_unequip (ItRu_Enemy); //Funktion außerhalb wird nicht durchlaufen
};
-
Ja geil. Ich wollte mit UnequipAllWeapons sämtliche Runen des Spielers entfernen. Das "funktioniert" auch insoweit, dass sie (in G1) nicht mehr rot hinterlegt sind.
Aber die Zuweisung der Schnelltasten ist noch aktiv. Keine Ahnung wie ich DAS wegkriege. Hat da schon jemand was gefunden?
Ich möchte im Grunde genommen ein "Strafsystem" für mordende und raubende Magier machen. Wer ein derartiges Verbrechen begeht, soll nicht mehr auf seine Runen zugreifen können.
Ich habe das System so weit ausgeklügelt, dass die magischen Kreise auf 0 gesetzt werden. Allerdings werden die Kreise nur bei EQUIP geprüft und nicht beim "ziehen" des Zaubers. Das heißt, dass man trotz 0 Kreise noch alle seine equippten Runen benutzen kann. Die einfachste Lösung wäre unequippen, aber das funktioniert halt nicht.
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
-
Zitat von Bisasam
Ja geil. Ich wollte mit UnequipAllWeapons sämtliche Runen des Spielers entfernen. Das "funktioniert" auch insoweit, dass sie (in G1) nicht mehr rot hinterlegt sind.
Aber die Zuweisung der Schnelltasten ist noch aktiv. Keine Ahnung wie ich DAS wegkriege. Hat da schon jemand was gefunden?
Die Klasse oCMag_Book die bei Ikarus dabei ist, ist für diesen Kram zuständig. Da müsstest du dir dann wahrscheinlich die zugehörigen engine Funktionen raus suchen um damit zu arbeiten.
Code:
//--------------------------------------
// Magie buch
//--------------------------------------
/* Beschreibungen ergänzt von Mud-freak. Danke dafür! */
/* Genutzt um den Kreis über dem Spieler bei der Zauberauswahl anzuzeigen
* außerdem für zuordnungen von Zaubern <-> Items <-> Tasten. */
class oCMag_Book {
[...]
Zitat von Bisasam
Ich möchte im Grunde genommen ein "Strafsystem" für mordende und raubende Magier machen. Wer ein derartiges Verbrechen begeht, soll nicht mehr auf seine Runen zugreifen können.
Ich habe das System so weit ausgeklügelt, dass die magischen Kreise auf 0 gesetzt werden. Allerdings werden die Kreise nur bei EQUIP geprüft und nicht beim "ziehen" des Zaubers. Das heißt, dass man trotz 0 Kreise noch alle seine equippten Runen benutzen kann. Die einfachste Lösung wäre unequippen, aber das funktioniert halt nicht.
Eine eher "simple" Idee wäre das man nur das Einsetzen der Zauber verhindert. Könntest du für alle Zauber in den entsprechenden Spell_Logic_XXX Funktionen machen:
Code:
func int Spell_Logic_ChargeFireball (var int manaInvested)
{
if(cannotUseInnosSpells) {
MEM_CALL(printCannotUseInnosSpells);
return SPL_DONTINVEST;
};
[...]
Dann kann man die Zauber zwar noch ziehen, aber nicht einsetzten.
Geändert von Cryp18Struct (03.01.2019 um 14:06 Uhr)
-
Zitat von mud-freak
Hi. Ich frage mich, ob man die einzelnnen slots in denen man die zauber hat (sprich: shortcut 4-0) nach den enthaltenen spells abfragen kann.
Also z.B.
"Ist im Slot 5 der Zauber xy?"
Dabei meine ich nicht den aktiven spell sondern auch die spells die sich nur "am Gürtel" befinden.
(diesen hochachtungsvoll-kram spar ich mir heute )
EDIT: ich habe jetzt den befehl unter den externen befehlen gefunden, frage mich aber welchen wert/name ich für spells bei category eintragen muss.
Wir haben für unsere Schnellzauber eine recht umständliche Art und Weise das zu Lösen, führt aber zu einem Ergebnis. Je nachdem, was du damit machen willst. Dabei Fragen wir ab, ob ein bestimmter Zauber (bzw. eine bestimmte Rune) an einem bestimmten Slot equipped ist.
Code:
const int ocMagBook__GetKeyByItem = 4693296;// 0x00479D30; len:5 ret:int
func int wrapMagBookGetKeyByItem(var int itemInst){
if (!Npc_HasItems(hero, itemInst)) {
pd_si("wrapMagBookGetKeyByItem: player does not have item:", itemInst);
return -1;
};
Npc_GetInvItem(hero, itemInst);
var c_item rune;
var int runePtr;
runePtr = _@(item);
rune = MEM_PtrToInst(runePtr);
var int npcPtr; npcPtr = _@(hero);
var oCNpc npcOC; npcOC = _^(npcPtr);
var int key;
// Get the magic book to retrieve the key
var int magBookPtr; magBookPtr = npcOC.mag_book;
const int call = 0;
if (CALL_Begin(call)) {
CALL_PtrParam(_@(runePtr)); //
CALL__thiscall(_@(magBookPtr), ocMagBook__GetKeyByItem);
call = CALL_End();
};
key = CALL_RetValAsInt();
//print (ConcatStrings("key: ", IntToString(key)));
return key;
};
// Verwendung
var int spellSlotNumber_ChargeFireball; spellSlotNumber_ChargeFireball = wrapMagBookGetKeyByItem(ItRu_ChargeFireball);
if(spellSlotNumber_ChargeFireball == 1) {
print("ChargeFireball ist auf der Taste 4");
};
if(spellSlotNumber_ChargeFireball == 2) {
print("ChargeFireball ist auf der Taste 5");
};
-
Zitat von Draxes
Wir haben für unsere Schnellzauber eine recht umständliche Art und Weise das zu Lösen, führt aber zu einem Ergebnis. Je nachdem, was du damit machen willst. Dabei Fragen wir ab, ob ein bestimmter Zauber (bzw. eine bestimmte Rune) an einem bestimmten Slot equipped ist.
Danke für deine Antwort! Vor 12 Jahren habe ich glaube ich schon eine Lösung gefunden
Warum der Thread hier wieder ausgegraben wurde weiß ich nicht. Dar Problem scheint doch eher ein anderes?
-
ich habe mein Problem ganz ohne Ikarus und LeGo gelöst:
Einfach ALLE Runen im inventar zerstören und wiederherstellen. Klappt
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|