World of Gothic Archiv
Alle Beiträge von criz
Seite 1 von 2  1  2 
11.07.2002, 14:03 #1
criz
Beiträge: 39
Script: MagicDoor - Script: MagicDoor
hallo,
hab schon öfters dieses forum als "reiner" Leser besucht und nun endlich es geschafft mich zu registrieren :)

Und gleich zu Beginn ein kleines Script zur Erstellung einer magischen Türe. Einfach einmal ausprobiern, also IMHO find ichs cool.

MagicDoor:
------------------
Version: beta (0.0001)
Author: criz

Script einfach in OnHeartBeat einer Tür stellen. In der main() kann man zusätzlich noch ein paar Werte ändern. Einfach ausprobieren und sollte es noch fragen geben -> posten...

code\:

int GetExistItemInInventory(object oTarget, string sItemTag)
{
object oItem;
oItem = GetFirstItemInInventory(oTarget);
for( ; ; )
{
if (oItem == OBJECT_INVALID)
{
break;
}
else
{
if (GetTag(oItem)==sItemTag) return TRUE;
}
oItem = GetNextItemInInventory(oTarget);
}
return FALSE;
}
void ApplyVisualEffectsToMagicDoor(int MagicDoorType)
{
// apply visual effect to door (depends on MAGIC_DOOR_TYPE)
effect e1,e2;
if ((MagicDoorType<0)||(MagicDoorType>2)) MagicDoorType=0;
switch(MagicDoorType)
{
case 0:
e1 = EffectVisualEffect(VFX_DUR_AURA_SILENCE);
e2 = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_5);
break;
case 1:
e1 = EffectVisualEffect(VFX_DUR_AURA_COLD);
e2 = EffectVisualEffect(VFX_DUR_LIGHT_BLUE_5);
break;
case 2:
e1 = EffectVisualEffect(VFX_DUR_AURA_FIRE);
e2 = EffectVisualEffect(VFX_DUR_LIGHT_RED_5);
break;
}
ApplyEffectToObject(DURATION_TYPE_PERMANENT,e1,OBJECT_SELF,1.0);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,e2,OBJECT_SELF,1.0);
}

void ActionMagicDoor(float MaxDistance,int MagicDoorType,string ItemTag)
{

// get distance to player
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
float distance = GetDistanceToObject(oPC);
if (distance < MaxDistance )
{
// -> player is in near enaugh
if ((GetExistItemInInventory(oPC,ItemTag)==TRUE)||(MagicDoorType==0))
{
// -> player can pass
if (GetIsOpen(OBJECT_SELF)==FALSE)
{
ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN);
ActionOpenDoor(OBJECT_SELF);
}
}
else
{
// -> player can not pass
if (MagicDoorType==2)
{
//-> do bad things to player (one time)
int iDidDamage = GetLocalInt(OBJECT_SELF,"DidDamage");
if (iDidDamage == 0)
{
AssignCommand(oPC,ActionCastSpellAtObject(SPELL_SOUND_BURST, oPC,METAMAGIC_MAXIMIZE,TRUE,FEAT_FIRE_DOMAIN_POWER,PROJECTILE_PATH_TYPE_ DEFAULT,TRUE));
// 25% damage
int dm = GetMaxHitPoints(oPC) / 4;
effect md = EffectDamage(dm,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_NORMAL);
ApplyEffectToObject(DURATION_TYPE_INSTANT,md,oPC,1.0);
iDidDamage = 1;
SetLocalInt(OBJECT_SELF,"DidDamage",iDidDamage);
}

}
}
}
else
{
// -> player is to far away
if (GetIsOpen(OBJECT_SELF)==TRUE)
{
ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE);
ActionCloseDoor(OBJECT_SELF);
}
SetLocalInt(OBJECT_SELF,"DidDamage",0);
}
}
void main()
{
// Settings:
float MAX_DISTANCE = 4.0; // max. distance to doo
int MAGIC_DOOR_TYPE = 2 ; // 0 ... simple magic door (no item required)
// 1 ... normal magic door (item required)
// 2 ... evil magic door (item required, if no item found -> spell cast on player)
string ITEM_TAG = "DazursWegbereiter"; // ItemTag of Item to open the door

ApplyVisualEffectsToMagicDoor(MAGIC_DOOR_TYPE);

ActionMagicDoor(MAX_DISTANCE,MAGIC_DOOR_TYPE,ITEM_TAG);

DelayCommand(2.0,ActionMagicDoor(MAX_DISTANCE,MAGIC_DOOR_TYPE,ITEM_TAG));
DelayCommand(4.0,ActionMagicDoor(MAX_DISTANCE,MAGIC_DOOR_TYPE,ITEM_TAG));
}




