Aschbourne_PRC8/_module/nss/mk_inc_horse.nss

264 lines
9.2 KiB
Plaintext
Raw Permalink Normal View History

#include "mk_inc_debug"
#include "x3_inc_horse"
#include "mk_inc_ccoh_db"
#include "mk_inc_body"
#include "mk_inc_exec"
const string MK_VAR_CURRENT_HORSE = "MK_CurrentHorse";
const string MK_VAR_CURRENT_TAIL = "MK_CurrentTail";
const string MK_VAR_CURRENT_APPR = "MK_CurrentAppr";
const string MK_2DA_RIDE_PHENO = "mk_ride_pheno";
// const string MK_2DA_RIDE_HORSES = "mk_horses";
const string MK_SCRIPT_ON_MOUNT = "mk_on_mount";
const string MK_SCRIPT_ON_DISMOUNT = "mk_on_dismount";
const string MK_SCRIPT_ON_MOUNTED = "mk_on_mounted";
const string MK_SCRIPT_ON_DISMOUNTED = "mk_on_dismounted";
const int MK_HORSE_1 = 16;
const int MK_HORSE_2 = 29;
const int MK_HORSE_3 = 42;
const int MK_HORSE_4 = 55;
const int MK_HORSE_5 = 68;
// ----------------------------------------------------------------------------
// Initializes the horse selection for oCreature:
// - sets the phenotype to riding
// - sets the tail to the current horse or the starting horse of no
// current horse exists.
// ----------------------------------------------------------------------------
int MK_InitializeHorseSelection(object oCreature);
// ----------------------------------------------------------------------------
int MK_GetIsRiding(object oCreature);
// ----------------------------------------------------------------------------
int MK_PhenoTypeNormal2Ride(int nPhenoType);
// ----------------------------------------------------------------------------
int MK_PhenoTypeRide2Normal(int nPhenoType);
int MK_GetRidingAppearanceType(object oPC)
{
string sColumn = MK_GetRacialTypeAsString(oPC)+"_"+MK_GetGenderAsString(oPC);
string sApprType = Get2DAString("mk_ride_appr", sColumn, 0);
if (sApprType=="")
{
return -1;
}
return StringToInt(sApprType);
}
int MK_GetIsRiding(object oCreature)
{
int nResult;
switch (MK_HORSE_GetHorseSystem(oCreature))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
nResult = HorseGetIsMounted(oCreature);
break;
case MK_HORSE_CCOH_HORSE_SYSTEM:
{
int nPhenoType = GetPhenoType(oCreature);
int nPhenoTypeRide = MK_PhenoTypeNormal2Ride(nPhenoType);
int nPhenoTypeNormal = MK_PhenoTypeRide2Normal(nPhenoType);
nResult = ((nPhenoTypeRide==-1) && (nPhenoTypeNormal!=-1));
break;
}
}
return nResult;
}
int MK_GetIsNotRiding(object oCreature)
{
int nResult;
switch (MK_HORSE_GetHorseSystem(oCreature))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
nResult = !HorseGetIsMounted(oCreature);
break;
case MK_HORSE_CCOH_HORSE_SYSTEM:
{
int nPhenoType = GetPhenoType(oCreature);
int nPhenoTypeRide = MK_PhenoTypeNormal2Ride(nPhenoType);
int nPhenoTypeNormal = MK_PhenoTypeRide2Normal(nPhenoType);
nResult = ((nPhenoTypeRide!=-1) && (nPhenoTypeNormal==-1));
break;
}
}
return nResult;
}
int MK_PhenoTypeNormal2Ride(int nPhenoType)
{
string s = Get2DAString(MK_2DA_RIDE_PHENO, "Ride", nPhenoType);
return ( (s=="") ? -1 : StringToInt(s) );
}
int MK_PhenoTypeRide2Normal(int nPhenoType)
{
string s = Get2DAString(MK_2DA_RIDE_PHENO, "Normal", nPhenoType);
return ( (s=="") ? -1 : StringToInt(s) );
}
int MK_HORSE_ExecuteScript(string sScript, object oTarget, string sOverrideScript, int nDefault=0)
{
string sOScript = GetLocalString(GetModule(), sOverrideScript);
if (sOScript!="") sScript = sOScript;
return MK_EXEC_INT_ExecuteScript(sScript, oTarget, nDefault);
}
int MK_CreatureMountHorse(object oCreature, int nHorse)
{
// int nPhenoTypeNormal, nPhenoTypeRide, nTailType;
if (nHorse==0)
{
if (MK_GetIsRiding(oCreature))
{
if (MK_HORSE_ExecuteScript(MK_SCRIPT_ON_DISMOUNT, oCreature, "MK_SCRIPT_ON_DISMOUNT", TRUE))
{
switch (MK_HORSE_GetHorseSystem(oCreature))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
HorseInstantDismount(oCreature);
DeleteSkinInt(oCreature, "nX3_HorseAppearance");
break;
case MK_HORSE_CCOH_HORSE_SYSTEM:
{
// no horse selected and riding: unmount
string sIAStr = GetLocalString(oCreature, "MK_RIDING_PHENOTAIL_SAVE");
if (sIAStr!="")
{
DeleteLocalString(oCreature, "MK_RIDING_PHENOTAIL_SAVE");
MK_CCOH_DB_IAStrToBodyAppearance(oCreature, sIAStr, MK_CCOH_DB_BODY_APPR_HORSE);
}
else
{
int nPhenoTypeNormal = MK_PhenoTypeRide2Normal(GetPhenoType(oCreature));
int nTailType = GetLocalInt(oCreature, MK_VAR_CURRENT_TAIL);
int nApprType = GetLocalInt(oCreature, MK_VAR_CURRENT_APPR);
SetPhenoType(nPhenoTypeNormal, oCreature);
SetCreatureTailType(nTailType, oCreature);
SetCreatureAppearanceType(oCreature, nApprType);
}
break;
}
}
MK_HORSE_SetUsedHorseSystem(oCreature, 0);
MK_HORSE_ExecuteScript(MK_SCRIPT_ON_DISMOUNTED, oCreature, "MK_SCRIPT_ON_DISMOUNTED");
}
}
}
else if (nHorse>0)
{
if (MK_GetIsNotRiding(oCreature))
{
// we're not riding yet so change phenotype
if (MK_HORSE_ExecuteScript(MK_SCRIPT_ON_MOUNT, oCreature, "MK_SCRIPT_ON_MOUNT", TRUE))
{
switch (MK_HORSE_GetHorseSystem(oCreature))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
{
string s2DAFile = MK_HORSES_Get2DAFile();
string sResRef = Get2DAString(s2DAFile, "ResRef", nHorse);
HorseInstantMount(oCreature, nHorse, FALSE, sResRef);
int nAppearanceType = MK_Get2DAInt(s2DAFile, "Appearance", nHorse);
SetSkinInt(oCreature, "nX3_HorseAppearance", nAppearanceType);
MK_DEBUG_TRACE("SetSkinInt("+GetName(oCreature)+", \"nX3_HorseAppearance\", "+IntToString(nAppearanceType));
break;
}
case MK_HORSE_CCOH_HORSE_SYSTEM:
{
string sIAStr = MK_CCOH_DB_BodyAppearanceToIAStr(oCreature, MK_CCOH_DB_BODY_APPR_HORSE);
if (sIAStr!="")
{
SetLocalString(oCreature, "MK_RIDING_PHENOTAIL_SAVE", sIAStr);
}
else
{
SetLocalInt(oCreature, MK_VAR_CURRENT_TAIL, GetCreatureTailType(oCreature));
SetLocalInt(oCreature, MK_VAR_CURRENT_APPR, GetAppearanceType(oCreature));
}
int nPhenoTypeRide = MK_PhenoTypeNormal2Ride(GetPhenoType(oCreature));
if (nPhenoTypeRide!=-1)
{
SetPhenoType(nPhenoTypeRide, oCreature);
}
int nApprType = MK_GetRidingAppearanceType(oCreature);
if (nApprType!=-1)
{
SetCreatureAppearanceType(oCreature, nApprType);
}
SetFootstepType(FOOTSTEP_TYPE_HORSE, oCreature);
SetCreatureTailType(nHorse, oCreature);
break;
}
}
MK_HORSE_SetUsedHorseSystem(oCreature, MK_HORSE_GetHorseSystem(oCreature));
MK_HORSE_ExecuteScript(MK_SCRIPT_ON_MOUNTED, oCreature, "MK_SCRIPT_ON_MOUNTED");
}
}
else
{
SetCreatureTailType(nHorse, oCreature);
switch (MK_HORSE_GetHorseSystem(oCreature))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
{
string s2DAFile = MK_HORSES_Get2DAFile();
string sResRef = Get2DAString(s2DAFile, "ResRef", nHorse);
SetSkinString(oCreature, "sX3_HorseResRef", sResRef);
int nAppearanceType = MK_Get2DAInt(s2DAFile, "Appearance", nHorse);
SetSkinInt(oCreature, "nX3_HorseAppearance", nAppearanceType);
MK_DEBUG_TRACE("MK_CreatureMountHorse("+IntToString(nHorse)+"): sResRef="+sResRef+", nAppearanceType="+IntToString(nAppearanceType));
break;
}
}
}
}
return TRUE;
}
void MK_SetCustomTokenToHorseName(int nCustomTokenNumber, int nHorse)
{
string sHorseName = MK_GetHorseName(nHorse);
SetCustomToken(nCustomTokenNumber,
sHorseName + "(" + IntToString(nHorse) + ")");
}
int MK_InitializeHorseSelection(object oCreature)
{
int bIsRiding = MK_GetIsRiding(oCreature);
int nCurrentHorse = GetLocalInt(oCreature, MK_VAR_CURRENT_HORSE);
if (nCurrentHorse != 0)
{
MK_SetCustomTokenToHorseName(14440,nCurrentHorse);
}
MK_SetCustomTokenToHorseName(14441,MK_HORSE_1);
MK_SetCustomTokenToHorseName(14442,MK_HORSE_2);
MK_SetCustomTokenToHorseName(14443,MK_HORSE_3);
MK_SetCustomTokenToHorseName(14444,MK_HORSE_4);
MK_SetCustomTokenToHorseName(14445,MK_HORSE_5);
return TRUE;
}
/*
void main()
{
}
/**/