Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.


Pulse Control+D para no olvidar este enlace.
 
Pagina principalÍndicePortalÚltimas imágenesBuscarRegistrarseConectarsePagina principal

 

 Scripts para el baul "Esposas y Rastreo"

Ir abajo 
2 participantes
AutorMensaje
Jastro
Aprendiz
Aprendiz
Jastro


Masculino
Edad : 38
Localización : Islas Canarias
¿Que me Gusta? : Todo y Nada
Puntos de Actividad : 6372

Cantidad de envíos : 40
Fecha de inscripción : 11/08/2008

Nº. de Miembro : 11
Respeto por el Foro :
Scripts para el baul "Esposas y Rastreo" Left_bar_bleue100 / 100100 / 100Scripts para el baul "Esposas y Rastreo" Right_bar_bleue


Scripts para el baul "Esposas y Rastreo" Empty
MensajeTema: Scripts para el baul "Esposas y Rastreo"   Scripts para el baul "Esposas y Rastreo" I_icon_minitimeDom 05 Abr 2009, 2:26 pm

Bueno añado por aqui, un par de scripts ya que en el baul de scripts no puedo postear Sad, Espero que os sirva Smile


Esposas. (Con este script crearemos un objeto que "obligaremos" a un pj a seguirnos, esto nos servira para llevar a una persona hasta la carcel.)

Creamos un objeto de etiqueta 50_objdet y el script lo creamos fuera y en el activateitem ponemos el executescript con el nombre que le hayamos puesto.

Código:
#include "x2_inc_switches"
void main(){
  object oItem = GetItemActivated();
  object oTarget = GetItemActivatedTarget();
  object oUser = GetItemActivator();

/////////////////////////////////Aqui empieza la declaracion para cuando se usa el objeto de detener PJ's////////////////////////////////////
  if (GetTag(oItem) == "50_objdet"){
      if(GetIsDM(oTarget)){
        return;
      }
      if (oTarget == oUser){
        SendMessageToPC(oUser, "No puedes detenerte a ti mismo!");
        return;
      }
      if(GetIsPC(oTarget)){
        int iVar = GetLocalInt (oTarget,"50_detenido");
        switch (iVar){
            case 0:{
              if (GetLocalInt(oUser,"50_ocupado") == 1){
                  SendMessageToPC(oUser,"Sólo puedes llevar un preso.");
              }
              SetLocalInt(oTarget,"50_detenido",1);
              SetLocalInt(oUser,"50_ocupado",1);
              SetLocalObject(oTarget,"50_guardia",oUser);
              AssignCommand(oTarget,ClearAllActions());
              SendMessageToPC(oUser,"Has detenido a "+GetName(oTarget)+".");
              SendMessageToPC(oTarget,"Has sido detenido por "+GetName(oUser)+".");
              AssignCommand(oTarget, ActionForceFollowObject(oUser));
              DelayCommand(0.2,SetCommandable(FALSE,oTarget));
              break;
            }
            case 1:{
              if (GetLocalObject(oTarget,"50_guardia") != oUser){
                  SendMessageToPC(oUser,"Tu no has detenido a esta persona.");
              }
              else{
                  DelayCommand(0.2,SetCommandable(TRUE,oTarget));
                  AssignCommand(oTarget,ClearAllActions());
                  SetLocalInt(oTarget,"50_detenido",0);
                  AssignCommand(oTarget, ClearAllActions());
                  SendMessageToPC(oUser,"Has soltado al preso.");
                  SendMessageToPC(oTarget,"Ya no estas detenido.");
                  break;
              }
            }
        }
      }
      else{
        SendMessageToPC(oUser,"El objetivo no es válido.");
      }
  }
/////////////////////////////////Aqui acaba la declaracion para cuando se usa el objeto de detener PJ's////////////////////////////////////

  if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_scriptS) == TRUE){
      SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ACTIVATE);
      int nRet =  ExecutescriptAndReturnInt(GetUserDefinedItemEventscriptName(oItem),OBJECT_SELF);
      if (nRet == X2_EXECUTE_script_END){
        return;
      }
  }

}


Esposas nº 2:

Estas esposas lo que hacen es que al usarla te mande directamente a la carcel.(crear un punto de ruta)