>> criz


___________________________

Meine Droge hat einen Namen:
RED BULL[/font]
11.07.2002, 14:10 #2
criz
Beiträge: 39
Script: MagicDoor -
frage?

wie bekomme ich dieses verdammte (:) ) ding aus meinem code raus?

(es sollte ein for( ; ; ) dort zu finden sein)

criz
11.07.2002, 14:18 #3
criz
Beiträge: 39
Script: MagicDoor -
thx, aber ein Leerzeichen zwischen ; und ) hats auch getan...

criz
11.07.2002, 14:22 #4
criz
Beiträge: 39
Script: MagicDoor -
natürlich!

Mich würde auch eure Meinung zum Script interessieren...
schon wer ausprobiert?

criz
11.07.2002, 14:49 #5
criz
Beiträge: 39
Script: MagicDoor -
Von dieser Tür gibt es 3 Typen (kann man in der main() einstellen)

Typ 0: Einfache magische Tür
-----------------------------

Sobald der Spieler innerhalb eines 4m Radius um die Türe befindet öffnet sich diese automatisch. Sobald der Spieler außerhalb ist, schließt sie sich wieder.

Den 4m Radius kann man auch in der main() ändern, sollte aber dabei belassen werden, da der visuelle Effekt (Aura) genau einen Radius von 4m besitzt. (Alles andere glaub ich würde den Spieler verwirren.)

Typ 1: Normal magische Tür
---------------------------

So wie Typ 0, nur das man einen bestimmten Gegenstand (ItemTag kann in main() gesetzt werden) im Gepäck mitführen muss damit sich die Türe öffnet.

Typ 2: Bösartige magische Tür
-----------------------------
So wie Typ 1, jedoch mit dem Unterschiede, dass wenn der Spieler den Gegenstand nicht im Gepäck hat diesem einen schaden von 25% seiner Maximalen HitPoints zugefügt wird. :D

Anmerkung:

Eine magische Tür macht nur dann sinn wenn diese Türe verschlossen ist und weder zerstörbar (Handlung) oder durch Diebeskunst geöffnet werden kann...


criz
11.07.2002, 15:36 #6
criz
Beiträge: 39
Wieso ist der Fackelhalter immer auf Activate? -
hi,

das gleiche problem hatte ich auch mit meinen Kohlebecken, und habe folgendes gemacht:

Im Gebiet bei OnEnter eine Funktion eingebaut die alle Kohlebecken (bei dir Fackelhalter) deaktiviert.

So nun gibt es ein weiteres Problem. Jede Fackel, Kohlebecken oder Kerzenleuchtet besitzen zwei makante eigenschaften:

1. Animation (Feuer)
2. Illumination (Leuchtkraft), dient die Umgebung zu erhellen / abzudunkeln.

Hier ein bischen code:
code\:

