[Release] New Forum for BG1 NPCs for SoA

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Verursacht dies im Spiel auf der "klassischen" (alten) Version irgendwelche Probleme oder können wir es so belassen?
Bisher sind mir keine Probleme aufgefallen. Wenn Du möchtest, kann es gerne so bleiben, wie es ist - ich dachte nur, dass das hier auch nicht richtig installiert wurde. Bei Skie, Yeslick, Xan und Dynaheir, die keine Abstürze verursachten, ist das Porträt überall richtig eingestellt. Hier scheint dann die richtige Größe installiert worden zu sein
Ein Fehler ist mir bei den Porträts wie gesagt, nicht bekannt - es sieht einfach nur komisch aus, wenn das große Bild Übergröße hat ... besonders bei einem Zwerg. ;)
 

Austin

Junior Member
Registriert
20.04.2021
Beiträge
27
The mod has been updated to version 12.5!

ADDED NEW CONTENT:
- Added an auction held at Lady Goldsword's mansion in Water Gardens, where the player can buy rare artifacts for himself and his companions (idea by Smiling Imp, texts by Jericho2, proofread by Sarevok57, coding by Austin). In total, 11 sketches were written, mostly humorous, in the style of the original mod - a total of almost 1000 new lines!
The auction will become available after Lady Goldsword's main quest is completed and after that, 500 seconds of real time will elapse. Every day there will be new scenes, if the player has the required amount of money, and for some scenes, you also need to have certain NPCs in the group - Minsc, Korgan, HaerDalis, etc. If you have Minsc in the group, you will be able to get the legendary platinum pantaloons, and many nobles throughout the city will comment on this (in the Water Gardens area, the Government area and the Bridge area). And if these pantaloons remain with you until the end of the game, then in the chapter 6 in Athkatla you will find an additional small scene.

FIXED BUGS:
- Fixed item descriptions in Deekin's shop, edits by Ulpian
- Correction of Usability parameters for druid / shaman-related scimitars and axes on the EE version (thanks tipun)

IMPROVED CODE:
- Now the sound files will not be installed all together as a separate component, but for each of the NPCs separately and automatically.
- The installation code has been improved to avoid bugs in the event that the components were installed out of order (for example, first Shar-Teel was installed, and then Water Gardens - earlier in this case, some of the dialogs could be removed)

Download mod
 
Zuletzt bearbeitet:

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Sehr schön, vielen Dank, @Austin! :up:
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Inzwischen verwende ich Version 12.7 - und freue mich sehr darüber, dass ich wieder ohne Probleme in die Gebiete kann, wo die BG1-NSCs sind! :up:

Auf Waukeens Promenade bin ich auf etwas komisches (und doofes) gestoßen, das mit dem Zirkus zu tun hat:
Giran, der kleine Junge, welcher die Gruppe bittet, seine Mutter aus dem Zirkus zu retten, scheint plötzlich zu verschwinden, während die Gruppe sich durch den Zirkus kämpft - ich habe den Jungen danach mit dem Befehl "CLUAConsole:CreateCreature(*boy1*) spawnen lassen - aber er ist dann sofort fast gleich wieder verschwunden! Nun bin ich mir nicht sicher, ob es mit der Gnomen-Komponente und dem erweiterten Zirkus zusammenhängen könnte - oder auch mit der Komponente, den Erweiterten Zirkus zu vereinfachen.
Wie gesagt, ob es daran liegt, oder ob da etwas anderes mit reinfunkt, kann ich nicht sicher sagen.
Gäbe es eine Möglichkeit, zu überprüfen, ob es an einem der beiden Komponenten liegt, @Austin ?