Código:
#include "x2_inc_switches"
void main(){
  object oItem = GetItemActivated();
  object oTarget = GetItemActivatedTarget();
  object oUser = GetItemActivator();

/////////////////////////////////Aqui empieza la declaracion para cuando se usa el objeto de detener PJ's////////////////////////////////////
  if (GetTag(oItem) == "50_objdet"){
      if(GetIsDM(oTarget)){
        return;
      }
      if (oTarget == oUser){
        SendMessageToPC(oUser, "No puedes detenerte a ti mismo!");
        return;
      }
      if(GetIsPC(oTarget)){
        int iVar = GetLocalInt (oTarget,"50_detenido");
        switch (iVar){
            case 0:{
              if (GetLocalInt(oUser,"50_ocupado") == 1){
                  SendMessageToPC(oUser,"Sólo puedes llevar un preso.");
              }
              SetLocalInt(oTarget,"50_detenido",1);
              SetLocalInt(oUser,"50_ocupado",1);
              SetLocalObject(oTarget,"50_guardia",oUser);
              AssignCommand(oTarget,ClearAllActions());
              SendMessageToPC(oUser,"Has detenido a "+GetName(oTarget)+".");
              SendMessageToPC(oTarget,"Has sido detenido por "+GetName(oUser)+".");
              AssignCommand(oTarget, JumpToObject(GetObjectByTag("tupuntoderutadelacarcel")));
              break;
            }
            case 1:{
              if (GetLocalObject(oTarget,"50_guardia") != oUser){
                  SendMessageToPC(oUser,"Tu no has detenido a esta persona.");
              }
              else{
                  DelayCommand(0.2,SetCommandable(TRUE,oTarget));
                  AssignCommand(oTarget,ClearAllActions());
                  SetLocalInt(oTarget,"50_detenido",0);
                  AssignCommand(oTarget, ClearAllActions());
                  SendMessageToPC(oUser,"Has soltado al preso.");
                  SendMessageToPC(oTarget,"Ya no estas detenido.");
                  break;
              }
            }
        }
      }
      else{
        SendMessageToPC(oUser,"El objetivo no es válido.");
      }
  }
/////////////////////////////////Aqui acaba la declaracion para cuando se usa el objeto de detener PJ's////////////////////////////////////

  if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_scriptS) == TRUE){
      SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ACTIVATE);
      int nRet =  ExecutescriptAndReturnInt(GetUserDefinedItemEventscriptName(oItem),OBJECT_SELF);
      if (nRet == X2_EXECUTE_script_END){
        return;
      }
  }

}

Rastreo para exploradores, lo mismo ponemos el script fuera y lo linkeamos en activate item :D

En el activate item yo lo tengo asi.

Código:
 if(GetTag(oItem)=="TrackerTool" && GetLevelByClass(CLASS_TYPE_RANGER, oJugador) > 0)
    {
        AssignCommand(oJugador, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 6.0));
        DelayCommand(0.2, SetCommandable(FALSE, oJugador));
        DelayCommand(5.8, SetCommandable(TRUE, oJugador));
        DelayCommand(6.0, Executescript("hc_track_start", oJugador));
        return;
    }

y ahora añado los scripts con estos nombres (aconsejo no cambiarlos porque si no hay tocar algunas cosillas)

hc_track_start:
Código:
#include "hc_inc_track"
#include "hc_text_track"


void main()
{
    int nDC;
    object oTracker=OBJECT_SELF;
    object oTrackPlc=GetNearestObjectByTag("Tracker");

    if(GetIsObjectValid(oTrackPlc))
        nDC=GetWillSavingThrow(oTrackPlc);
    if(!nDC || !GetIsObjectValid(oTrackPlc))
    {
        SendMessageToPC(oTracker,NOTPOSSIBLE);
        return;
    }
    object oCritter;
    object oArea=GetArea(oTracker);
    int nLevel=GetLevelByClass(CLASS_TYPE_RANGER, oTracker);
    int nCnt=1;
    float fDistance;
    int nDCAdj;
    vector vCritter;
    oCritter=GetNearestObject(OBJECT_TYPE_CREATURE, oTracker, nCnt);
    while(GetIsObjectValid(oCritter) &&
          GetArea(oCritter)==oArea)
    {
        fDistance=GetDistanceBetween(oCritter, oTracker);
        nDCAdj=FloatToInt(fDistance/10.0);
        if((d20()+nLevel) > (nDC+nDCAdj) &&
            (!GetLocalInt(oCritter,"NOTRACK") &&
            !GetHasFeat(FEAT_TRACKLESS_STEP, oCritter)))
        {
            vCritter=GetPosition(oCritter);
            AssignCommand(oTracker,SetFacingPoint (vCritter));
            AssignCommand(oTracker,GetDirection(GetFacing(oTracker),oTracker,oCritter));
        }
        nCnt++;
        oCritter=GetNearestObject(OBJECT_TYPE_CREATURE, oTracker, nCnt);
    }
    return;
}