void SwitchOff(object o)
{
AssignCommand(o,PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
DelayCommand(0.4,SetPlaceableIllumination(o, FALSE));
DelayCommand(0.9,RecomputeStaticLighting(GetArea(o)));
}
void SwitchOn(object o)
{
AssignCommand(o,PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
DelayCommand(0.4,SetPlaceableIllumination(o, TRUE));
DelayCommand(0.9,RecomputeStaticLighting(GetArea(o)));
}
void main()
{
object o1 = GetObjectByTag("kb_0");
object o2 = GetObjectByTag("kb_1");

SwitchOff(o1);
SwitchOff(o2);



}



Bei mir hatten meine beiden Kohlebecken den TagNamen kb_0 bzw. kb_1, diese musst du durch deine ersetzen.

Wenn du diesen Code in OnEnter einfügst solltest du das haben was du wolltest.

Anm.: Bei mir ist das Modul ab und zu aus unerklärlichen Gründen abgestürtzt weil obiger code in onEnter war, falls dies bei dir auch sein sollte, so setze einfach beim gebietseingang einen allgemeinen Auslöser....

hoffe es ist so halbwegs verständlich...


___________________________

Meine Droge hat einen Namen:
RED BULL[/font]
12.07.2002, 07:37 #7
criz
Beiträge: 39
Wer hat lust auf Glücksspiel? :) -
hallo,

Variable um eins erhöhen: (nur bei int)

code\:

var++; oder ++var oder lang geschrieben var = var + 1;



float:

code\:

f = f + 1.0;



Problem 2:

probier folgendes (nur code fragmente)

code\:

int iPCWurf;
int iNPCWurf;

iPCWurf = d6(1);
iNPCWurf = d6(1);

if (iPCWurf > iNPCWurf)
{
// Spieler gewinnt
...
}
else if (iPCWurf == iNPCWurf)
{
// Gleichstand
...
}
else
{
// NPC gewinnt
...
}

// Ausagbe

string sWurfErgebnis = IntToString(iPCWurf) + ":" + IntToString(iNPCWurf);



// -> Es gibt eine FUnktion die einen Int Wert in einen String verwandelt, wie dieser nun genau lautet kann ich leider nicht mit 100% sicherheit sagen, da ich gerade in der arbeit bin, und keine funktionsliste vor mir habe... aber falls mich mein gedächnis nicht vollkommen verlassen hat sollts so gehen....

criz


___________________________

Meine Droge hat einen Namen:
RED BULL[/font]
12.07.2002, 08:04 #8
criz
Beiträge: 39
Forgotten Book geupdatet -
hallo,

Habe mir gerade dein (oder unser?) Forgotten Book angesehen, und findes es recht gut. Aber alles was gut ist es wert verbessert zu werden darum hier noch einige Vorschläge:

o) Sprachstil

Der verwendete Sprachstil entspricht einem, welcher in Foren verwendet wird und ist IMHO für ein Buch (Dokumentation) nicht geeignet. Mir ist schon klar das dies eine enorme Arbeit darstellt, vorallem kopierte (legal!) scripts und dessen Kommentare sind nicht immer im schönsten Hochdeutsch vorzufinden

o) Script / Code anzeige

Ein unformattierter Code (Script) ist schwer zu lesen und erweckt beim Leser automatisch das Gefühl, dass ein komplizierter Code vor Ihm liegt. Zusätzlich sollte jeder Code in alt bewährten Schriften (Courier New) dargestellt werden, zwecks leserlichkeit.

o) Verbreitung des Forgotten Books

Es wäre zu Schade, wenn nur eingeweihte dieses Forums das Buch zu gesicht bekommen würden. Mach ein wenig Werbung auf anderen Seiten für deine Arbeit.
(z.B.: news eintrag auf www.neverwinternights.de ... usw.)


Add:
Wie wäre es mit einer Kurzen Einführung ins Scripten, ala wie definiere ich Variablen, schleifen, ifs, usw (für Kapitel Tutorial).
Könnte ich die Verfassen, wenn dies benötigt bzw. gewünscht werden sollte.

criz
12.07.2002, 08:25 #9
criz
Beiträge: 39
Script Referenz [Link] - Script Referenz [Link]
Habe soeben eine recht gute (englische) Script Referenz im netz gefunden.
Enthält alle Bioware Kommentare zu Funktionen und zusätzliche Tipps & Tricks von den Authoren.

http://www.reapers.org/nwn/reference/

criz
12.07.2002, 09:44 #10
criz
Beiträge: 39
Forgotten Book geupdatet -
quote:
Zitat von LightHawk
Meintest du jetzt Orschel oder mich ?


sry, eigentlich dich, schon ausgebessert.

es ist freitag und ich muss noch arbeiten....

criz
12.07.2002, 09:52 #11
criz
Beiträge: 39
Forgotten Book geupdatet -
thx, verwirrung aufgelöst.

ich sollte mich einmal ausschlafen gehen...

und dannach hätte ich sogar ein wenig zeit übrig etwas für das Forgotten Book zu machen.. falls gewünscht.

criz
12.07.2002, 11:32 #12
criz
Beiträge: 39
Wer hat lust auf Glücksspiel? :) -
hallo,

Gawain hat die Würflerei ;) gleich in eine zeile zusammengefasst:

code\:

if (d6(1) > d6(1))
{
...
}
else
{
...
}



der code ist völlig richtig, und man erspart sich ein wenig schreibarbeit, hat jedoch einige nachteile:

o bei Wurfgleichheit wird es entweder als sieg oder niederlage gewertet (oben als niederlage)

o man kann die wurfergebnisse kein 2. mal verwenden bzw. irgendwo speichern und später als text wieder ausgeben

alles klar?
criz


___________________________

Meine Droge hat einen Namen:
RED BULL[/font]
12.07.2002, 12:19 #13
criz
Beiträge: 39
Wer hat lust auf Glücksspiel? :) -
... und eigentlich nein.

Die Scriptsprache (hat die eigentlich auch einen Namen?) ist der Programmiersprache C weit aus ähnlicher,

o) denn php kennt keine void main()

o) php hat keine variablentypen ala int, string, object usw..

o) usw.. usw..

criz
12.07.2002, 13:01 #14
criz
Beiträge: 39
Wer hat lust auf Glücksspiel? :) -
Kleiner Vorschlag:

Wie wärs mit eine wenig mehr Spannung im Dialog?

NPC: Spielchen?
PC: JA
delay...
NPC:
bei wurf zwischen 1-2 : Ich hab eine ..., mann ist das schlecht...
bei wurf zwischen 3-4 : Ich hab eine ..., mal sehen was du wirfst..
bei wurf zwischen 5-6 : Ha Ha, mit einer ... hab ich so gut wie gewonnen...
delay
NPC:
mom, mal sehen ... du hast eine ...

--> weiter zu sieg,unentschieden,niederlage.. usw...

criz

p.s. dialog texte sind nur schemenhaft, müssten natürlich noch schmuckhafter getextet werden.
12.07.2002, 13:35 #15
criz
Beiträge: 39
Wer hat lust auf Glücksspiel? :) -
@Bluetooth: naja, man könnte schon. ich jedenfalls.

ich bin der 100% scripter, das texten inkl. deutscher rechtschreibung und grammatik überlasse ich gerne anderen...

criz
14.07.2002, 21:20 #16
criz
Beiträge: 39
Script: MagicDoor -
sry, werd mir das gleich ansehen...
auf alle fälle bei mir funkts...

criz
15.07.2002, 09:44 #17
criz
Beiträge: 39
Script: MagicDoor -
thx, werde ich doch glatt umbauen.

Werde dieses Script noch etwas besser dokumentieren (erklären) und optimieren, damit eine schöne Version davon ins Forgotten Book kommt.

criz
15.07.2002, 09:50 #18
criz
Beiträge: 39
Forgotten Book Reorganisation -
Die Idee, am Anfang jedes Scripts eine Liste in welche Events das jeweilige Script kopiert werden kann, finde ich super.

Zum einfacheren Lesen (für Anfänger) sollte es noch eine Seite geben, wo erklärt wird, wie diese Tabelle zu lesen ist, inkl. Link bei jeder Tabelle zu dieser "kleinen" Hilfsseite...

criz
15.07.2002, 10:22 #19
criz
Beiträge: 39
Forgotten Book - Beiträge? - Forgotten Book - Beiträge?
hallo,

Habe mir gedacht, dass ein Thema für alle (hoffentlich zahlreiche) Beiträge für das Forgotten Book sinnvoll ist, damit diese Disskutiert und bewertet werden können.

Danach kann LightHawk (thx für die tolle Arbeit) diese (falls für gut genug empfunden) ins Forgotten Book übernehmen.

Einer allein kann ein solches "Monster" - Projekt nicht Fertigstellen...

Darum gleich hier mein Beitrag:

www.mgco3.com/nwn/script_ein.doc ... ist eine kleine Einführung ins Scripten...

criz
15.07.2002, 12:19 #20
criz
Beiträge: 39
Forgotten Book Reorganisation -
gute idee,
ab wann gibt es das Forum?

criz
15.07.2002, 13:02 #21
criz
Beiträge: 39
Sagt mal, ist das bei euch auch so? -
1)Das Forgotten Book ist ein Projekt, und wird von LightHawk organisiert, gemanaged usw...
und soll das allwissende Buch für das nwn Toolset im deutschem Sprachraum werden :D

2) *.chm sind Hilfedatien für Windows. Doppelklick darauf und du hast das Buch geöffnet
15.07.2002, 22:16 #22
criz
Beiträge: 39
Scriptsammlung -
Script: Schwarzpulverfass

Das Script in den "OnDamaged Event" eines normalen Fasses (Barrel) kopieren. Fass verwendabr machen, jedoch ohne Gepäck (ist ja schließlich randvoll mit schwarzpulver..)

Sobald das Fass einen Schaden bekommt (durch wen oder was auch immer) explodiert dieses in einem grellen Feuerball und beschädigt alle innerhalb eines bestimmten Radius liegenden Objekte, Kreaturen und Spieler.

(Anm.: sehr interessant wenn mehrere Fässer nebeneinander stehen :D )

code\:

// Scriptname: Black Powder Barrel
// Author: criz (chris@mgco3.com)
// Date: 15. July 2002
// Version: 1.0
// Usage: Apply this script to the OnDamaged Event of an Barrel
// Description: If Barrel is damaged then it will explode and do
// do some damage to surrounding objects.
// CodeHistory: 15. July 2002 -> creation, testing

void main()
{
float fDamageRange = 6.0; // Range of FireDamage
int iMinDamage = 15; // Minimal Firedamage
int iAddDamage = d6(); // Additional (random) Damage
// TotalDamage to an object is
// iMinDamage + iAddDamage

if (GetLocalInt(OBJECT_SELF,"ExplodeOnce")==0)
{
// Do the nice Fire Explosion
SetLocalInt(OBJECT_SELF,"ExplodeOnce",1);
effect eExpl = EffectVisualEffect(VFX_FNF_FIREBALL);
effect eSmoke = EffectVisualEffect(VFX_FNF_SMOKE_PUFF);
effect eBUMP = EffectVisualEffect(VFX_FNF_SCREEN_BUMP);
effect eDamage = EffectDamage(GetCurrentHitPoints(),DAMAGE_TYPE_FIRE);
DelayCommand(0.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,eExpl,OBJECT_SELF));
DelayCommand(0.3,ApplyEffectToObject(DURATION_TYPE_INSTANT,eBUMP,OBJECT_SELF));
DelayCommand(0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eSmoke,OBJECT_SELF));
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,OBJECT_SELF);
}
else
{
// Do Damage to all Objects in a range defined by fDamageRange
object o;
effect eFireDamage;
o = GetFirstObjectInShape(SHAPE_SPHERE,fDamageRange,GetLocation(OBJECT_SELF) ,TRUE,OBJECT_TYPE_ALL);
while(GetIsObjectValid(o))
{
eFireDamage = EffectDamage(iMinDamage + iAddDamage,DAMAGE_TYPE_FIRE, DAMAGE_POWER_PLUS_TWO);
DelayCommand(0.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,eFireDamage,o));
o = GetNextObjectInShape(SHAPE_SPHERE,fDamageRange,GetLocation(OBJECT_SELF), TRUE,OBJECT_TYPE_ALL);
}

}
}



