Borrachos
Bueno, estoy empezando a hacer puebas con scripts, y queria hacer un script para que los borrachos de mis tabernas no parezcan pasmarotes, si no que se dediquen a beber botella tras botella, moverse de un lado a otro, y parecer mareados [quote:a613b49a41]void main() { PlayAnimation (ANIMATION_FIREFORGET_DRINK); PlayAnimation (ANIMATION_LOOPING_PAUSE_DRUNK); ActionRandomWalk () ; }[/quote:a613b49a41] Pero lo unico que me hacen es beber y moverse de un lado a otro, no se “marean”. En principio queria hacer un while, con un contador, cuando el contador llegase a un numero determinado, poner la animacion de que caen al suelo, pero lo unico que me hacian era caerse y levantarse todo el rato. Existe alguna forma de hacer que no empiecen todos a la vez? poner un “delay random” o algo así? es que si no todos beberian a la vez. Lo puse Onheartbeat, supongo que iria ahí, no?
Neverwinter Nights
Yo lo que suelo hacer con los borrachos es poner una serie de acciones que se ejecutan aleatoriamente, tales como beber, eructar, alzar los brazos, decir una parida, sentarse en el suelo y un largo etcétera. Supongo que quedaría bien que una de esas opciones aleatorias sea la de caerse al suelo y no esperar a que beba un determinado número de copas. Ten en cuenta que si un pj entra en el bar y quieres que vea tu pnj borracho deberías hacerlo para que mostrara los síntomas lo antes posible. Pero, vamos, todo es cuetión de gustos.
Para que el pnj permanezca tirado en el suelo no lo he probado, pero supongo que si en un determinado momento le aplicas un efecto como sleep o alguno así debería funcionar. En fin todo es ir probando.
En cuanto a lo del delay random supongo que deberá funcionar también, tal y como has dicho.
Ok gracias, por cierto, que animacion son las del eructo y la de alzar los brazos?
El eructo no era una animación, sino un sonido, pero no me acuerdo del nombre
. Lo de alzar los brazos creo que se llamaba fireforget victory, o no sé qué victory, pero no estoy muy seguro.
Por que no mezclasr ambas ideas? Puedes usar un while que genere aleatoriamente, cada cierto tiempo, una acción… Ese while estaría controlado por un booleano que se pusiera a False cuando la acción que tocara fuera caerse al suelo… así ya no habría más acciones para ese
dejaros de whiles, lo suyo para representar borrachos como dice atary es aleatoriamente y con un switch, prueba esto
[code:1:72651b8ffc]
int iRollTwelve = d12(1);
void main()
{
DelayCommand(20.0, ActionRandomWalk());
effect eBarf = EffectVisualEffect(VFX_COM_CHUNK_YELLOW_SMALL);
effect eKnock = EffectKnockdown();
string sBarf = "blabla";
string sBarf2= "ando borracho y mareado"
//strings en custom, lo que te de por ponerle
if(d100(1) > 31) // tirada de borrachera
{
{
switch(iRollTwelve) //switch de la tirada
{
case 1:
ClearAllActions();
AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE));
AssignCommand(OBJECT_SELF, ActionSpeakString(sBarf));
DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBarf, OBJECT_SELF, 1.0));
DelayCommand(5.0, ActionSpeakString(sBarf2));
break;
case 2:
ClearAllActions();
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, OBJECT_SELF, 4.0));
while(GetIsEffectValid(eKnock))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBarf, OBJECT_SELF, 1.0);
}
break;
case 3:
ClearAllActions();
AssignCommand(OBJECT_SELF, ActionSpeakString(sBarf3));
DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBarf, OBJECT_SELF, 1.0));
DelayCommand(5.0, ActionSpeakString(sBarf4));
break;
case 4:
ClearAllActions();
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, OBJECT_SELF, 4.0));
DelayCommand(5.0, ActionSpeakString(sBarf6));
break;
case 5:
ClearAllActions();
AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE));
DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBarf, OBJECT_SELF, 1.0));
DelayCommand(5.0, ActionSpeakString(sBarf3));
break;
case 6:
ClearAllActions();
ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID));
ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW));
AssignCommand(OBJECT_SELF, ActionSpeakString(sBarf));
ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE));
DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBarf, OBJECT_SELF, 1.0));
DelayCommand(5.0, ActionSpeakString(sBarf7));
break;
case 7:
ClearAllActions();
ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE,2.0));
AssignCommand(OBJECT_SELF, ActionSpeakString(sBarf5));
DelayCommand(3.0,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS));
break;
case 8:
ClearAllActions();
ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,3.0));
Éso, éso. Lo que dice Aragorn era precisamente a lo que me refería
.