Se puede realiar una conversacion con el PC sentado?
Bueno muchachos, la idea es la siguiente: puse en una silla el siguiente script[code:1:98ce5adb3d]object oChair=OBJECT_SELF; AssignCommand(GetLastUserBy(),ActionSit(oChair)); object oEnano=TAG DEL NPC; AssignCommand(oEnano,ActionForceToObject(GetFirstPC(),FALSE,1.0,1.0)); AssignCommand(oEnano,ActionStartConversation(GetFirstPC(), “ “,FALSE)); // deje “ “ con espacio porque entiendo que haci se dispara la conversacion del npc. [/code:1:98ce5adb3d] Realiza la accion de ir hacia el PC pero no inicia la conversacion. La pregunta es¿Es necesario si o si que el PC este parado para que se inicie la conversacion? Es importante esto porque en el argumento que estoy haciendo la noticia es dura, y el NPC prefiere que se siente para darsela // un poco de realismo 
Neverwinter Nights
Pues no, no puedes conseguir ke un PNJ permanezca sentado mientras habla… o eso se creía
Yo lo conseguí de una manera algo… burda, pero simple. Si impides ke el PNJ tenga espacio para levantarse, por ejemplo, si la silla donde está sentado está entre una pared y tu PJ, entonces el PNJ hablará mientras permanece sentado. Lo ke haces. es ke en la conversación, al terminar de hablar, el PNJ se siente nuevamente, para ke kuando te separes, no se te levante.
Esto es muy facil de hacer en las posadas, jejeje.
Buena idea, REALMENTE muy buena! La voy a aplicar cuando haga un dialogo para un NPC. Pero lo que yo queria era que el jugador se sentara y le large el rollo el NPC, SIN que el jugador tenga que levantarse, se podrá hacer?
Suponiendo que ya sabes hacer que se siente en la silla, para que no se levante de ella, tendrias que hacer lo siguiente:
1º Crea el archivo de la conversacion ej “convers” y le asignas el tag de el pnj que quieras que hable - ponle un tag unico por si acaso - en los dialogos del pnj, o incluso el tag de varios pnjs si quieres que hablen varios. (lo del tag se pone en la pestaña “Etiqueta del hablante” un tag, por ejemplo, “reygolius”)
2º Puedes añadir este script si quieres al comienzo del script por defecto que se encuentra en el slot onConversation de la criatura que va ha hablar, o sustituirlo a secas (recuerda guardarlo con otro nombre):
[code:1:926b34d624]
void HablarSentado(string sResRef="", object oObjectToDialog=OBJECT_INVALID)
{
BeginConversation(sResRef, oObjectToDialog);
}
void main()
{
object oPJ = GetLastSpeaker();
object oOS = OBJECT_SELF;
AssignCommand(oPJ, HablarSentado("convers", oOS));
SetCommandable(FALSE, oOS);
}
[/code:1:926b34d624]
La ultima instruccion impedira que el pj se mueva, es decir que ademas, si quieres que despues de hablar se levante, al final del dialogo, o cuando quieras le haces un SetCommandable(TRUE, OBJECT_SELF);
Lo he probado y funciona, si no te aclaras, dilo, y te lo explicare mejor.
Bueno y si lo que quieres es que el PJ se este sentadito usa el siguiente script:
[code:1:6f415cde7b]
oPC = GetFirstPC();
oSilla = GetObjectByTag("silla");
oNPC = GetObjectByTag("TagNPC");
AssignCommand(oPC, ActionSit(oSilla));
DelayCommand(0.1, SetCommandable(FALSE, oPC));
BeginConversation("convers", oNPC);
[/code:1:6f415cde7b]
Y ya no podra levantarse.
De igual modo que antes, pon el tag del npc en sus dialogos del archivo de conversacion. Y al final de la misma colocas un script que permita de nuevo moverse al pj: SetCommandable(TRUE, oPC)
PD: Este script no lo he probado, asi que ya me diras si funciona… SI no cambia el beginconversation y por asignar al npc la accion de hablar a l pj.
Bueno Kerbel si logro que el ultimo script ande, no veo razón para no darle palidas al PJ. ¿Estas haciendo algun modulo o te gusta programar, porque veo que estas aceitado con el scripting?

Saludos y gracias por todo.
Veamos, he arreglao y testeado el último script para que funcione. Lo he colocado en el onHeart de la propia silla y para generalizar el script, me he referido a la silla por su tag, en vez de con OBJECT_SELF:
[code:1:5ef45928ed]
void HablarSentado(string sResRef="", object oObjectToDialog=OBJECT_INVALID)
{
BeginConversation(sResRef, oObjectToDialog);
}
void main()
{
if (!GetLocalInt(OBJECT_SELF, "DarNoticia")) return;
if (GetLocalInt(OBJECT_SELF, "NoticiaDada")) return;
object oPC = GetFirstPC();
object oSilla = GetObjectByTag("silla");
object oNPC = GetObjectByTag("posadero");
if (GetSittingCreature(oSilla)==oPC)
{
AssignCommand(oPC, HablarSentado("convers", oNPC));
SetLocalInt(OBJECT_SELF, "NoticiaDada", TRUE);
}
else
{
DelayCommand(0.1, SetCommandable(FALSE, oPC));
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionSit(oSilla));
}
}
[/code:1:5ef45928ed]
Resultado:
Se ejecuta cuando la variable DarNoticia, aplicada al propio objeto, esto es, la silla, es verdadera. Establecela como cierta cuando el PNJ vea al pj o cuando quieras.
El Pj pierde la capacidad de moverse y automaticamente se sienta. Esto no es muy real, si quieres puedes cambiar todo el script para que solo al sentarse comience la conversacion: borra toda la parte else del if (esto no lo he testeado). Cuando el pj llegue a la silla, se ejecuta la converacion y el heart no vuelve a ejecutar todo el script (variable NoticiaDada)
Y por último, ve a la pestaña “archivo actual” del archivo de conversacion y en el hueco de script que se ejecuta al finalizar la conversacion o si se interrumpe, coloca el siguiente script:
[code:1:5ef45928ed]
void main()
{
SetCommandable(TRUE, GetPCSpeaker());
}
[/code:1:5ef45928ed]
PD: Si, me encanta programar aunque a veces es bastante frustrante
; como habras comprobado 

Y no estoy haciendo ningún modulo, pero trabajo en un mundo persistente llamado Cielos Oscuros, donde me lo paso bomba programando scripts
Si hubiera tenido un poco mas de paciencia podria haber seguido el hilo original de la historia que habia hecho en mi cabeza(no quiere decir que no vuelva a la carga con la ayuda que me diste
), y lo que hize es que el PNJ este parado y le diga la mala noticia, luego aparecen un par de orcos afuera de la casa y lo que quise hacer es lo siguiente:
-Una vez muertos los orcos, en el script de EndCombat del PNJ que me ayuda en el combate, puse una variable local para el que sea el disparador de un script del area en la que se encuentran.
-En ese script aparece un mago invencible, que lo hago aparecer en pantalla con una animación similar a la que hay en el preludio del juego(esa del mago y los dos goblins) y mata al pnj. Para mí el script esta bien hecho pero creo que el problema esta en el momento que usa la variable local para hacer aparecer esta animacion forzada.
Pregunta ¿Hay alguna forma de hacer que una vez que termina el combate con los orcos aparezca esta secuencia? Como un trigger, pero creo que es sobre un trigger de combate?
Otra pregunta sobre el mundo persistente, has logrado hacer tu propio script para el combate de un pnj con el jugador. ¡Como extraño la IA de los Baldur´s Gate.
Para hacer que se ejecute un script cuando mates a todos los goblins, haz un triger de encuentro para hacer aparecer a los goblins, y en las propiedades del triger hay una pestaña para colocar un script al matar a todos las criaturas generadas por él.
No se que quieres decir con un script que gestione la lucha entre un pnj y un pj; no se si te refieres a las facciones que impiden que ataques a un pnj no hostil, pero si es eso, simplemente usa la funcion setistemporaryenemy o cambiale la faccion y haz que ataque con un determinecombatround().
Si metes el script en el OnHearbreath de la silla… ¿no se relentarizará el juego? Amos, en el OnH yo he tenido mis más y mis menos, jejeje.
No mucho, siempre que no te pases con los heart y menos aun si no es un mundo persistente. De todos modos lo que hice fue un ejemplo y no me preocupe de optimizarlo.