==> Beim Kopieren des Scripts auf die Zeilenumbrüche achten (besonderst die 2 zeilen die mit TRUE beginnen gehören in die darüberliegende Zeile, sonst -> Fehler!

have fun, criz


___________________________

Meine Droge hat einen Namen:
RED BULL[/font]
18.07.2002, 09:00 #23
criz
Beiträge: 39
Projekt: Neverwinter -
@LightHawk

IMHO habe ich keine Einwände gegen deine Pläne, jedoch müssten diese gut organisiert sein. Die Organisation sollte von mehreren Personen (min. 3) übernommen werden, damit, falls einer den Größenwahn verfallen sollte, es immer noch zwei gibt die gegesteuern können.

Ich hoffe das durch deine Ambitionen in diesem zukünftigen Projekt, das ältere Projekt Forgotten Book nicht in vergessenheit gerät.

Vorschlag:
1)
Wie wäre es mit einer Netzseite ala www.ForgottenBook.(???) welches dann alle Projekte (MegaModul + ForgottenBook) beinhaltet.

3) Die Organisatoren müssen Aufgaben via. internes Forum vergeben, denn es gibt imo einige die mitmachen wollen, aber immer konkrete Aufgaben gestellt bekommen möchten. (ala baut einmal was euch gefällt find ich nicht so toll, denn dann haben wir in einem outdoor gebiet auf einmal 10 drachenhöhlen, weil ja jeder etwas ganz besonderes modellieren möchte.)

2) Story für das MegaModul: Suche nach dem Vergessenem Buch! :D ;)
(nicht ernst nehmen!)


criz

p.s.: meine unterstützung wird somit angeboten.
18.07.2002, 20:48 #24
criz
Beiträge: 39
Momentaner Projektestatus -
hallo,

1) schaut ja immer professioneller aus. -> großes Lob.

2) Wunsch: Könnte man die verwendete Schriftart gegen eine seriffenlose Schrift (z.B.: Verdana tauschen?) Bitte!!! Ist aber reine Geschmackssache und ich beuge mich der Mehrheit... (Wer sich meldet isn Kopf kürzer.. :D )

3) Mag Mitarbeiter werden...
Kenntnisse in: Grafik (2D) Bearbeitung, HTML, PHP, CSS, C/C++, C#, VB, Java, JavaScript, NWN-Script, aber wen intressierst...

criz
18.07.2002, 21:17 #25
criz
Beiträge: 39
Momentaner Projektestatus -
nur mut, wenn du willst kann man alles lernen, einfach ein (gutes) buch kaufen und lesen (lesen und nochmals lesen, ach hab ich schon erwähnt das man bücher lesen kann :D ) und dann am besten kleine Projekte (wenn möglich praktische und sinnhafte) mit dem erworbenen wissen selbst durchführen...

die erste wirkliche programmiersprache zu erlernen ist am schwersten, alle weiteren haben nur eine andere syntax und andere codebibliotheken, thats it.

aber sei einmal ehrlich willst du das programmieren wirklich lernen?
also ich geh lieber klettern oder beachvollyball spielen und in spätesten 4 jahren möchte ich keine einzige codezeile mehr schreiben müssen (nur deligieren ...:D )

Als Bürokaufmann hast du dafür mehr ahnung von der wirtschaft, und Dein konto ist vielleicht nicht immer gleich auf null

criz
Seite 1 von 2  1  2