Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
daedalus:nuetzliches [2026/08/10 16:15] 43.173.179.248 alte Version wiederhergestellt (2015/08/18 20:15) |
daedalus:nuetzliches [2026/08/11 06:58] (aktuell) 43.173.180.233 alte Version wiederhergestellt (2016/02/06 12:59) |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | == Inhalt: | + | === Taschendiebstahl-Dialoge für alle === |
| - | *[[Daedalus: | + | |
| - | *[[Daedalus: | + | |
| - | *[[Daedalus: | + | |
| - | *[[Daedalus: | + | |
| - | *[[Daedalus: | + | |
| - | *[[Daedalus: | + | |
| - | + | ||
| - | + | ||
| - | == Taschendiebstahl-Dialoge für alle == | + | |
| + | <code C> | ||
| /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| // | // | ||
| Zeile 133: | Zeile 125: | ||
| }; | }; | ||
| + | </ | ||
| - | == Mehr Gilden einfügen == | + | === Mehr Gilden einfügen |
| Constans.d-Auszug | Constans.d-Auszug | ||
| + | <code C> | ||
| // ****************** | // ****************** | ||
| // | // | ||
| Zeile 178: | Zeile 172: | ||
| const int GIL_HERO | const int GIL_HERO | ||
| + | </ | ||
| Ich habe hier ein paar Beispiel Gilden zusammen gefügt. | Ich habe hier ein paar Beispiel Gilden zusammen gefügt. | ||
| Zeile 183: | Zeile 178: | ||
| Die Magier genießen hier als Beispiel einen besonderen Stand. | Die Magier genießen hier als Beispiel einen besonderen Stand. | ||
| Es gibt noch ein paar Nebengilden und eine Gilde namens Hero, | Es gibt noch ein paar Nebengilden und eine Gilde namens Hero, | ||
| - | damit sich alle Farben bekriegen " | + | damit sich alle Farben bekriegen " |
| + | <code C> | ||
| //Alte gilden bekommen 1 | //Alte gilden bekommen 1 | ||
| const int GIL_OLD = 1; | const int GIL_OLD = 1; | ||
| Zeile 210: | Zeile 206: | ||
| const int GIL_SEPERATOR_HUM | const int GIL_SEPERATOR_HUM | ||
| + | </ | ||
| Dann... Text.d Auszug | Dann... Text.d Auszug | ||
| + | |||
| + | <code C> | ||
| // **************************************************************************************** | // **************************************************************************************** | ||
| // Gildennamen | // Gildennamen | ||
| Zeile 219: | Zeile 218: | ||
| // | // | ||
| + | </ | ||
| Und hier noch zwei sachen: | Und hier noch zwei sachen: | ||
| Npc_Globals.d: | Npc_Globals.d: | ||
| + | <code C> | ||
| SetGuild_Text(); | SetGuild_Text(); | ||
| // ********************** | // ********************** | ||
| Zeile 255: | Zeile 255: | ||
| TXT_GUILDS[65] = " | TXT_GUILDS[65] = " | ||
| }; | }; | ||
| + | </ | ||
| und hier ein Auszug aus einer Npc_Datei: | und hier ein Auszug aus einer Npc_Datei: | ||
| + | <code C> | ||
| // - - - - - - NSC - - - - - - | // - - - - - - NSC - - - - - - | ||
| name = " | name = " | ||
| Zeile 269: | Zeile 270: | ||
| aivar[ AIV_MagicUser] = MAGIC_ALWAYS; | aivar[ AIV_MagicUser] = MAGIC_ALWAYS; | ||
| aivar[ AIV_GuildStufe] = GIL_STUFE_MAGIER; | aivar[ AIV_GuildStufe] = GIL_STUFE_MAGIER; | ||
| + | </ | ||
| Hier ergeben sich selbst verständlich viele Nachteile, da alle Mitglieder der einzelnen Gruppen alle der gleichen Gilde angehöhren, | Hier ergeben sich selbst verständlich viele Nachteile, da alle Mitglieder der einzelnen Gruppen alle der gleichen Gilde angehöhren, | ||
| - | == Zufallsfunktion mit passenderer statistischer Verteilung == | + | === Zufallsfunktion mit passenderer statistischer Verteilung |
| + | <code C> | ||
| /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| // | // | ||
| Zeile 322: | Zeile 325: | ||
| start8 = Hlp_Random(4263); | start8 = Hlp_Random(4263); | ||
| }; | }; | ||
| + | </ | ||
| - | == [für Fortgeschritene] Zufällige Attribute für Npcs == | + | === Automatische Übertragung von Gegenständen von Opfer nach Hero === |
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | // | + | |
| - | // - - - - - - - - - - - - - - - - - - - - - - - - | + | |
| - | // | + | |
| - | // Setzt die Attribute mit Hilfe eines Zufalls. | + | |
| - | // Nötig ist dafür die Stärkeklasse des Npc für Nah, Fern & Magie Kampf. | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | + | ||
| - | /* | + | |
| - | Zur Errinerung - Auszug AI_Constants.d: | + | |
| - | + | ||
| - | Stärkeklassen für die Zufalls-Attribute | + | |
| - | - - - - - - - - - - - - - - - - - - - | + | |
| - | + | ||
| - | const int COWARD = 0; //Lars, NK & FK der Magier | + | |
| - | const int NORMAL = 1; | + | |
| - | const int STRONG = 2; | + | |
| - | const int RAISED = 3; | + | |
| - | const int MASTER = 4; //alle Anführer. | + | |
| - | + | ||
| - | */ | + | |
| - | + | ||
| - | func void B_SetAttributesRandom (var int nahKampf, var int fernKampf, var int magieKampf) | + | |
| - | { | + | |
| - | // - - - - - Resett for Random - - - - - - | + | |
| - | Hlp_Rand_Resett(); | + | |
| - | + | ||
| - | var int rnd; | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | + | ||
| - | if nahKampf == MASTER | + | |
| - | || fernKampf == MASTER | + | |
| - | || magieKampf == MASTER | + | |
| - | { | + | |
| - | self.fight_tactic = FAI_HUMAN_MASTER; | + | |
| - | + | ||
| - | // 40 - 60 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | self.level = 40 + rnd; | + | |
| - | } | + | |
| - | else if nahKampf == RAISED | + | |
| - | || fernKampf == RAISED | + | |
| - | || magieKampf == RAISED | + | |
| - | { | + | |
| - | self.fight_tactic = FAI_HUMAN_MASTER; | + | |
| - | + | ||
| - | // 30 - 50 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | self.level = 30 + rnd; | + | |
| - | } | + | |
| - | else if nahKampf == STRONG | + | |
| - | || fernKampf == STRONG | + | |
| - | || magieKampf == STRONG | + | |
| - | { | + | |
| - | self.fight_tactic = FAI_HUMAN_COWARD; | + | |
| - | + | ||
| - | // 20 - 40 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | self.level = 20 + rnd; | + | |
| - | } | + | |
| - | else if nahKampf == NORMAL | + | |
| - | || fernKampf == NORMAL | + | |
| - | || magieKampf == NORMAL | + | |
| - | { | + | |
| - | self.fight_tactic = FAI_HUMAN_NORMAL; | + | |
| - | // 10 - 30 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | self.level = 10 + rnd; | + | |
| - | } | + | |
| - | else //Alles COWARD | + | |
| - | { | + | |
| - | self.fight_tactic = FAI_HUMAN_COWARD; | + | |
| - | // 1 - 10 | + | |
| - | rnd = Hlp_Rand(9); | + | |
| - | self.level = 1 + rnd; | + | |
| - | + | ||
| - | }; | + | |
| - | + | ||
| - | //- - - - - - Nach Level - - - - - - - - - | + | |
| - | self.attribute[ATR_HITPOINTS_MAX] = (self.level + 1) * 10; | + | |
| - | self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX]; | + | |
| - | + | ||
| - | // - - - - - - XP für NSCs - - - - - - | + | |
| - | self.exp = (500*[[self.level+1): | + | |
| - | self.exp_next = (500*[[self.level+2): | + | |
| - | + | ||
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | + | ||
| - | if nahKampf == NORMAL | + | |
| - | { | + | |
| - | // 10 - 60 | + | |
| - | rnd = Hlp_Rand(50); | + | |
| - | self.attribute[ATR_STRENGTH] = 10 + rnd; | + | |
| - | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | + | |
| - | + | ||
| - | // 10 - 29 --> NICHTMAL 30 | + | |
| - | rnd = Hlp_Rand(19); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_1H, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_2H, | + | |
| - | } | + | |
| - | else if nahKampf == STRONG | + | |
| - | { | + | |
| - | // 50 - 130 | + | |
| - | rnd = Hlp_Rand(80); | + | |
| - | self.attribute[ATR_STRENGTH] = 50 + rnd; | + | |
| - | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | + | |
| - | + | ||
| - | // mind. 30 - max 59 | + | |
| - | rnd = Hlp_Rand(29); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_1H, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_2H, | + | |
| - | } | + | |
| - | else if nahKampf == RAISED | + | |
| - | { | + | |
| - | // 120 - 180 | + | |
| - | rnd = Hlp_Rand(60); | + | |
| - | self.attribute[ATR_STRENGTH] = 120 + rnd; | + | |
| - | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | + | |
| - | + | ||
| - | // 60 - 80 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_1H, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_2H, | + | |
| - | } | + | |
| - | else if nahKampf == MASTER | + | |
| - | { | + | |
| - | // 160 - 200 | + | |
| - | rnd = Hlp_Rand(40); | + | |
| - | self.attribute[ATR_STRENGTH] = 160 + rnd; | + | |
| - | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | + | |
| - | + | ||
| - | // 80 - 100 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_1H, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_2H, | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | // max 10 | + | |
| - | rnd = Hlp_Rand(9); | + | |
| - | self.attribute[ATR_STRENGTH] = 1 + rnd; | + | |
| - | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_1H, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_2H, | + | |
| - | }; | + | |
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | if fernKampf == NORMAL | + | |
| - | { | + | |
| - | // 10 - 60 | + | |
| - | rnd = Hlp_Rand(50); | + | |
| - | self.attribute[ATR_DEXTERITY] = 10 + rnd; | + | |
| - | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | + | |
| - | + | ||
| - | // 10 - 29 --> NICHTMAL 30 | + | |
| - | rnd = Hlp_Rand(19); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_BOW, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | + | |
| - | } | + | |
| - | else if fernKampf == STRONG | + | |
| - | { | + | |
| - | // 50 - 130 | + | |
| - | rnd = Hlp_Rand(80); | + | |
| - | self.attribute[ATR_DEXTERITY] = 50 + rnd; | + | |
| - | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | + | |
| - | + | ||
| - | // mind. 30 - max 59 | + | |
| - | rnd = Hlp_Rand(29); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_BOW, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | + | |
| - | } | + | |
| - | else if fernKampf == RAISED | + | |
| - | { | + | |
| - | // 120 - 180 | + | |
| - | rnd = Hlp_Rand(60); | + | |
| - | self.attribute[ATR_DEXTERITY] = 120 + rnd; | + | |
| - | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | + | |
| - | + | ||
| - | // 60 - 80 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_BOW, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | + | |
| - | } | + | |
| - | else if fernKampf == MASTER | + | |
| - | { | + | |
| - | // 160 - 200 | + | |
| - | rnd = Hlp_Rand(40); | + | |
| - | self.attribute[ATR_DEXTERITY] = 160 + rnd; | + | |
| - | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | + | |
| - | + | ||
| - | // 80 - 100 | + | |
| - | rnd = Hlp_Rand(20); | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_BOW, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | // max 10 | + | |
| - | rnd = Hlp_Rand(9); | + | |
| - | self.attribute[ATR_DEXTERITY] = 1 + rnd; | + | |
| - | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_BOW, | + | |
| - | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | + | |
| - | }; | + | |
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // Vorsicht: Dieser Abschnitt setzt voraus, dass die AI an unterschiedliche Magiebenutzung angepasst ist. (zu betrachten: B_SelectSpell.d) | + | |
| - | + | ||
| - | // Gilt für Manchmal-Magier, | + | |
| - | if magieKampf == NORMAL | + | |
| - | { | + | |
| - | self.aivar[AIV_MagicUser] = MAGIC_SOMETIMES; | + | |
| - | + | ||
| - | // 50 - 100 | + | |
| - | rnd = Hlp_Rand(50); | + | |
| - | self.attribute[ATR_MANA_MAX] = 50 + rnd; | + | |
| - | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | + | |
| - | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | + | |
| - | + | ||
| - | Npc_SetTalentSkill (self, | + | |
| - | } | + | |
| - | // Gilt nur für Magier: | + | |
| - | else if magieKampf == STRONG | + | |
| - | { | + | |
| - | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | + | |
| - | + | ||
| - | // 90 - 180 | + | |
| - | rnd = Hlp_Rand(90); | + | |
| - | self.attribute[ATR_MANA_MAX] = 90 + rnd; | + | |
| - | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | + | |
| - | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | + | |
| - | + | ||
| - | Npc_SetTalentSkill (self, | + | |
| - | } | + | |
| - | else if magieKampf == RAISED | + | |
| - | { | + | |
| - | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | + | |
| - | + | ||
| - | // 170 - 260 | + | |
| - | rnd = Hlp_Rand(90); | + | |
| - | self.attribute[ATR_MANA_MAX] = 170 + rnd; | + | |
| - | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | + | |
| - | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | + | |
| - | + | ||
| - | Npc_SetTalentSkill (self, | + | |
| - | } | + | |
| - | else if magieKampf == MASTER | + | |
| - | { | + | |
| - | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | + | |
| - | + | ||
| - | // 250 - 300 | + | |
| - | rnd = Hlp_Rand(50); | + | |
| - | self.attribute[ATR_MANA_MAX] = 250 + rnd; | + | |
| - | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | + | |
| - | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | + | |
| - | + | ||
| - | Npc_SetTalentSkill (self, | + | |
| - | } | + | |
| - | else // Alle NICHT-Magier | + | |
| - | { | + | |
| - | self.aivar[AIV_MagicUser] = MAGIC_NEVER; | + | |
| - | + | ||
| - | // max 10 | + | |
| - | rnd = Hlp_Rand(9); | + | |
| - | self.attribute[ATR_MANA_MAX] = 1 + rnd; | + | |
| - | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | + | |
| - | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | + | |
| - | + | ||
| - | Npc_SetTalentSkill (self, | + | |
| - | }; | + | |
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | if fernKampf >= STRONG | + | |
| - | { | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | }; | + | |
| - | + | ||
| - | if nahKampf >= STRONG | + | |
| - | { | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | }; | + | |
| - | + | ||
| - | if nahKampf >= STRONG || fernKampf >= STRONG | + | |
| - | { | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | }; | + | |
| - | + | ||
| - | if magieKampf >= STRONG | + | |
| - | { | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | Npc_SetTalentSkill (self, | + | |
| - | }; | + | |
| - | }; | + | |
| - | + | ||
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | // | + | |
| - | // | + | |
| - | // - - - - - - - - - - - - - - - - - - - - - - | + | |
| - | // | + | |
| - | // Das Zufällige Austeilen von Attributen macht es nötig die Werte im Nachhinein an die Waffen anzupassen. | + | |
| - | // Diese Methode schreibt die Werte neu, wenn sie nicht ausreichen die gewollten Waffen zu tragen. | + | |
| - | // Dazu wird die Nebenmethode B_SetAttributForWeapon(waffe) benötigt. Die Methode setzt alle 3 Attribute und equipt die Waffe. | + | |
| - | // | + | |
| - | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | + | |
| - | /* Zur Erinnerung die in der Waffe beschriebenen benötigten Attribute: (Classes.d) | + | |
| - | + | ||
| - | // Benötigte Attribute zum Benutzen des Items | + | |
| - | VAR INT cond_atr [3] ; | + | |
| - | VAR INT cond_value [3] ; | + | |
| - | + | ||
| - | (constants.d) | + | |
| - | + | ||
| - | const int ATR_HITPOINTS = | + | |
| - | const int ATR_HITPOINTS_MAX = | + | |
| - | const int ATR_MANA = | + | |
| - | const int ATR_MANA_MAX = | + | |
| - | + | ||
| - | const int ATR_STRENGTH = | + | |
| - | const int ATR_DEXTERITY = | + | |
| - | const int ATR_REGENERATEHP = | + | |
| - | const int ATR_REGENERATEMANA = | + | |
| - | + | ||
| - | */ | + | |
| - | + | ||
| - | func void B_SetAttributForWeapon(var int waffenInstanz) | + | |
| - | { | + | |
| - | //- - - - - Resett for Random - - - - - - | + | |
| - | Hlp_Rand_Resett(); | + | |
| - | + | ||
| - | var int rnd; rnd = Hlp_Rand(10); | + | |
| - | + | ||
| - | // | + | |
| - | if waffenInstanz == nothing //NO_ARMOR ist Ersatz für nil oder nothing | + | |
| - | { | + | |
| - | return; | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | CreateInvItems (self, | + | |
| - | }; | + | |
| - | + | ||
| - | if item.cond_atr[0] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[0] {self.attribute[ATR_HITPOINTS] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[0] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[0] {self.attribute[ATR_MANA] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[0] {self.attribute[ATR_MANA_MAX] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[0] {self.attribute[ATR_STRENGTH] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[0] {self.attribute[ATR_DEXTERITY] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[0] {self.attribute[ATR_REGENERATEHP] = item.cond_value[0] + rnd; }; } | + | |
| - | else if item.cond_atr[0] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[0] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[0] + rnd; }; }; | + | |
| - | + | ||
| - | if item.cond_atr[1] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[1] {self.attribute[ATR_HITPOINTS] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[1] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[1] {self.attribute[ATR_MANA] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[1] {self.attribute[ATR_MANA_MAX] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[1] {self.attribute[ATR_STRENGTH] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[1] {self.attribute[ATR_DEXTERITY] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[1] {self.attribute[ATR_REGENERATEHP] = item.cond_value[1] + rnd; }; } | + | |
| - | else if item.cond_atr[1] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[1] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[1] + rnd; }; }; | + | |
| - | + | ||
| - | if item.cond_atr[2] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[2] {self.attribute[ATR_HITPOINTS] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[2] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[2] {self.attribute[ATR_MANA] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[2] {self.attribute[ATR_MANA_MAX] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[2] {self.attribute[ATR_STRENGTH] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[2] {self.attribute[ATR_DEXTERITY] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[2] {self.attribute[ATR_REGENERATEHP] = item.cond_value[2] + rnd; }; } | + | |
| - | else if item.cond_atr[2] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[2] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[2] + rnd; }; }; | + | |
| - | + | ||
| - | EquipItem(self, | + | |
| - | }; | + | |
| - | + | ||
| - | func void B_SetAttributForWeapons(var int nahKampfWaffe, | + | |
| - | { | + | |
| - | if nahKampfWaffe != nothing | + | |
| - | { | + | |
| - | B_SetAttributForWeapon(nahKampfWaffe); | + | |
| - | }; | + | |
| - | if ferKampfWaffe != nothing | + | |
| - | { | + | |
| - | B_SetAttributForWeapon(ferKampfWaffe); | + | |
| - | }; | + | |
| - | }; | + | |
| - | + | ||
| - | == Automatische Übertragung von Gegenständen von Opfer nach Hero == | + | |
| Das folgende Script ist zu ersetzten. Dann werden in eurem Mod zukünftig alle Items, außer Rüstungen, vom Opfer-Inventar in das Helden-Inventar transferiet. | Das folgende Script ist zu ersetzten. Dann werden in eurem Mod zukünftig alle Items, außer Rüstungen, vom Opfer-Inventar in das Helden-Inventar transferiet. | ||
| Zeile 732: | Zeile 335: | ||
| D.h. Ihr könnt durch Hinzufügen von Abfragen zB einen Questerfolg auslösen. Das ist dann schon fast wie in G3, jedoch musste man auch dort manuell plündern. | D.h. Ihr könnt durch Hinzufügen von Abfragen zB einen Questerfolg auslösen. Das ist dann schon fast wie in G3, jedoch musste man auch dort manuell plündern. | ||
| - | Hier dir URL zu dem Script als Datei: | + | <code C> |
| - | http:// | + | |
| // ************************** | // ************************** | ||
| // B_GiveDeathInv | // B_GiveDeathInv | ||
| Zeile 1115: | Zeile 716: | ||
| self.aivar[AIV_DeathInvGiven] = TRUE; | self.aivar[AIV_DeathInvGiven] = TRUE; | ||
| }; | }; | ||
| + | </ | ||
| - | == Kill-Counter erstellen == | + | === Kill-Counter erstellen |
| So, da das auch nicht so einfach ist, gebe ich hier mal ein Beispiel für einen Kill-Counter mit folgender Attributssteigerung. | So, da das auch nicht so einfach ist, gebe ich hier mal ein Beispiel für einen Kill-Counter mit folgender Attributssteigerung. | ||
| - | Erstmal müssen wir die ZS_Dead überarbeiten. Diese befindet sich im Verzeichnis " | + | Erstmal müssen wir die ZS_Dead überarbeiten. Diese befindet sich im Verzeichnis " |
| - | // ------ XP ------ | + | <code C> |
| - | if ( Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE) ) | + | // ------ XP ------ |
| - | && (self.aivar[AIV_VictoryXPGiven] == FALSE) | + | if ( Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE) ) |
| - | { | + | && (self.aivar[AIV_VictoryXPGiven] == FALSE) |
| - | B_GivePlayerXP (self.level * XP_PER_VICTORY); | + | { |
| - | B_Counter (); | + | B_GivePlayerXP (self.level * XP_PER_VICTORY); |
| - | self.aivar[AIV_VictoryXPGiven] = TRUE; | + | B_Counter (); |
| - | }; | + | self.aivar[AIV_VictoryXPGiven] = TRUE; |
| + | }; | ||
| + | </ | ||
| - | Wir tragen nach der B_GivePlayerXP noch B_Counter(); | + | Wir tragen nach der '' |
| - | Hierzu erstellen wir eine Datei mit dem Namen "B_Counter.d" | + | Hierzu erstellen wir eine Datei mit dem Namen '' |
| + | <code C> | ||
| // ******************************************** | // ******************************************** | ||
| // | // | ||
| Zeile 1144: | Zeile 749: | ||
| kill_counter += 1;// Plus einen Kill | kill_counter += 1;// Plus einen Kill | ||
| }; | }; | ||
| + | </ | ||
| - | Diese Funktion zählt jetzt eine Variable +1, da man einen NPC getötet hat. Nun müssen wir die Variable in die Story_Globals.d eintragen. Das kann ganz oben sein, ganz unten oder in der Mitte, ganz egal. Wir erstellen jetzt einfach einen neuen Abschnitt ganz oben in der Story_Globals.d: | + | Diese Funktion zählt jetzt eine Variable +1, da man einen NPC getötet hat. Nun müssen wir die Variable in die '' |
| + | <code C> | ||
| // ************************* | // ************************* | ||
| // Globalvariablen für Story | // Globalvariablen für Story | ||
| Zeile 1153: | Zeile 760: | ||
| // ------ NEU ------ | // ------ NEU ------ | ||
| var int kill_counter = 0; | var int kill_counter = 0; | ||
| + | </ | ||
| Danach folgt wieder der normale Rest der Datei. | Danach folgt wieder der normale Rest der Datei. | ||
| - | Nun müssen wir im Weiteren noch die B_Counter.d in der Gothic.src eintragen, die wir mit dem normalen Text-Editor öffnen können, so wie die Skripte (Verzeichnis der Gothic.src: | + | Nun müssen wir im Weiteren noch die '' |
| - | STORY\\Log_Entries\\Log_Constants_*.d | + | < |
| - | STORY\\XP_Constants.d | + | STORY\Log_Entries\Log_Constants_*.d |
| - | STORY\\Story_Globals.d | + | STORY\XP_Constants.d |
| - | STORY\\NPC_Globals.d | + | STORY\Story_Globals.d |
| - | STORY\\svm.d | + | STORY\NPC_Globals.d |
| - | STORY\\Text.d | + | STORY\svm.d |
| - | STORY\\B_STORY\\B_Counter.d | + | STORY\Text.d |
| + | STORY\B_STORY\B_Counter.d | ||
| + | </ | ||
| - | Das ist jetzt nur der wichtigste Ausschnitt aus der Gothic.src. Die B_Counter darf NICHT über der Story_Globals .d stehen, da dann die Variable in der B_Counter nicht erkannt wird. | + | Das ist jetzt nur der wichtigste Ausschnitt aus der '' |
| Zeile 1172: | Zeile 781: | ||
| Hierzu öffnen wr nochmals die B_Counter.d und verändern sie wie folgt: | Hierzu öffnen wr nochmals die B_Counter.d und verändern sie wie folgt: | ||
| + | <code C> | ||
| func void B_Counter () | func void B_Counter () | ||
| { | { | ||
| Zeile 1189: | Zeile 799: | ||
| // ***************************************************************************************** | // ***************************************************************************************** | ||
| const string PRINT_STEIGERUNG = "Die Stärke wurde um 5 gesteigert"; | const string PRINT_STEIGERUNG = "Die Stärke wurde um 5 gesteigert"; | ||
| + | </ | ||
| Nun folgt noch der Rest des Skripts, so wie es vorher auch war. | Nun folgt noch der Rest des Skripts, so wie es vorher auch war. | ||
| - | |||
| Das war's, nun noch Skripte parsen und fertig ist euer Kill-Counter mit Learning by Doing-System. | Das war's, nun noch Skripte parsen und fertig ist euer Kill-Counter mit Learning by Doing-System. | ||
| - | Bei Fragen einfach per PN an Mantragon wenden. ;) | ||
| - | MfG | + | === [für Fortgeschritene] Zufällige Attribute für Npcs === |
| - | Mantragon | + | |
| + | <code C> | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | // | ||
| + | // - - - - - - - - - - - - - - - - - - - - - - - - | ||
| + | // | ||
| + | // Setzt die Attribute mit Hilfe eines Zufalls. | ||
| + | // Nötig ist dafür die Stärkeklasse des Npc für Nah, Fern & Magie Kampf. | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | /* | ||
| + | Zur Erinnerung - Auszug AI_Constants.d: | ||
| + | |||
| + | Stärkeklassen für die Zufalls-Attribute | ||
| + | - - - - - - - - - - - - - - - - - - - | ||
| + | |||
| + | const int COWARD = 0; //Lars, NK & FK der Magier | ||
| + | const int NORMAL = 1; | ||
| + | const int STRONG = 2; | ||
| + | const int RAISED = 3; | ||
| + | const int MASTER = 4; //alle Anführer. | ||
| + | |||
| + | */ | ||
| + | |||
| + | func void B_SetAttributesRandom (var int nahKampf, var int fernKampf, var int magieKampf) | ||
| + | { | ||
| + | // - - - - - Resett for Random - - - - - - | ||
| + | Hlp_Rand_Resett(); | ||
| + | |||
| + | var int rnd; | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | if nahKampf == MASTER | ||
| + | || fernKampf == MASTER | ||
| + | || magieKampf == MASTER | ||
| + | { | ||
| + | self.fight_tactic = FAI_HUMAN_MASTER; | ||
| + | |||
| + | // 40 - 60 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | self.level = 40 + rnd; | ||
| + | } | ||
| + | else if nahKampf == RAISED | ||
| + | || fernKampf == RAISED | ||
| + | || magieKampf == RAISED | ||
| + | { | ||
| + | self.fight_tactic = FAI_HUMAN_MASTER; | ||
| + | |||
| + | // 30 - 50 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | self.level = 30 + rnd; | ||
| + | } | ||
| + | else if nahKampf == STRONG | ||
| + | || fernKampf == STRONG | ||
| + | || magieKampf == STRONG | ||
| + | { | ||
| + | self.fight_tactic = FAI_HUMAN_COWARD; | ||
| + | |||
| + | // 20 - 40 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | self.level = 20 + rnd; | ||
| + | } | ||
| + | else if nahKampf == NORMAL | ||
| + | || fernKampf == NORMAL | ||
| + | || magieKampf == NORMAL | ||
| + | { | ||
| + | self.fight_tactic = FAI_HUMAN_NORMAL; | ||
| + | // 10 - 30 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | self.level = 10 + rnd; | ||
| + | } | ||
| + | else //Alles COWARD | ||
| + | { | ||
| + | self.fight_tactic = FAI_HUMAN_COWARD; | ||
| + | // 1 - 10 | ||
| + | rnd = Hlp_Rand(9); | ||
| + | self.level = 1 + rnd; | ||
| + | |||
| + | }; | ||
| + | |||
| + | //- - - - - - Nach Level - - - - - - - - - | ||
| + | self.attribute[ATR_HITPOINTS_MAX] = (self.level + 1) * 10; | ||
| + | self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX]; | ||
| + | |||
| + | // - - - - - - XP für NSCs - - - - - - | ||
| + | self.exp = (500*[[self.level+1): | ||
| + | self.exp_next = (500*[[self.level+2): | ||
| + | |||
| + | |||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | |||
| + | if nahKampf == NORMAL | ||
| + | { | ||
| + | // 10 - 60 | ||
| + | rnd = Hlp_Rand(50); | ||
| + | self.attribute[ATR_STRENGTH] = 10 + rnd; | ||
| + | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | ||
| + | |||
| + | // 10 - 29 --> NICHTMAL 30 | ||
| + | rnd = Hlp_Rand(19); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_1H, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_2H, | ||
| + | } | ||
| + | else if nahKampf == STRONG | ||
| + | { | ||
| + | // 50 - 130 | ||
| + | rnd = Hlp_Rand(80); | ||
| + | self.attribute[ATR_STRENGTH] = 50 + rnd; | ||
| + | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | ||
| + | |||
| + | // mind. 30 - max 59 | ||
| + | rnd = Hlp_Rand(29); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_1H, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_2H, | ||
| + | } | ||
| + | else if nahKampf == RAISED | ||
| + | { | ||
| + | // 120 - 180 | ||
| + | rnd = Hlp_Rand(60); | ||
| + | self.attribute[ATR_STRENGTH] = 120 + rnd; | ||
| + | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | ||
| + | |||
| + | // 60 - 80 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_1H, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_2H, | ||
| + | } | ||
| + | else if nahKampf == MASTER | ||
| + | { | ||
| + | // 160 - 200 | ||
| + | rnd = Hlp_Rand(40); | ||
| + | self.attribute[ATR_STRENGTH] = 160 + rnd; | ||
| + | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | ||
| + | |||
| + | // 80 - 100 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_1H, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_2H, | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | // max 10 | ||
| + | rnd = Hlp_Rand(9); | ||
| + | self.attribute[ATR_STRENGTH] = 1 + rnd; | ||
| + | self.aivar[REAL_STRENGTH] = self.attribute[ATR_STRENGTH]; | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_1H, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_2H, | ||
| + | }; | ||
| + | |||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | if fernKampf == NORMAL | ||
| + | { | ||
| + | // 10 - 60 | ||
| + | rnd = Hlp_Rand(50); | ||
| + | self.attribute[ATR_DEXTERITY] = 10 + rnd; | ||
| + | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | ||
| + | |||
| + | // 10 - 29 --> NICHTMAL 30 | ||
| + | rnd = Hlp_Rand(19); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_BOW, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | ||
| + | } | ||
| + | else if fernKampf == STRONG | ||
| + | { | ||
| + | // 50 - 130 | ||
| + | rnd = Hlp_Rand(80); | ||
| + | self.attribute[ATR_DEXTERITY] = 50 + rnd; | ||
| + | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | ||
| + | |||
| + | // mind. 30 - max 59 | ||
| + | rnd = Hlp_Rand(29); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_BOW, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | ||
| + | } | ||
| + | else if fernKampf == RAISED | ||
| + | { | ||
| + | // 120 - 180 | ||
| + | rnd = Hlp_Rand(60); | ||
| + | self.attribute[ATR_DEXTERITY] = 120 + rnd; | ||
| + | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | ||
| + | |||
| + | // 60 - 80 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_BOW, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | ||
| + | } | ||
| + | else if fernKampf == MASTER | ||
| + | { | ||
| + | // 160 - 200 | ||
| + | rnd = Hlp_Rand(40); | ||
| + | self.attribute[ATR_DEXTERITY] = 160 + rnd; | ||
| + | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | ||
| + | |||
| + | // 80 - 100 | ||
| + | rnd = Hlp_Rand(20); | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_BOW, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | // max 10 | ||
| + | rnd = Hlp_Rand(9); | ||
| + | self.attribute[ATR_DEXTERITY] = 1 + rnd; | ||
| + | self.aivar[REAL_DEXTERITY] = self.attribute[ATR_DEXTERITY]; | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_BOW, | ||
| + | B_RaiseFightTalent (self, NPC_TALENT_CROSSBOW, | ||
| + | }; | ||
| + | |||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // Vorsicht: Dieser Abschnitt setzt voraus, dass die AI an unterschiedliche Magiebenutzung angepasst ist. (zu betrachten: B_SelectSpell.d) | ||
| + | |||
| + | // Gilt für Manchmal-Magier, | ||
| + | if magieKampf == NORMAL | ||
| + | { | ||
| + | self.aivar[AIV_MagicUser] = MAGIC_SOMETIMES; | ||
| + | |||
| + | // 50 - 100 | ||
| + | rnd = Hlp_Rand(50); | ||
| + | self.attribute[ATR_MANA_MAX] = 50 + rnd; | ||
| + | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | ||
| + | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | ||
| + | |||
| + | Npc_SetTalentSkill (self, | ||
| + | } | ||
| + | // Gilt nur für Magier: | ||
| + | else if magieKampf == STRONG | ||
| + | { | ||
| + | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | ||
| + | |||
| + | // 90 - 180 | ||
| + | rnd = Hlp_Rand(90); | ||
| + | self.attribute[ATR_MANA_MAX] = 90 + rnd; | ||
| + | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | ||
| + | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | ||
| + | |||
| + | Npc_SetTalentSkill (self, | ||
| + | } | ||
| + | else if magieKampf == RAISED | ||
| + | { | ||
| + | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | ||
| + | |||
| + | // 170 - 260 | ||
| + | rnd = Hlp_Rand(90); | ||
| + | self.attribute[ATR_MANA_MAX] = 170 + rnd; | ||
| + | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | ||
| + | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | ||
| + | |||
| + | Npc_SetTalentSkill (self, | ||
| + | } | ||
| + | else if magieKampf == MASTER | ||
| + | { | ||
| + | self.aivar[AIV_MagicUser] = MAGIC_ALWAYS; | ||
| + | |||
| + | // 250 - 300 | ||
| + | rnd = Hlp_Rand(50); | ||
| + | self.attribute[ATR_MANA_MAX] = 250 + rnd; | ||
| + | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | ||
| + | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | ||
| + | |||
| + | Npc_SetTalentSkill (self, | ||
| + | } | ||
| + | else // Alle NICHT-Magier | ||
| + | { | ||
| + | self.aivar[AIV_MagicUser] = MAGIC_NEVER; | ||
| + | |||
| + | // max 10 | ||
| + | rnd = Hlp_Rand(9); | ||
| + | self.attribute[ATR_MANA_MAX] = 1 + rnd; | ||
| + | self.aivar[REAL_MANA_MAX] = self.attribute[ATR_MANA_MAX]; | ||
| + | self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; | ||
| + | |||
| + | Npc_SetTalentSkill (self, | ||
| + | }; | ||
| + | |||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | if fernKampf >= STRONG | ||
| + | { | ||
| + | Npc_SetTalentSkill (self, | ||
| + | Npc_SetTalentSkill (self, | ||
| + | Npc_SetTalentSkill (self, | ||
| + | Npc_SetTalentSkill (self, | ||
| + | }; | ||
| + | |||
| + | if nahKampf >= STRONG | ||
| + | { | ||
| + | Npc_SetTalentSkill (self, | ||
| + | }; | ||
| + | |||
| + | if nahKampf >= STRONG || fernKampf >= STRONG | ||
| + | { | ||
| + | Npc_SetTalentSkill (self, | ||
| + | }; | ||
| + | |||
| + | if magieKampf >= STRONG | ||
| + | { | ||
| + | Npc_SetTalentSkill (self, | ||
| + | Npc_SetTalentSkill (self, | ||
| + | }; | ||
| + | }; | ||
| + | |||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | // | ||
| + | // | ||
| + | // - - - - - - - - - - - - - - - - - - - - - - | ||
| + | // | ||
| + | // Das Zufällige Austeilen von Attributen macht es nötig die Werte im Nachhinein an die Waffen anzupassen. | ||
| + | // Diese Methode schreibt die Werte neu, wenn sie nicht ausreichen die gewollten Waffen zu tragen. | ||
| + | // Dazu wird die Nebenmethode B_SetAttributForWeapon(waffe) benötigt. Die Methode setzt alle 3 Attribute und equipt die Waffe. | ||
| + | // | ||
| + | /////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| + | /* Zur Erinnerung die in der Waffe beschriebenen benötigten Attribute: (Classes.d) | ||
| + | |||
| + | // Benötigte Attribute zum Benutzen des Items | ||
| + | VAR INT cond_atr [3] ; | ||
| + | VAR INT cond_value [3] ; | ||
| + | |||
| + | (constants.d) | ||
| + | |||
| + | const int ATR_HITPOINTS = | ||
| + | const int ATR_HITPOINTS_MAX = | ||
| + | const int ATR_MANA = | ||
| + | const int ATR_MANA_MAX = | ||
| + | |||
| + | const int ATR_STRENGTH = | ||
| + | const int ATR_DEXTERITY = | ||
| + | const int ATR_REGENERATEHP = | ||
| + | const int ATR_REGENERATEMANA = | ||
| + | |||
| + | */ | ||
| + | |||
| + | func void B_SetAttributForWeapon(var int waffenInstanz) | ||
| + | { | ||
| + | //- - - - - Resett for Random - - - - - - | ||
| + | Hlp_Rand_Resett(); | ||
| + | |||
| + | var int rnd; rnd = Hlp_Rand(10); | ||
| + | |||
| + | // | ||
| + | if waffenInstanz == nothing //NO_ARMOR ist Ersatz für nil oder nothing | ||
| + | { | ||
| + | return; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | CreateInvItems (self, | ||
| + | }; | ||
| + | |||
| + | if item.cond_atr[0] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[0] {self.attribute[ATR_HITPOINTS] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[0] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[0] {self.attribute[ATR_MANA] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[0] {self.attribute[ATR_MANA_MAX] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[0] {self.attribute[ATR_STRENGTH] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[0] {self.attribute[ATR_DEXTERITY] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[0] {self.attribute[ATR_REGENERATEHP] = item.cond_value[0] + rnd; }; } | ||
| + | else if item.cond_atr[0] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[0] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[0] + rnd; }; }; | ||
| + | |||
| + | if item.cond_atr[1] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[1] {self.attribute[ATR_HITPOINTS] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[1] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[1] {self.attribute[ATR_MANA] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[1] {self.attribute[ATR_MANA_MAX] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[1] {self.attribute[ATR_STRENGTH] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[1] {self.attribute[ATR_DEXTERITY] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[1] {self.attribute[ATR_REGENERATEHP] = item.cond_value[1] + rnd; }; } | ||
| + | else if item.cond_atr[1] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[1] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[1] + rnd; }; }; | ||
| + | |||
| + | if item.cond_atr[2] == ATR_HITPOINTS { if self.attribute[ATR_HITPOINTS] < item.cond_value[2] {self.attribute[ATR_HITPOINTS] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_HITPOINTS_MAX { if self.attribute[ATR_HITPOINTS_MAX] < item.cond_value[2] {self.attribute[ATR_HITPOINTS_MAX] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_MANA { if self.attribute[ATR_MANA] < item.cond_value[2] {self.attribute[ATR_MANA] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_MANA_MAX { if self.attribute[ATR_MANA_MAX] < item.cond_value[2] {self.attribute[ATR_MANA_MAX] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_STRENGTH { if self.attribute[ATR_STRENGTH] < item.cond_value[2] {self.attribute[ATR_STRENGTH] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_DEXTERITY { if self.attribute[ATR_DEXTERITY] < item.cond_value[2] {self.attribute[ATR_DEXTERITY] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_REGENERATEHP { if self.attribute[ATR_REGENERATEHP] < item.cond_value[2] {self.attribute[ATR_REGENERATEHP] = item.cond_value[2] + rnd; }; } | ||
| + | else if item.cond_atr[2] == ATR_REGENERATEMANA { if self.attribute[ATR_REGENERATEMANA] < item.cond_value[2] {self.attribute[ATR_REGENERATEMANA] = item.cond_value[2] + rnd; }; }; | ||
| + | |||
| + | EquipItem(self, | ||
| + | }; | ||
| + | |||
| + | func void B_SetAttributForWeapons(var int nahKampfWaffe, | ||
| + | { | ||
| + | if nahKampfWaffe != nothing | ||
| + | { | ||
| + | B_SetAttributForWeapon(nahKampfWaffe); | ||
| + | }; | ||
| + | if ferKampfWaffe != nothing | ||
| + | { | ||
| + | B_SetAttributForWeapon(ferKampfWaffe); | ||
| + | }; | ||
| + | }; | ||
| + | </ | ||