World of Gothic Archiv > NWN-Hilfe
sprechendes Item ...
Seite 1 von 1  1 
08.09.2002, 21:52 #1
Shamba
Beiträge: 37
sprechendes Item ...
Hallo!
Hab' da mal ne Frage: Kann man es irgendwie hinbekommen das ein Item mit einem spricht bzw. einfach hin und wieder mal ein paar Beschimpfungen in den Raum wirft? Am Besten bei einer Waffe, wenn diese sich in der Hand des PC's befindet. Ist aber auch OK wenn das Item nur im Inventar rumliegt. Kenne mich mit dem Scripten und so nicht ganz so gut aus, und da eine Waffe ja kein heartbeat oder ähnliches hat, wüsste ich nicht wie es gehen soll.
Kann mir da jemand weiterhelfen?
09.09.2002, 05:05 #2
Elessar
Beiträge: 495

Du kannst im Moduleheartbeat überprüfen, ob der Spieler die besagte Waffe gerade in der Hand hat und dann nach dem Zufallsprinzip einen Text ausgeben, sollte recht einfach gehen...
09.09.2002, 10:13 #3
Shamba
Beiträge: 37
...
Ok, danke für die Antwort, werde es trotz meiner geringen Script-Kentnisse mal probieren. Vielleicht schaffe ich es ja :D
09.09.2002, 10:46 #4
Elessar
Beiträge: 495

ich bin gerade in der Schule, wenn du willst, kann ich dir heute abend das Script kurz hineinstellen, oder du versuchst mal und stellst es einfach rein, wenn du nicht mehr weiterweisst und ich oder andere helfen dann.
09.09.2002, 12:54 #5
Shamba
Beiträge: 37
...
Wäre nett wenn du mir da helfen würdest, ich bekomme das nicht so ganz auf die Reihe ...
09.09.2002, 16:51 #6
Elessar
Beiträge: 495

code\:

void main()
{
object oPC = GetFirstPC();
object oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC);

if(GetTag(oItem) == "Tag_der_Waffe")/*Ich hoffe mal, dass das der richtige Slot ist, habe damit noch nicht gearbeitet bisher*/
{
if(Random(5) == 0)//Eine Chance von 20% pro Heartbeat
{
switch(Random(10))//10 verschiedene Sprueche
{
case 0:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 1:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 2:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 3:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 4:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 5:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 6:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 7:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 8:
AssignCommand(oItem, SpeakString("blabla"));
break;
case 9:
AssignCommand(oItem, SpeakString("blabla"));
break;
//Bin mir nicht sicher, ob ein Item sprechen kann, sonst setzt ein oPC anstatt oItem ein...
}
}
}
}

09.09.2002, 18:21 #7
Shamba
Beiträge: 37
Vielen Dank ...
... für die Mühe! Habe es zwar noch nicht ausprobiert, aber ich vertraue dir da voll und ganz ;)

hat leider doch nicht geklappt (auch nicht mit oPC)
09.09.2002, 19:14 #8
GuradonHellsing
Beiträge: 232

mh
ich weis nicht sehr konstruktiv ,aber vielleichtmaln Action vor das speakstring schreiben(ich weis hat im prinzip nix damit zu tuen,aber in der beschreibung steht )
ansonsten vielleicht ma das random niedrigersetzen????
09.09.2002, 20:12 #9
Elessar
Beiträge: 495

Probiers mal mit INVENTORY_SLOT_RIGHTHAND anstatt INVENTORY_SLOT_CWEAPON_R... Und setzt das erste Random mal testweise auf Random(1)
10.09.2002, 07:29 #10
Shamba
Beiträge: 37
...
klappt leider alles nicht ...
10.09.2002, 13:16 #11
therealjoker
Beiträge: 48

ich habe sowas auch mal probiert, habe aber leider gedacht, dass man auch Items Scripte zuweisen kann. Danach habe ich versucht es bei OnItemAquired() reinzusetzen, hat aber auch nicht funktioniert. Deswegen kann das folgende Script dein Problem auch nicht lösen. Es beinhaltet jedoch viele verschiedene Sprechsätze sowie in der Main() Funktion eine Einstellung, ob der Gegenstand zusätzlich noch Aktionen(z.B. heilen, reizen, etc.) zufällig ausführen soll. Also hier erstmal das Script:
code\:

int Sprechen(string sWaffenName)
{
object oPC=GetFirstPC();
int Zufall=Random(10);
if(Zufall==1)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Manno, wann kann ich endlich mal wieder jemanden aufschlitzen?"));
}
if(Zufall==2)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich will mal wieder gegen einen Drachen kaempfen!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Also los, besorg' mir einen Drachen!"));
}
if(Zufall==3)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Mmh, ist das oede! Ist ja nichts los hier!"));
}
if(Zufall==4)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Langweilig!"));
}
if(Zufall==5)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Heho, nur ein toter Goblin ist ein guter Goblin!"));
}
if(Zufall==6)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich zeige dem Gegner gegenueber keine Gnade!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Du kannst noch von mir lernen!"));
}
if(Zufall==7)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich bin mit Abstand die beste Waffe der Welt!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Ganze Imperien mussten schon vor mir kapitulieren!"));
}
if(Zufall==8)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich esse am liebsten Eingeweidebrei mit einer deftigen Blutsosse."));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Moment, ich habe eine Brise zermahlene Knochen vergessen..."));
}
if(Zufall==9)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich sage dir, uns beide kann keiner schlagen!"));
}
if(Zufall==10)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich werde langsam stumpf; du koenntest mich mal wieder schraefen lassen!"));
}
return 0;
}

int Aktion(string sWaffenName)
{
object oPC=GetFirstPC();
float MaxDistanz=5.0;
object oNah=GetNearestObject(OBJECT_TYPE_CREATURE, oPC);
int Laune=Random(3);
if(Laune==1)
{
if(GetDistanceToObject(oNah)<=MaxDistanz)
{
int Wut=Random(2);
if(Wut==1)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Man, dich kann ich ja ueberhaupt nicht leiden..."));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectKnockdown(), oNah);
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Haha, ich habe ihn fuer dich niedergeworfen, nun greif ihn aber auch an"));
AssignCommand(oNah, ActionSpeakString("Ich finde das gar nicht lustig!"));
AdjustReputation(oPC, oNah, -20);
}
if(Wut==2)
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Was is'n das fuer'n Idiot, hahaha!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Hey du, komm doch mal rueber!"));
AssignCommand(oNah, ActionSpeakString("Jetzt reicht's mir aber!"));
AssignCommand(oNah, ActionAttack(oPC));
}
}
}
else
{
int Gut=Random(2);
if(Gut==1)
{
int nLohn=GetGold(oPC)/6;
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Lauf doch nicht so schnell!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Hier, das hast du glatt uebersehen"));
GiveGoldToCreature(oPC, nLohn);
}
if(Gut==2)
{
int nLeben=GetCurrentHitPoints(oPC);
int nLebenMax=GetMaxHitPoints(oPC);
if(nLeben<nLebenMax)
{
int nDifferenz=nLebenMax-nLeben;
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Du siehst ja uebel aus, ich glaube ich sollte dich mal heilen"));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nDifferenz), oPC);
}
else
{
AssignCommand(oPC, ActionSpeakString(sWaffenName));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("sagt:"));
AssignCommand(oPC, ActionWait(1.0));
AssignCommand(oPC, ActionSpeakString("Ich mag dich, lass' mich dir einige Geschichten erzaehlen!"));
AssignCommand(oPC, ActionWait(3.0));
AssignCommand(oPC, ActionSpeakString("Blablabla..."));
GiveXPToCreature(oPC, 500);
}
}
}
return 0;
}

void main()
{
//Art auf 0 stellen, wenn der Gegenstand nur sprechen soll
int Art=1;
object oPC;
object oItem=GetModuleItemAcquired();
string sTag=GetTag(oItem);
if(GetIsObjectValid(oItem) == TRUE)
{
//Tag der Waffe eingeben
if(sTag=="waffe")
{
string sWaffe=GetName(oItem);
oPC=GetItemPossessor(oItem);
while((!GetIsInCombat(oPC)) && (!IsInConversation(oPC)))
{
ActionWait(180.0);
Sprechen(sWaffe);
if(Art>=1)
{
Aktion(sWaffe);
}
continue;
}
}
}
}


mal ne andere Frage. In Elessars Scipt spricht immer der Gegenstand. Können die überhaupt Strings sprechen? Bei meinem Script habe ich nämlich immer versucht das zu umgehen.


___________________________

"Kein Alkohol ist auch keine Lösung!"
-Campino, Die Toten Hosen[/font]
10.09.2002, 16:43 #12
Shamba
Beiträge: 37
...
ja, in Elessars Script spricht das Item, aber er hat selbst geschrieben das dies evtl. nicht geht. Deshalb habe ich oItem auch mal versuchsweise mit oPC ersetzt, klappt aber auch nicht.
Und durch dein Script steig ich auch nicht durch, nicht weil es unübersichtlich ist, sondern weil ich einfach zu wenig Ahnung vom scripten habe.
Seite 1 von 1  1