[Modding] Hinzufügen weiterer Areatypes zur AREATYPE.IDS

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.199
Ich bin am überlegen, ob ich für meine Mods zwei weitere Areatypes zur AREATYPE.IDS hinzufügen sollte, um die Identifizierung meiner Mod-Areas zu erleichtern.
Bisher gibt es ja folgende altbekannte:
Code:
1  OUTDOOR           
2  DAYNIGHT         
4  WEATHER           
8  CITY             
16 FOREST           
32 DUNGEON           
64 EXTENDEDNIGHT     
128 CANRESTOTHER

Einen 10 Jahre alten Thread habe ich bei G3 dazu gefunden:
https://www.gibberlings3.net/forums...additional-areatype-flagging-for-mods/page/5/

So, wie es aussieht, kann man über ADD_AREA_TYPE acht weitere Area-Types in die AREATYPE.IDS einfügen. In dem entsprechenden Thread wurden sieben schon belegt, allerdings habe ich den Eindruck, dass bisher keine mir bekannte Mod dies nutzt.
Insofern würde ich gerne zwei weitere Area-Types einfügen, die ich meinen neu erstellten Areas zuweise:
Code:
16384  - DESERT
32768  - UNDERDARK

Meine Fragen:
- Gibt es Mods, die so etwas bereits machen?
- Gibt es Risiken hierbei? Z.B. bei Quests oder Romanzen?
- Ist mit Kompatibilitätsproblemen mit anderen Mods zu rechnen?
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Sollte prinzipiell funktionieren, aber man könnte auch einfach Area-Variablen verwenden und auf diese prüfen.
Das umgeht eventuell vorhandene Kompatibilitätsprobleme und bietet etwas mehr Flexibilität.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.199
man könnte auch einfach Area-Variablen verwenden und auf diese prüfen.
Meinst Du die Abfrage mittels AreaCheck oder gibt es noch eine andere Möglichkeit, Gebietsgruppen in Scripten abzufragen?

Mein Problem ist, dass ich ca. 25 Wüsten-Areas und >40 Underdark-Areas habe, die ich dann per AreaCheck in den NPC-Scripts und in der Baldurs.bcs in zahlreiche Script-Blöcke einfügen müsste.
Würde sich so etwas auf die Performance auswirken?
Daneben fürchte ich, dass mich andere Modder hassen, weil die Scriptblöcke unlesbar werden... :hae:
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Kann sein, dass ich das Problem nicht richtig verstanden habe, vielleicht reden wir auch aneinander vorbei.
Ich dachte, Du möchtest die Areatypes hinzufügen, damit Du in Skripten/Dialogen dann mittels AreaType()-Trigger darauf prüfen kannst.

Dazu müsstest Du die Areas bei der Installation entsprechend flaggen.
Die Variablen kann man schon vor der Installation direkt in der ARE-Datei setzen. (Oder auch während der Installation, falls das vorher nicht möglich sein sollte.)
Und statt dem Trigger AreaType(), dann einfach mit Global("...","MYAREA", ...) o. ä. prüfen.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.199
Ich dachte, Du möchtest die Areatypes hinzufügen, damit Du in Skripten/Dialogen dann mittels AreaType()-Trigger darauf prüfen kannst
Ja, genau.
Zum Beispiel in folgendem Script der Diebesgilde in der Baldur.bcs würde ich jeweils!AreaType(DESERT) und !AreaType(UNDERDARK) einfügen:
Code:
IF
    GlobalTimerExpired("JosterReturn","GLOBAL")
    Global("JosterLeave","GLOBAL",1)
    !Global("Chapter","GLOBAL",4)
    !Global("Chapter","GLOBAL",5)
    !Global("Chapter","GLOBAL",7)
    !AreaType(DESERT)
    !AreaType(UNDERDARK)
THEN
    RESPONSE #100
        SetGlobal("JosterLeave","GLOBAL",2)
        SetGlobalTimer("JosterReturn","GLOBAL",SIX_DAYS)
        SetGlobalTimer("JosterPaid","GLOBAL",FIVE_DAYS)
        DisplayStringHead(Player1,62081)  // Der Zahlmeister wartet bereits in der Gilde darauf, dass Ihr Renals Anteil abliefert.
END

IF
    GlobalTimerExpired("JosterPaid","GLOBAL")
    Global("JosterLeave","GLOBAL",2)
    Global("PGFailed","GLOBAL",0)
    !Global("Chapter","GLOBAL",4)
    !Global("Chapter","GLOBAL",5)
    !Global("Chapter","GLOBAL",7)
    !AreaType(DESERT)
    !AreaType(UNDERDARK)
THEN
    RESPONSE #100
        SetGlobal("PGFailed","GLOBAL",1)
        DisplayStringHead(Player1,62082)  // Renal ist nicht bereit, noch länger auf seinen Anteil zu warten ... Man hat Euch Eure Gilde entzogen.
END

Die Variablen kann man schon vor der Installation direkt in der ARE-Datei setzen. (Oder auch während der Installation, falls das vorher nicht möglich sein sollte.)
Und statt dem Trigger AreaType(), dann einfach mit Global("...","MYAREA", ...) o. ä. prüfen.
Ah, verstehe. Das hatte ich noch nie gemacht. Das bedeutet, dass ich dann in oben genanntem Beispiel einfach die Variable !Global("AC#DisableRenal","MYAREA",1) checken würde? Geht das in der Baldur.bcs?
Das würde dann so aussehen, oder?
Code:
IF
    GlobalTimerExpired("JosterReturn","GLOBAL")
    Global("JosterLeave","GLOBAL",1)
    !Global("Chapter","GLOBAL",4)
    !Global("Chapter","GLOBAL",5)
    !Global("Chapter","GLOBAL",7)
    !Global("AC#DisableRenal","MYAREA",1)
THEN
    RESPONSE #100
        SetGlobal("JosterLeave","GLOBAL",2)
        SetGlobalTimer("JosterReturn","GLOBAL",SIX_DAYS)
        SetGlobalTimer("JosterPaid","GLOBAL",FIVE_DAYS)
        DisplayStringHead(Player1,62081)  // Der Zahlmeister wartet bereits in der Gilde darauf, dass Ihr Renals Anteil abliefert.
END
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Das bedeutet, dass ich dann in oben genanntem Beispiel einfach die Variable !Global("AC#DisableRenal","MYAREA",1) checken würde? Geht das in der Baldur.bcs?
Ja, das sollte so funktionieren, zumindest ab der BG2-Engine.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.199
Vielen Dank! Ich bin bereits am Herumprobieren...
Unabhängig davon überlege ich mir, ob es dennoch interessant wäre, weitere Areatypes einzubauen... :hae: ;)
 
Oben