Was ich sicher sagen kann, ist dass der Text zweier Cre im Erweiterten Zirkus plötzlich seltsam ist:
- Der Schlüsselwächter TQCRE1 (Das Dead Bunny) hat plötzlich einen komischen Namen: *Kommt her, Gutaussehender...* (Bei seinem Dialog war ich übrigens sehr froh, Alora in meiner Party gehabt zu haben! :D)
- Einer der anderen beiden Schlüsselwächter, Goozclown (TQCRE3) hat dafür einen komischen Dialog: "Thank you for saying this. You've definitely proven that you mean it, after all you've done. But I hope you did it, well, for me, not for the Second in Command of the Flaming Fist."
Auch hier kenne ich die genaue Ursache nicht, kenne so etwas ähnliches aber schon als Nebenwirkung einer Komponente aus "Unfinished Business".
Wie gesagt aber, ich weiss es nicht, ob das auch hier wieder daran liegt ...
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Es scheinen in BGII:EE Stringentries der dialog.tlk verändert worden zu sein gegenüber der in der klassischen BGII. Jedenfalls gab es für UB einen Fehler, da die neue Version Stringentries verwenden wollte, die in der klassischen nicht existierten (Link). Eventuell entstammen die verdrehten Namen auch einem solchen Grund.
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Ja, das ist auch meine Vermutung - UB habe ich auch installiert.
Vielleicht wird man es sehen, wenn eine neue Version von UB herausgekommen ist.

EDIT, das wäre dann bei UB sowohl in deutscher als auch auf englischer Sprache so - ich habe gerade auf englisch installiert, da die Valygar/Suna Komponente leider immer noch nicht auf deutsch installiert werden kann.
Hier gibt es eigentlich auch eine Spur, dass die Namens-Text-Änderungen aus BG1NSC for SoA mit UB zusammenhängen könnten - das Dead Bunny hatte auf deutsch hier einen anderen Namen ...
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Ok, ein kleines Update der Dinge:

Für meine aktuelle Installation habe ich Version 12.8 verwendet - und hatte das Problem mit Giran nun nicht mehr.
Die Komponente mit dem vereinfachten Zirkus war installiert und ich habe mehrere Möglichkeiten ausprobiert - Giran blieb, wo er war. :)
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Hallo @Austin
ich habe in Version 14.3 gemerkt, dass die Garrick-Komponente nicht auf BGT installiert werden kann.
Das Problem konnte ich in der 7XGARR.baf finden:

Code:
// Quest
IF
  Global("GarrickBardQuest","GLOBAL",3)
  Exists(Myself)
THEN
    RESPONSE #100
GivePartyAllEquipment()
LeaveParty()
EscapeAreaMove("AR0602",-1,-1,N)  // Irenicus's Dungeon 1st Floor
SetGlobal("GarrickBardQuest","GLOBAL",4)
END

Interessant, bedeutet das, dass man während einer Charakterquest von Garrick nochmal in Irenicus's Dungeon zurückkehren kann/muss? :eek:


Mod Edit: Der Lesbarkeit halber Code Tag nachgetragen
 
Zuletzt bearbeitet von einem Moderator:

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Interessant, bedeutet das, dass man während einer Charakterquest von Garrick nochmal in Irenicus's Dungeon zurückkehren kann/muss?
Bei diesen Fantasy/invaliden Kooerdinaten sieht das für mich eher so aus, alswenn ID als "existierendes Gebiet, das nicht mehr betreten wird" verwendet wird, um Haer'Dalis zu "parken". (Was übrigens technisch nicht nötig ist, man kann Globale NPCs auch einfach mit "EscapeArea()" oder sogar "DestroySelf()" verschwinden lassen und sie später trotzdem wieder über "MoveGlobalObject" wieder holen.)
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Oh, interessant ... Würde Sinn machen. Danke Dir!

Mod Edit: Der Lesbarkeit halber Code Tag nachgetragen
Huch, hatte ich da etwas vergessen? :eek:
Dankeschön fürs korrigieren!

Meine neue BGT-Installation ist gerade zur Hälfte (oder etwas darüber) fertig.
Dazu habe ich mir die Version 14.3 gesichert. ;)

Leider kann ich (außer Garrick) folgende Komponenten nicht installieren:

Shar-Teel
Yeslick
Skie & Eldoth
Branwen
Alora
Kagain's Corner
Xzar & Monty
Gnomes in the City

