Aschbourne_PRC8/_module/nss/gsc_include.nss
GetOffMyYarn 69879d6957 Areas and Fixes
Added CCOH and missing areas
Changed some areas to be craftable,
Fixed some on death issues,
Fixed the Gaurd
2024-08-30 11:38:44 -04:00

436 lines
12 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Gilean Sistema Cavalli
//:: FileName gsc_include
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/* Rideable Horse system made from
Ardemor Persistent World on http://ardemor.hgn.it
*/
//:://////////////////////////////////////////////
//:: Created By: Gilean
//:: Created On: 04.03.05
//:://////////////////////////////////////////////
const int SKILL_CAVALCARE = 27;
const int CD_CAVALCARE=24; //Tiro da effettuare per superare il disarcionamento
int nRiga2daCavalloUmano=1036;//Riga del 2da corrispondente al cavaliere umano
int nRiga2daCavalloElfo=1037;//Riga del 2da corrispondente al cavaliere elfo
int nRiga2daCavalloNano=1038;//Riga del 2da corrispondente al cavaliere nano
int nRiga2daCavalloGnomo=1039;//Riga del 2da corrispondente al cavaliere gnomo
int nRiga2daCavalloHalfling=1032;//Riga del 2da corrispondente al cavaliere gnomo
int nRiga2daCavalloOrco=1033;//Riga del 2da corrispondente al cavaliere mezz'orco
//Questa funzione ritorna il numero di 2da correlato alla razza che cavalca
int GSC_AssegnaCavalloARazza(object oPC);
//Questa funzione fa montare (o smontare) a cavallo oPC umano;
void GSC_SellaPG(object oPC,object oCavallo);
//Questa funzione controlla che oPCnon abbia gia' un cavallo
//evocato
void GSC_CreaCavallooPonyInStalla(object oPC,string sTagCavallo);
//Da porre nell'evento on activated item del modulo
void GSC_AttivaSella();
//Questa funzione risetta l'apparenza normale del cavallo e del pg
//la puoi porre in on client enter per far ritornare
//Cavallo e cavaliere separati
int GSC_SmontaDaCavallo(object oPC);
//Da porre in on client enter del modulo, fa tornare il PG
//con le fattezze normali
void GSC_OnClientEnter(object oPC);
//Ritorna TRUE se oCavallo e' il cavallo di oPC
int GSC_GetMasterOfHorse(object oPC,object oCavallo);
// Questa funzione posta in onCombatRoundEnd del mob
//Fa il check su disarcionare
void GSC_CheckDisarcionare(object oMob);
//La funzione da porre in on death del modulo
//Fa smontare il pg dalla sella e distrugge cavallo e cintura
void GSC_OnPGDeath(object oPC);
//LA funzione ritorna TRUE se oPC sta cavalcando una cavalcatura.
int GSC_IsPGRidingHorse(object oPC);
//Questa funzione posta nell'evento OnEquipItem del modulo
//fa si che oPC non equipaggi oggetti proibiti mentre cavalce
void GSC_OnEquipItem(object oPC,object ItemEquipped);
///////////////////////////////////////////////
int GSC_IsPGRidingHorse(object oPC)
///////////////////////////////////////////////
{
if(GetAppearanceType(oPC)==nRiga2daCavalloUmano || GetAppearanceType(oPC)==nRiga2daCavalloElfo ||GetAppearanceType(oPC)==nRiga2daCavalloNano ||GetAppearanceType(oPC)==nRiga2daCavalloGnomo || GetAppearanceType(oPC)==nRiga2daCavalloHalfling || GetAppearanceType(oPC)==nRiga2daCavalloOrco)
return TRUE;
else
return FALSE;
}
///////////////////////////////////////////////
int GSC_AssegnaCavalloARazza(object oPC)
///////////////////////////////////////////////
{
int nRace=GetRacialType(oPC);
switch(nRace)
{
case(RACIAL_TYPE_HUMAN):
return nRiga2daCavalloUmano;
break;
case(RACIAL_TYPE_HALFELF):
return nRiga2daCavalloUmano;
break;
case(RACIAL_TYPE_ELF):
return nRiga2daCavalloElfo;
break;
case(RACIAL_TYPE_DWARF):
return nRiga2daCavalloNano;
break;
case(RACIAL_TYPE_GNOME):
return nRiga2daCavalloGnomo;
break;
case(RACIAL_TYPE_HALFLING):
return nRiga2daCavalloHalfling;
break;
case(RACIAL_TYPE_HALFORC):
return nRiga2daCavalloOrco;
break;
default:
{
FloatingTextStringOnCreature("La tua razza non e' in grado di cavalcare",oPC,FALSE);
return 0;
}
}
return 0;
}
///////////////////////////////////////////////
int GSC_SmontaDaCavallo(object oPC)
///////////////////////////////////////////////
{
if(GetAppearanceType(oPC)==nRiga2daCavalloUmano)
{
SetCreatureAppearanceType(oPC,6);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_cavallo",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloElfo)
{
SetCreatureAppearanceType(oPC,1);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_cavallo",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloNano)
{
SetCreatureAppearanceType(oPC,0);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_pony",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloGnomo)
{
SetCreatureAppearanceType(oPC,2);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_pony",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloHalfling)
{
SetCreatureAppearanceType(oPC,3);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_pony",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloOrco)
{
SetCreatureAppearanceType(oPC,5);
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,"gsc_cavallo",GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
return TRUE;
}
else
{
//FloatingTextStringOnCreature("Per montare a cavallo parlaci",oPC,FALSE);
return FALSE;
}
}
///////////////////////////////////////////////
void GSC_SellaPG(object oPC,object oCavallo)
///////////////////////////////////////////////
{
int nRace=GetRacialType(oPC);
int NumeroRazza=GSC_AssegnaCavalloARazza(oPC);
int Continua=FALSE;
//Parte per smontare da cavallo
//GSC_SmontaDaCavallo(oPC);
//Parte per montare a cavallo
if(NumeroRazza!=0 && GetTag(oCavallo)=="gsc_cavallo" || GetTag(oCavallo)=="gsc_pony" && GetStringLowerCase(GetSubRace(oPC))!="minotauro")
{
if(GetDistanceBetween(oPC,oCavallo)<30.0 && GetHenchman(oPC)==oCavallo)
{
AssignCommand(oCavallo,SetIsDestroyable(TRUE,FALSE,FALSE));
DestroyObject(oCavallo);
SetCreatureAppearanceType(oPC,NumeroRazza);
}
}
else
if(GetHenchman(oPC)!=oCavallo)
{
FloatingTextStringOnCreature("Non puoi cavalcare questo cavallo poiche' non ti appartiene",oPC,FALSE);
}
else
if(GetStringLowerCase(GetSubRace(oPC))=="minotauro")
{
FloatingTextStringOnCreature("I minotauri non possono cavalcare",oPC,FALSE);
}
else
{
FloatingTextStringOnCreature("Devi essere piu' vicino per montare la sella",oPC,FALSE);
}
}
///////////////////////////////////////////////
void GSC_CreaCavallooPonyInStalla(object oPC,string sTagCavallo)
///////////////////////////////////////////////
{
int nMaxCavalli=GetMaxHenchmen();
int i;
for(i==1;i<=nMaxCavalli;i++)
{
if(GetTag(GetHenchman(oPC,i))==sTagCavallo)
{
//FloatingTextStringOnCreature("Hai gia' un cavallo",oPC,FALSE);
return;
}
}
object oCavallo=CreateObject(OBJECT_TYPE_CREATURE,sTagCavallo,GetLocation(oPC),TRUE);
SetLocalObject(oCavallo,"gsc_padrone",oPC);
AddHenchman(oPC,oCavallo);
}
///////////////////////////////////////////////
void GSC_AttivaSella()
///////////////////////////////////////////////
{
object oSella=GetItemActivated();
if(GetTag(oSella)=="gsc_sella")
{
object oPC=GetItemActivator();
if(GetLocalInt(GetArea(oPC),"stalla_var")==1)
{
GSC_SmontaDaCavallo(oPC);
object oCavallo=GetItemActivatedTarget();
int nRace=GetRacialType(oPC);
switch(nRace)
{
case(RACIAL_TYPE_HUMAN):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_cavallo");
break;
case(RACIAL_TYPE_HALFELF):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_cavallo");
break;
case(RACIAL_TYPE_ELF):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_cavallo");
break;
case(RACIAL_TYPE_DWARF):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_pony");
break;
case(RACIAL_TYPE_GNOME):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_pony");
break;
case(RACIAL_TYPE_HALFLING):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_pony");
break;
case(RACIAL_TYPE_HALFORC):
GSC_CreaCavallooPonyInStalla(oPC,"gsc_cavallo");
break;
default:
FloatingTextStringOnCreature("La tua razza non e' in grado di cavalcare",oPC,FALSE);
}
}
else
GSC_SmontaDaCavallo(oPC);
/*
if(GSC_SmontaDaCavallo(oPC)==FALSE && GetTag(GetItemActivatedTarget())=="gsc_cavallo" || GetTag(GetItemActivatedTarget())=="gsc_pony")
FloatingTextStringOnCreature("Per montare a cavallo parlaci",oPC,FALSE);
else
FloatingTextStringOnCreature("Puoi evocare il tuo cavallo solo in una stalla",oPC,FALSE);
*/
}//Fine if(GetTag(oSella)=="gsc_sella")
}
///////////////////////////////////////////////
void GSC_OnClientEnter(object oPC)
///////////////////////////////////////////////
{
if(GetAppearanceType(oPC)==nRiga2daCavalloUmano)
{
SetCreatureAppearanceType(oPC,6);
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloElfo)
{
SetCreatureAppearanceType(oPC,1);
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloNano)
{
SetCreatureAppearanceType(oPC,0);
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloGnomo)
{
SetCreatureAppearanceType(oPC,2);
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloHalfling)
{
SetCreatureAppearanceType(oPC,3);
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloElfo)
{
SetCreatureAppearanceType(oPC,5);
}
}
int GSC_GetMasterOfHorse(object oPC,object oCavallo)
{
int nMaxCavalli=GetMaxHenchmen();
int i;
for(i==1;i<=nMaxCavalli;i++)
{
if(GetHenchman(oPC,i)==oCavallo)
return TRUE;
}
return FALSE;
}
///////////////////////////////////////////////
void GSC_CheckDisarcionare(object oMob)
///////////////////////////////////////////////
{
object oPC=GetAttackTarget(oMob);
if(GetLastDamager(oPC)==oMob)
{
int PXScorsi=GetLocalInt(oPC,"gsc_px");
int nPXAttualiPC=GetCurrentHitPoints(oPC);
//SendMessageToPC(oPC,"Nome delPX attuali pari a "+IntToString(nPXAttualiPC)+" , PX storati="+IntToString(PXScorsi));
if(GSC_IsPGRidingHorse(oPC))
{
//Se sbaglia il tiro il pg cade da cavallo
if(nPXAttualiPC!=PXScorsi && PXScorsi!=0 && !GetIsSkillSuccessful(oPC,SKILL_CAVALCARE,CD_CAVALCARE))
{
SendMessageToPC(oPC,"Tiro su Cavalcare fallito,cadi da cavallo");
GSC_SmontaDaCavallo(oPC);
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,5.0));
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(10),oPC);
SetLocalInt(oPC,"gsc_px",nPXAttualiPC);
}
//Nel caso di primo attacco limitiamoci ad aggiornare la soglia
else
if(PXScorsi==0)
SetLocalInt(oPC,"gsc_px",nPXAttualiPC);
//Il pg non e' stato danneggiato quindi non facciamo check
//ma aggiorniamo la soglia
else
SetLocalInt(oPC,"gsc_px",nPXAttualiPC);
}
}
}
///////////////////////////////////////////////
void GSC_OnPGDeath(object oPC)
///////////////////////////////////////////////
{
if(GetAppearanceType(oPC)==nRiga2daCavalloUmano)
{
SetCreatureAppearanceType(oPC,6);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloElfo)
{
SetCreatureAppearanceType(oPC,1);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloNano)
{
SetCreatureAppearanceType(oPC,0);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloGnomo)
{
SetCreatureAppearanceType(oPC,2);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloHalfling)
{
SetCreatureAppearanceType(oPC,3);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else
if(GetAppearanceType(oPC)==nRiga2daCavalloElfo)
{
SetCreatureAppearanceType(oPC,5);
DestroyObject(GetItemPossessedBy(oPC,"gsc_sella"));
}
else return;
}
///////////////////////////////////////////////
void GSC_OnEquipItem(object oPC,object ItemEquipped)
///////////////////////////////////////////////
{
if(GSC_IsPGRidingHorse(oPC))
{
switch(GetBaseItemType(ItemEquipped))
{
case(BASE_ITEM_TOWERSHIELD):
DelayCommand(1.0,AssignCommand(oPC,ActionUnequipItem(ItemEquipped)));
FloatingTextStringOnCreature("Non puoi equipaggiare questo oggetto quando cavalchi",oPC,FALSE);
break;
//Continua qua con la lista oggetti non consentita
default:
return;
}//fine switch
}
}
//void main(){}