Ninfablanca28/12/2005 15:58:02Veamos, he creado una subraza (simples vampiros) y se supone que cuando estan expuestos a la luz del sol (como los drows más o menos) tiene que salir ardiendo (para esto quiero hacerle 1d6 daños divinos repetidas veces hasta que salga del area) Bueno, que más os puedo decir, todos sabemos lo que es un vampiro, así que lo más normal es que si se expone a la luz del sol se muera en pocos asaltos.Aqui pongo mi script para hacer la subraza situado en el OnClientEnter: //Subraza Vampira if ((sSubRaza == "Vampiro")) { //Si en el inventario del personaje ya habia objetos raciales, se los quita// object oPiel= GetItemInSlot(INVENTORY_SLOT_CARMOUR,oJugador); DestroyObject(oPiel); //Aqui ya ha terminado de quitarle todo object oPielVampiro = CreateItemOnObject("piel_vampiro", oJugador,1);//Te da la piel de los vampiros. AssignCommand(oJugador, ActionEquipItem(oPielVampiro, INVENTORY_SLOT_CARMOUR)); SendMessageToPC(oJugador,"Se te ha otorgado el don de los vampiros, condenados a la eterna oscuridad."); } //Fin de subraza. Si alguien save como hacerlo por favor, sed misericordiosos XD. Ninfablanca30/12/2005 17:01:36ju, debe ser complicado o largo porque nadie me cnt jajamviper30/12/2005 17:24:22Io esque de momento no me he metido a hacer subrazas, siempre me parecieron algo secundario... por tanto no creo poder ayudarte con esto.Ninfablanca30/12/2005 21:13:05Bueno, no pasa na, en si hacerlas es facil, pero no se como se detectan las zonas al aire libre y eso, así que miraré por ahí en algún sistema a ver si veo drows.31/12/2005 01:21:11Hay tienes una funcion que me cree yo para hacer lo de los drows, que s equeden ciegos al sol, espero que te sirva de algo, al menos la parte que mira si esta fuera al sol[code:1:c33672814f] //****************************************************************************** //* SSP_LatidoSistema //****************************************************************************** void SSP_LatidoSistema(object oPC) { if(GetIsDM(oPC)) return; object oArea = GetArea(oPC); string sSubraza = GetStringLowerCase(GetSubRace(oPC)); if (sSubraza == "drow" || sSubraza == "duergar") { if(GetIsDay() == TRUE ) { if(GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND && (GetIsAreaNatural(oArea) == AREA_NATURAL || GetIsAreaNatural(oArea) == AREA_ARTIFICIAL) && !GetIsAreaInterior(oArea)) { //El Drow se encuentra bajo la luz del sol SSP_AplicarPenalizadores(oPC); SSP_ContarSalidasSup(oPC); SetLocalInt(oPC, "SalidaSuperficie", 1); } } else if(GetIsNight() == TRUE) { if(GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND && (GetIsAreaNatural(oArea) == AREA_NATURAL || GetIsAreaNatural(oArea) == AREA_ARTIFICIAL) && !GetIsAreaInterior(oArea)) { //El Drow se encuentra en exteriores pero es de noche SSP_QuitarPenalizadores(oPC); SetLocalInt(oPC, "SalidaSuperficie", 0); } } if(GetIsAreaAboveGround(oArea) == AREA_UNDERGROUND && (GetIsAreaNatural(oArea) == AREA_NATURAL || GetIsAreaNatural(oArea) == AREA_ARTIFICIAL) && GetIsAreaInterior(oArea)) { //El Drow se encuentra en la oscuridad SSP_QuitarPenalizadores(oPC); } } } [/code:1:c33672814f] 31/12/2005 01:24:15Por cierto, lo ahs deponer en el OnHeartBeat del modulo, para que mire cada PJ, si es vampiro y si esta bajo el sol, el heartbeat se ejecuta aproximadamente cada 6 segundos, asi que puedes hacer que cada heartbeat les hada el daño divino ese.Bueno te dejo el script tambien del heartbeat de mi modulo, asi te ayudara un poco mas a revisar cada pj y a que no se ejecute infinitas veces que es uno de los problemas que puede dar. [code:1:7d0e99564f] #include "sistemas_ro_cfg" #include "ssp_inc" #include "sop_inc" #include "scb_inc" void main() { //Saltar si ya hay una rutina de latido en progreso if ((GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != 1)) { SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 1);//Bloqueo de la rutina object oPC = GetFirstPC(); int iVidaPJ; //solucion al mal funcionamiento del reloj k marca los ciclos dia/noche int iHoraActual = GetTimeHour(); int iMinutoActual = GetTimeMinute(); int iSegundoActual = GetTimeSecond(); int iMilisActual = GetTimeMillisecond(); int iHoraGuardada = GetLocalInt(GetModule(), "HoraGuardada"); if (iHoraActual != iHoraGuardada) { //SendMessageToPC(oPC, "***Actualizando el reloj del juego***"); SetTime(iHoraActual, iMinutoActual, iSegundoActual, iMilisActual+100); SetLocalInt(GetModule(), "HoraGuardada", iHoraActual); } //fin de la correcion while (GetIsObjectValid(oPC)) { //Sistema para evitar que salgan muertos y entren vivos. object oMuerte = OBJECT_INVALID; if(GetCurrentHitPoints(oPC) > 0) { oMuerte = GetItemPossessedBy(oPC, "Muerte"); if(GetIsObjectValid(oMuerte)) DestroyObject(oMuerte); } //Latido del Sistema de Subrazas por Pieles (SSP) SSP_LatidoSistema(oPC); //Latido del Sistema de Oficios por propiedades (SOP) SOP_LatidoSistema(oPC); //Sistema de comida y bebida SCB_LatidoSistema(oPC); // Sistema de persistencia de Sangre if(!GetIsDM(oPC)) { iVidaPJ = GetCurrentHitPoints(oPC); SetLocalInt(oPC, "sangrepj", iVidaPJ); } oPC = GetNextPC(); } SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 0);//Activado del latido } } [/code:1:7d0e99564f] Ninfablanca31/12/2005 03:39:40Muchisimas gracias Althor, es fácil que me sirva, ya que con eso me das las bases y lo que yo pido es más sencillo realmente, porque no se les aplica penalizadores o bonificaciones sino que si es de día y estan fuera se les hace el daño y ya ta. Ahora que sepa aplicarlo ya es otra historia jaja ^^Ninfablanca31/12/2005 05:41:46Juaps, me pierdo, lo de arriba del todo he de ponerlo en el OnHeartBeat? De ser así, donde lo situas respecto a la función de abajo (el void main).Por otro lado creo que cojo lo que necesito expresamente, que es la condicion de que este de día. Ninfablanca31/12/2005 06:10:36Puede ser algo así? Esque realmente aqui me pierdo totalmente, además con las horas que son ya no rigo bien (si esque algún día lo hice)void SSP_LatidoSistema(object oPC) { if(GetIsDM(oPC)) return; object oArea = GetArea(oPC); string sSubraza = GetStringLowerCase(GetSubRace(oPC)); if (sSubraza == "Vampiro") { if(GetIsDay() == TRUE ) { if(GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND && (GetIsAreaNatural(oArea) == AREA_NATURAL || GetIsAreaNatural(oArea) == AREA_ARTIFICIAL) && !GetIsAreaInterior(oArea)) { //El Vampiro se encuentra bajo la luz del sol effect eDamage = EffectDamage( 10, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_ENERGY ); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF); } } } } void main() { //Saltar si ya hay una rutina de latido en progreso if ((GetLocalInt(GetModule(), "LATIDO_EN_PROGRESO") != 1)) { SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 1);//Bloqueo de la rutina object oPC = GetFirstPC(); while (GetIsObjectValid(oPC)) { //Latido del Sistema de Subrazas por Pieles (Para el dammage de los vampiros) SSP_LatidoSistema(oPC); } SetLocalInt(GetModule(), "LATIDO_EN_PROGRESO", 0);//Activado del latido } } 31/12/2005 12:06:22Parece correcto lo unico que despues de//Latido del Sistema de Subrazas por Pieles (Para el dammage de los vampiros) SSP_LatidoSistema(oPC); tienes que poner oPC = GetNextPC(); sino te hace un bucle infinito y da el tipico error de demasiadas instrucciones. Ninfablanca31/12/2005 14:38:36Nuse, le agrego eso pero sigue sin tener ningún efecto, he comprobado la denominación de la subraza y eso y esta perfectamente, tendré que darle vueltas a ver que es lo que esta mal.31/12/2005 15:12:22ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF);deberia ser ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC); Para hacerso al jugador y no al modulo xD Ninfablanca31/12/2005 16:27:40Vale, probé con eso y de iwal modo no funcionaba, pero he redefinido la string que encuentra la subraza de esta forma y ahora funciona:[code:1:f53d4c930d]string sSubRaza = GetSubRace(oPC);[/code:1:f53d4c930d] 01/01/2006 23:20:51ah, claro XDDDstring sSubraza = GetStringLowerCase(GetSubRace(oPC)); if (sSubraza == "Vampiro") tenemos esto....uso la funcion GetStringLowerCase para que de igual como lo escriban siempre toma todo en minusculas, pero despues en if (sSubraza == "Vampiro") hay que ponerlo en minusculas sino nunca entra en el if if (sSubraza == "vampiro") Ninfablanca01/01/2006 23:47:59Ahmm... eso yo no lo sabía jeje, bueno, en ese caso lo volveré a poner del otro modo y reemplazaré también la del onenter, para que de lo mismo como lo scriban a la hora de elegir la subraza. |