Der Versuch, diese Komponenten zu installieren, endet in einer Fehlermeldung. Da es bei allen dieselbe ist, nehme ich Kagain als Beispiel:

[BG1NPCSoA/scripts/7XKAGA.BAF]
Near Text: )
Parsing.Parse_error
ERROR: parsing [BG1NPCSoA/scripts/7XKAGA.BAF]: Parsing.Parse_error
ERROR: error compiling [BG1NPCSoA/scripts/7XKAGA.BAF]: Parsing.Parse_error
ERROR: compiling [BG1NPCSoA/scripts/7XKAGA.BAF]!
Stopping installation because of error.

ERROR Installing [Kagain's Corner (SoA & ToB) -> Store with Vanilla Items Only], rolling back to previous state
Unable to Unlink [BG1NPCSoA/backup/35/OTHER.35]: Unix.Unix_error(1, "unlink", "BG1NPCSoA/backup/35/OTHER.35")
[BG1NPCSoA/backup/35/UNSETSTR.35] SET_STRING uninstall info not found
So wie die Fehlermeldung bei allen Komponenten gleich ist -außer natürlich die Script-Angabe, so ist dieses Detail in der Fehlermeldung hier interessanterweise bei allen ebenfalls gleich:
ERROR at line 10 column 1-33
Also habe ich mir die Scripte

7xshar.baf
7xyesl.baf
7xskie.baf
7xeldo.baf
7xbran.baf
7xalor.baf
7xkaga.baf
7xmont.baf
7xxzar.baf

angesehen und festgestellt, dass in allen diese eine Zeile gleich war: (Zeile 10)

ChangeStat(Myself,XP,1250000,SET)

Hier als Beispiel das Sript von Xzar:

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,1249999)
XPLT(Myself,1250000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,1250000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,999999)
XPLT(Myself,1000000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,1000000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,749999)
XPLT(Myself,750000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,750000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,499999)
XPLT(Myself,500000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,500000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,249999)
XPLT(Myself,250000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,250000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPGT(Player1,124999)
XPLT(Myself,125000)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
ChangeStat(Myself,XP,125000,SET)
SetInterrupt(TRUE)
END

IF
Global("BD_JOINXP","LOCALS",0)
InParty(Myself)
XPLT(Player1,89001)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("BD_JOINXP","LOCALS",1)
SetInterrupt(TRUE)
END

// Human Flesh
IF
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
!StateCheck(Player1,CD_STATE_NOTVALID)
OR(2)
PartyHasItem("leat21")
PartyHasItem("leat22")
Global("XzarHumanFlesh","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("XzarHumanFlesh","GLOBAL",1)
StartDialogNoSet(Player1)
END

// Illithid Lair
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR0711")
Global("XzarAR0711","AR0711",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR0711","AR0711",1)
RealSetGlobalTimer("XzarAR0711TalkTimer","GLOBAL",3)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR0711")
Global("XzarAR0711","AR0711",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR0711TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR0711","AR0711",2)
StartDialogNoSet(Player1)
END


// Spellhold
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR1515")
Global("XzarAR1515","AR1515",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR1515","AR1515",1)
RealSetGlobalTimer("XzarAR1515TalkTimer","GLOBAL",2)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR1515")
Global("XzarAR1515","AR1515",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR1515TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR1515","AR1515",2)
StartDialogNoSet(Player1)
END


// HaperLair
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR0308")
Global("XzarAR0308","AR0308",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR0308","AR0308",1)
RealSetGlobalTimer("XzarAR0308TalkTimer","GLOBAL",2)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR0308")
Global("XzarAR0308","AR0308",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR0308TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR0308","AR0308",2)
StartDialogNoSet(Player1)
END


// Promenade
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR0700")
Global("XzarAR0700","AR0700",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR0700","AR0700",1)
RealSetGlobalTimer("XzarAR0700TalkTimer","GLOBAL",5)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR0700")
Global("XzarAR0700","AR0700",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR0700TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR0700","AR0700",2)
StartDialogNoSet(Player1)
END


// Underdark
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR2100")
Global("XzarAR2100","AR2100",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR2100","AR2100",1)
RealSetGlobalTimer("XzarAR2100TalkTimer","GLOBAL",5)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR2100")
Global("XzarAR2100","AR2100",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR2100TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR2100","AR2100",2)
StartDialogNoSet(Player1)
END


// Graveyard
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("ar0800")
Global("XzarAR0800","AR0800",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR0800","AR0800",1)
RealSetGlobalTimer("XzarAR0800TalkTimer","GLOBAL",3)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR0800")
Global("XzarAR0800","AR0800",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR0800TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR0800","AR0800",2)
StartDialogNoSet(Player1)
END

// Bridge
IF
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("AR0500")
Global("XzarAR0500","AR0500",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("XzarAR0500","AR0500",1)
RealSetGlobalTimer("XzarAR0500TalkTimer","GLOBAL",15)
END

IF
!StateCheck(Player1,CD_STATE_NOTVALID)
InParty("7XXZAR")!StateCheck("7XXZAR",CD_STATE_NOTVALID)
AreaCheck("AR0500")
Global("XzarAR0500","AR0500",1)
CombatCounter(0)
RealGlobalTimerExpired("XzarAR0500TalkTimer","GLOBAL")
THEN
RESPONSE #100
SetGlobal("XzarAR0500","AR0500",2)
StartDialogNoSet(Player1)
END

// AR0502
IF
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck("7XXZAR",CD_STATE_NOTVALID)InParty("7XXZAR")
AreaCheck("ar0502")
Global("Xzarar0502","AR0502",0)
CombatCounter(0)
THEN
RESPONSE #100
SetGlobal("Xzarar0502","AR0502",1)
StartDialogNoSet(Player1)
END
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Ich muss dazu noch sagen, dass ich hier versehentlich eine ältere Version der Big-World-Anleitung hatte (die letzte vor der aktuellen) und hier die erste Komponente von Heroes, Thieves and Moneylenders noch VOR den NSC-Mods und BG1-NSC for SoA installiert habe, weil in dieser Version der Big-World-Anleitung stand, dass man die NSC-Mods inklusive BG1 NSC for SoA erst nach der ersten Komponente von HTM installieren sollte ...

Da ich es aber in allen alten Installationen schon so gemacht hatte, dass ich die vorherigen BG1-NSC for SoA-Versionen alle noch vor HTM installiert hatte und es damit noch keine Probleme gab (steht so auch nun richtig in der aktuellen Version der Big World Anleitung), habe ich einfach noch einmal alle BG2-NSC-Mods und die erste Komponente von HTM deinstalliert, weil ich nun versuchen möchte, ob es klappt, wenn ich es in der gewohnten Reihenfolge der anderen Installationen mache ...
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
ChangeStat(Myself,XP,1250000,SET)
Ja, diese Aktion gab es noch nicht für die alte Engine. Das müsste für BGT-Kompatibilität angepasst werden mit Skriptblöcken, die AddXPObject() verwenden.
 

Lumorus

Wachender
Registriert
03.03.2011
Beiträge
4.060
Das müsste für BGT-Kompatibilität angepasst werden mit Skriptblöcken, die AddXPObject() verwenden.
Super, danke, dann kann ich das vorher in den Scripten ändern, ehe ich installiere. :)

Also müsste es dann so aussehen? AddXPObject(Myself,XP,1250000,SET)
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Wenn man das AddXPObject verwendet, dann wird die angegebene Zahl an XP dazu addiert. Bei dem "SET" wird der XP-Wert des NPC auf diese Zahl gesetzt. Es nur in "Add" zu ändern würde den NPC also etwas overpowern, weil er dann mehr XP bekäme.
Ich weiß nicht, wie dieses Skript verwendet wird, ist es im NPC-Override Skript drin oder in einem anderen (Baldur.bcs / Areaskript)? Ich verwende auch Level-Up-Skripte, die für die alte Engine gehen, in meinen NPC-Mods, aber dort arbeite ich mit lokalen Variablen, die nur im eigenen Skript des NPCs sinnvoll sind. Z.B. für Brage:
/* NPC levels up to the PC's XP level if taken into the group

BGT version - because I did the EE version first and it doesn't work on the old engine [hooray] */



/* AddXPObject(Myself,500000) */


/*
Level XP
1 0
2 2,000
3 4,000
4 8,000
5 16,000
6 32,000
7 64,000
8 125,000
9 250,000
10 500,000


1 0 1
2 2.000 2
3 4.000 3
4 8.000 4
5 16.000 5
6 32.000 6
7 64.000 7
8 125.000 8
9 250.000 9
10 500.000 9+3
11 750.000 9+6
12 1.000.000 9+9
13 1.250.000 9+12
14 1.500.000 9+15
15 1.750.000 9+18
16 2.000.000 9+21
17 2.250.000 9+24
18 2.500.000 9+27
19 2.750.000 9+30
20 3.000.000 9+33

ToB up to 8.000.000


*/

/* Player1 XP 11000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",36)
XPGT(Player1,10999999)
XPLT(Myself,11000000)
XPGT(Myself,10499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",36)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 10500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",35)
XPGT(Player1,10499999)
XPLT(Myself,10500000)
XPGT(Myself,9999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",35)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 10000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",34)
XPGT(Player1,9999999)
XPLT(Myself,10000000)
XPGT(Myself,9499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",34)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 9500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",33)
XPGT(Player1,9499999)
XPLT(Myself,9500000)
XPGT(Myself,8999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",33)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 9000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",32)
XPGT(Player1,8999999)
XPLT(Myself,9000000)
XPGT(Myself,8499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",32)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 8500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",31)
XPGT(Player1,8499999)
XPLT(Myself,8500000)
XPGT(Myself,7999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",31)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 8000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",30)
XPGT(Player1,7999999)
XPLT(Myself,8000000)
XPGT(Myself,7499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",30)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 7500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",29)
XPGT(Player1,7499999)
XPLT(Myself,7500000)
XPGT(Myself,6999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",29)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 7000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",28)
XPGT(Player1,6999999)
XPLT(Myself,7000000)
XPGT(Myself,6499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",28)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 6500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",27)
XPGT(Player1,6499999)
XPLT(Myself,6500000)
XPGT(Myself,5999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",27)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 6000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",26)
XPGT(Player1,5999999)
XPLT(Myself,6000000)
XPGT(Myself,5499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",26)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 5500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",25)
XPGT(Player1,5499999)
XPLT(Myself,5500000)
XPGT(Myself,4999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",25)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 5000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",24)
XPGT(Player1,4999999)
XPLT(Myself,5000000)
XPGT(Myself,4499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",24)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 4500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",23)
XPGT(Player1,4499999)
XPLT(Myself,4500000)
XPGT(Myself,3999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",23)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 4000000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",22)
XPGT(Player1,3999999)
XPLT(Myself,4000000)
XPGT(Myself,3499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",22)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END

/* Player1 XP 3500000 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",21)
XPGT(Player1,3499999)
XPLT(Myself,3500000)
XPGT(Myself,2999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",21)
AddXPObject(Myself,500000)
SetInterrupt(TRUE)
END


/* Level 20 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",20)
XPGT(Player1,2999999)
XPLT(Myself,3000000)
XPGT(Myself,2749999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",20)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 19 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",19)
XPGT(Player1,2749999)
XPLT(Myself,2750000)
XPGT(Myself,2499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",19)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 18 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",18)
XPGT(Player1,2499999)
XPLT(Myself,2500000)
XPGT(Myself,2249999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",18)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END


/* Level 17 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",17)
XPGT(Player1,2249999)
XPLT(Myself,2250000)
XPGT(Myself,1999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",17)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END


/* Level 16 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",16)
XPGT(Player1,1999999)
XPLT(Myself,2000000)
XPGT(Myself,1749999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",16)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 15 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",15)
XPGT(Player1,1749999)
XPLT(Myself,1750000)
XPGT(Myself,1499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",15)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END


/* Level 14 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",14)
XPGT(Player1,1499999)
XPLT(Myself,1500000)
XPGT(Myself,1249999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",14)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 13 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",13)
XPGT(Player1,1249999)
XPLT(Myself,1250000)
XPGT(Myself,999999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",13)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 12 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",12)
XPGT(Player1,999999)
XPLT(Myself,1000000)
XPGT(Myself,749999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",12)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 11 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",11)
XPGT(Player1,749999)
XPLT(Myself,750000)
XPGT(Myself,499999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",11)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END

/* Level 10 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",10)
XPGT(Player1,499999)
XPLT(Myself,500000)
XPGT(Myself,249999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",10)
AddXPObject(Myself,250000)
SetInterrupt(TRUE)
END



/* Level 9 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",9)
XPGT(Player1,249999)
XPLT(Myself,250000)
XPGT(Myself,124999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",9)
AddXPObject(Myself,125000)
SetInterrupt(TRUE)
END

/* Level 8 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",8)
XPGT(Player1,124999)
XPLT(Myself,125000)
XPGT(Myself,63999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",8)
AddXPObject(Myself,61000)
SetInterrupt(TRUE)
END

/* Level 7 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",7)
XPGT(Player1,63999)
XPLT(Myself,64000)
XPGT(Myself,31999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",7)
AddXPObject(Myself,32000)
SetInterrupt(TRUE)
END

/* Level 6 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",6)
XPGT(Player1,31999)
XPLT(Myself,32000)
XPGT(Myself,15999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",6)
AddXPObject(Myself,16000)
SetInterrupt(TRUE)
END

/* Level 5 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",5)
XPGT(Player1,15999)
XPLT(Myself,16000)
XPGT(Myself,7999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",5)
AddXPObject(Myself,8000)
SetInterrupt(TRUE)
END


/* Level 4 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",4)
XPGT(Player1,7999)
XPLT(Myself,8000)
XPGT(Myself,3999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",4)
AddXPObject(Myself,4000)
SetInterrupt(TRUE)
END


/* Level 3 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) GlobalLT("C#LevelUp","LOCALS",3)
XPGT(Player1,3999)
XPLT(Myself,4000)
XPGT(Myself,1999)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",3)
AddXPObject(Myself,2000)
SetInterrupt(TRUE)
END

/* Level 2 */

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0) Global("C#LevelUp","LOCALS",0)
XPGT(Player1,1999)
XPLT(Myself,2000)
CheckStat(Player1, 0, LEVELDRAIN)
THEN
RESPONSE #100
SetInterrupt(FALSE)
SetGlobal("C#LevelUp","LOCALS",2)
AddXPObject(Myself,2000)
SetInterrupt(TRUE)
END

IF
InParty(Myself)
Global("C#BE_LevelUp","LOCALS",0)
THEN
RESPONSE #100
SetGlobal("C#BE_LevelUp","LOCALS",1)
END
Das könntest Du auch für andere NPCs prinzipiell verwenden, weil die lokalen Variablen nicht mit denen anderer NPCs in die Quere kommen, aber ich weiß nicht, wie genau das Level-Up-Skript in der BG1NPC in SvA&ToB integriert ist, daher würde ich hier auf @Austin warten.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.380
Hm, du gehst in deinem Skript sozusagen rückwärts in der Prüfung. Das sorgt dafür, dass das Skript sehr häufig durchlaufen werden muss. Das ist eigentlich ungeschickt. Gehst du deswegen rückwärts, damit das Skript beim vorwärts laufen nicht zu früh abbricht, wenn man irgendwelche Sachen nicht durchlaufen? Oder gibt es dafür einen anderen Grund?
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Ich gehe rückwärts, weil ich sonst nicht wüsste, wie ich über Addition auf den richtigen Betrag kommen soll. Das, was der NPC am Ende haben soll ist nicht nur der eine, letzte Betrag, sondern alle von davor ebenfalls.

edit by maus: damit wir hier nicht im falschen Thread das weiter diskutieren, geht es hier https://www.baldurs-gate.de/index.php?threads/scripting-fragen.45095/post-1105388 weiter.
 
Zuletzt bearbeitet von einem Moderator:
Oben