//:://///////////////////////////////////////////// //:: 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(){}