creamos otro llamado: hc_inc_track

Código:
void GetDirection(float fFacing, object oTracker, object oCritter)
    {
    //Correct the bug in GetFacing (Thanks Iskander)
    if (fFacing >= 360.0)
        fFacing  =  720.0 - fFacing;
    if (fFacing <    0.0)
        fFacing += (360.0);
    int iFacing = FloatToInt(fFacing);
    /*
      359 -  2  = E
        3 - 45  = ENE
      46 - 87  = NNE
      88 - 92  = N
      93 - 135 = NNW
      136 - 177 = WNW
      178 - 182 = W
      183 - 225 = WSW
      226 - 267 = SSW
      268 - 272 = S
      273 - 315 = SSE
      316 - 358 = ESE
    */
    string sDirection = "";
    if((iFacing >= 359) && (iFacing <=  2))
        sDirection = "E";
    if((iFacing >=  3) && (iFacing <=  45))
        sDirection = "ENE";
    if((iFacing >=  46) && (iFacing <=  87))
        sDirection = "NNE";
    if((iFacing >=  88) && (iFacing <=  92))
        sDirection = "N";
    if((iFacing >=  93) && (iFacing <= 135))
        sDirection = "NNW";
    if((iFacing >= 136) && (iFacing <= 177))
        sDirection = "WNW";
    if((iFacing >= 178) && (iFacing <= 182))
        sDirection = "W";
    if((iFacing >= 183) && (iFacing <= 225))
        sDirection = "WSW";
    if((iFacing >= 226) && (iFacing <= 267))
        sDirection = "SSW";
    if((iFacing >= 268) && (iFacing <= 272))
        sDirection = "S";
    if((iFacing >= 273) && (iFacing <= 315))
        sDirection = "SSE";
    if((iFacing >= 316) && (iFacing <= 358))
        sDirection = "ESE";
    SendMessageToPC(oTracker,GetName(oCritter)+" is to the "+sDirection);
    return ;
    }

y por ultimo creamos otro script llamado: hc_text_track

Código:
string STOPTRACKING = "Dejas de rastrear tu objetivo.";
string NOFOOTPRINTS = "No detectas que rastrear.";
string STARTTRACK = "Comienzas a rastrear: ";
string CONTTRACK = "Continuas rastreando: ";
string NOTPOSSIBLE = "Es imposible clasificar las huellas aqui.";
string DCFAIL = "No puedes distinguir huellas.";
string DCCONTFAIL = "Has perdido las huellas.";
string TRAILGONE = "Las huellas se paran aqui...";


Espero que os sirva ^^ si encuentro alguno mas voy añadiendo ;P

Editado by: Xiulito (Definición de Título) 08-08-2009
Volver arriba Ir abajo
Xiulito
Administrador/a
Administrador/a
Xiulito


Masculino
Edad : 44
Localización : Vivo aqui
Puntos de Actividad : 6815

Cantidad de envíos : 101
Fecha de inscripción : 22/03/2008

Nº. de Miembro : 1
Respeto por el Foro :
Scripts para el baul "Esposas y Rastreo" Left_bar_bleue100 / 100100 / 100Scripts para el baul "Esposas y Rastreo" Right_bar_bleue


Scripts para el baul "Esposas y Rastreo" Empty
MensajeTema: Re: Scripts para el baul "Esposas y Rastreo"   Scripts para el baul "Esposas y Rastreo" I_icon_minitimeDom 05 Abr 2009, 8:03 pm

Muy buenos scripts, los utilizare en mi modulo haber que tal funcionan, gracias por aportar al foro Jastro.

PDTA: Ya he desbloqueado el baúl para que podáis dejar vuestros scripts, muevo este allí.
Volver arriba Ir abajo
http://nwnforo.com
 
Scripts para el baul "Esposas y Rastreo"
Volver arriba 
Página 1 de 1.
 Temas similares
-
» Nuevo dominio para el Foro "www.nwnforo.com"
» "Muro invisible que impide el paso"
» "Cerrar puertas con llave durante la noche"

Permisos de este foro:No puedes responder a temas en este foro.
Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN :: NWToolSet (Aurora) :: Scripting NWN :: Baul de Scripts-
Cambiar a: