Added CCOH and missing areas Changed some areas to be craftable, Fixed some on death issues, Fixed the Gaurd
436 lines
12 KiB
Plaintext
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(){}
|
|
|