kowalevskaya

21/06/2009 17:13:13

Pongo un script que tengo por aquí para que al entrar en una transición (que en la pantalla no se ve... o sea como si fuera un generic trigger), efectúa una tirada (aplicando algunos bonos según profesión) y si la pasa cambia a la siguiente área si no, a saber donde acabará...

Esto se pone en el OnEnter de un trigger, que emulará la transición de área
[code:1:19481bc9b2]void main()
{
object oPJ = GetEnteringObject();
string sTexto = GetLocalString(OBJECT_SELF, "MENSAJE");
int iPantallas = GetLocalInt(OBJECT_SELF, "PANTALLAS");
string sOrigen = GetLocalString(OBJECT_SELF, "TAG_ORIGEN");
string sDestino = GetLocalString(OBJECT_SELF, "TAG_DESTINO");
string sPrefijo = GetLocalString(OBJECT_SELF, "TAG_PREFIJO");
float fTiempo = GetLocalFloat(OBJECT_SELF, "TIEMPO");
int iCD = GetLocalInt(OBJECT_SELF, "CD");

/* Bonos a la tirada de orientacion */
int n, iClase, iBonos;
for(n = 1; n <= 3; n++)
{
iClase = GetClassByPosition(n, oPJ);
if(iClase == CLASS_TYPE_ARCANE_ARCHER) {iBonos = iBonos+2;}
if(iClase == CLASS_TYPE_BARBARIAN) {iBonos = iBonos+2;}
if(iClase == CLASS_TYPE_DRUID) {iBonos = iBonos+2;}
if(iClase == CLASS_TYPE_HARPER) {iBonos = iBonos+1;}
if(iClase == CLASS_TYPE_RANGER) {iBonos = iBonos+2;}
if(iClase == CLASS_TYPE_ROGUE) {iBonos = iBonos+1;}
}
/* Seleccion del destino */
int iDado = d20(1);
iBonos = iBonos + GetSkillRank(SKILL_SEARCH, oPJ);
SendMessageToPC(oPJ, "Tirada de supervivencia: "+IntToString(iDado)+"+"+IntToString(iBonos)+" ="+IntToString(iDado+iBonos)+" contra CD: "+IntToString(iCD));

if ((iDado >1 && (iDado+iBonos) >= iCD)||(iDado == 20)) //Tirada con exito
{ }
else
{
int iRndPtoCard = d4(1);
switch (iRndPtoCard)
{
case 1: sPrefijo = sPrefijo + "S"; break;
case 2: sPrefijo = sPrefijo + "E"; break;
case 3: sPrefijo = sPrefijo + "N"; break;
case 4: sPrefijo = sPrefijo + "O"; break;
}
int iRndFase = Random(GetLocalInt(OBJECT_SELF, "PANTALLAS"))+1;
sDestino = sPrefijo + IntToString(iRndFase);
}
/* Salto a la nueva posicion */
if (sTexto != "") {FloatingTextStringOnCreature(sTexto, oPJ, FALSE);}

DelayCommand(fTiempo, AssignCommand(oPJ, ClearAllActions(TRUE)));
DelayCommand(fTiempo+0.5, AssignCommand(oPJ, ActionJumpToObject(GetObjectByTag(sDestino), TRUE)));
}[/code:1:19481bc9b2]

Ahora bien, hay que tener un trigger en el que se definen las siguientes variables:
CD: la dificultad que representa Intuir la dirección (hay unos bonos según la profesión)
MENSAJE: por si quereis que aparezca un texto al cambiar de una transición a otra (por ejemplo "Te estás adentrando en las oscuridades insondables de la tierra")
TAG_DESTINO: Etiqueta del Punto de ruta de destino, si sacase la tirada.
TAG_ORIGEN: Etiqueta del Punto de ruta asociado a la transición que está pisando.
TAG_PREFIJO: se debe poner la secuencia común de las áreas. Éstas deben tener una estructura común xxxxxx$d, siendo xxxxxx la estructura común, $ (N, S, E, O) punto cardinal, d un dígito. La historia de lo del pto cardinal, es para que al salir por el este, en la nueva área aparezca por el oeste (por ejemplo)... también, decir que las áreas deben tener cuatro salidas (N, S, E, O)
TIEMPO: Valor que transcurre, antes de saltar de un área a otra... normalmente 0,5 o por ahí, suele ir bien.
Además, del desencadenante, hay que pintar un punto de ruta con la misma etiqueta que ponéis en el TAG_ORIGEN.

PD: Por si sirve de ayuda en esos bosques o desiertos.
:wink:

PD2: También se puede añadir unas sentencias para separar al grupo, que salten todos los próximos al PJ que activa el encuentro (cosa interesante, para que los exploradores vayan por delante haciendo su labor)

Reeditado: he quitado unas líneas que usaba antes, pero que no hacen falta tal y como está ahora.