lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
|
Posté le : 21/02/2006 13:20:32 Sujet du message :
Bah c'est déjà fait en ce qui me concerne
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :int ly_day() { int iCTY = GetCalendarYear() ; int iCTM = GetCalendarMonth() ; int iCTD = GetCalendarDay() ; int iCDay = iCTY* 12* 28 + iCTM* 28 + iCTD ; return iCDay ; } int ly_time() { int iTH = GetTimeHour(); int iTM = GetTimeMinute(); int iTS = GetTimeSecond(); int iCTime = FloatToInt( HoursToSeconds( iTH)) + iTM* 60 + iTS ; return iCTime ; } void ly_grant_rest( object oPC) { SetLocalInt( oPC, "PC_LastRest", ly_time()- 540); SetLocalInt( oPC, "PC_LastDayRest", ly_day()); SetLocalInt( oPC, "DyingHP", - 1); SendMessageToPC( oPC, "Vous pouvez vous reposer pour recuperer." ) ; } void ly_anti_deco( object oPC) { if (! GetIsDM ( oPC)) { talent tFeat, tSpell; int nIndex, i, nTalentID; for ( nIndex= 1; nIndex< 1000; nIndex++) { tFeat = TalentFeat ( nIndex); tSpell = TalentSpell( nIndex); if ( GetIsTalentValid( tFeat)) { nTalentID = GetIdFromTalent( tFeat); for ( i= 1; i< 40; i++) { DecrementRemainingFeatUses( oPC, nTalentID); if (! GetHasFeat( nTalentID, oPC)) i = 40; } } if ( GetIsTalentValid( tSpell)) { nTalentID = GetIdFromTalent( tSpell); for ( i= 1; i< 40; i++) { DecrementRemainingSpellUses( oPC, nTalentID); if (! GetHasSpell( nTalentID, oPC)) i = 40; } } } SendMessageToPC( oPC, "Sorts et Dons desactives : vous devez vous reposez pour recuperer." ) ; } } Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :int MustHaveNoItem( object oPC, string sObjectTag) { int iNbItem= 0; object oItem = GetFirstItemInInventory( oPC); while( GetIsObjectValid( oItem) ){ if( GetTag( oItem) == sObjectTag ){ iNbItem += GetNumStackedItems( oItem); DestroyObject( oItem); } oItem = GetNextItemInInventory( oPC); } return iNbItem; } void CleanDeathCard( object oDead) { if( GetItemPossessedBy( oDead, "mortNODROP") != OBJECT_INVALID ){ MustHaveNoItem( oDead, "mortNODROP"); } } void CleanAgoCard( object oDead) { if( GetItemPossessedBy( oDead, "agoNODROP") != OBJECT_INVALID ){ MustHaveNoItem( oDead, "agoNODROP"); } } void GiveDeathCard( object oPC) { string sCarte = "mortNODROP", sRef = "mortnodrop" ; if( GetItemPossessedBy( oPC, sCarte) == OBJECT_INVALID ) CreateItemOnObject( sRef, oPC, 1); } void GiveAgoCard( object oPC) { string sCarte = "agoNODROP", sRef = "agonodrop" ; if( GetItemPossessedBy( oPC, sCarte) == OBJECT_INVALID ) CreateItemOnObject( sRef, oPC, 1); } int ChkDeathCard( object oPC) { int nCard = 0 ; if( GetItemPossessedBy( oPC, "mortNODROP") != OBJECT_INVALID ){ nCard = MustHaveNoItem( oPC, "mortNODROP"); } if( nCard> 0 ) ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDeath(), oPC); return nCard ; } int ChkAgoCard( object oPC) { int nCard = 0 ; if( GetItemPossessedBy( oPC, "agoNODROP") != OBJECT_INVALID ){ nCard = MustHaveNoItem( oPC, "agoNODROP"); } if( nCard> 0 ){ ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectMovementSpeedDecrease( 75), oPC, 60.0); ApplyEffectToObject( DURATION_TYPE_PERMANENT, EffectAbilityDecrease( ABILITY_CONSTITUTION, 1), oPC); } return nCard ; } void ChkAgoSpeed( object oPC) { if( GetItemPossessedBy( oPC, "agoNODROP") != OBJECT_INVALID ){ ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectMovementSpeedDecrease( 75), oPC, 60.0); } } Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "nw_i0_spells"#include "ly_lib_death"int nAgonie = 1; int nDEATHDOOR = - 9; float fDelai = 6.0; int nDCFort = 13; int nStab = 1; void LoopDying( object oDying) { if( GetLocalInt( oDying, "BLOKE_PC_MORT") == 1 ){ return ; } if( GetLocalInt( oDying, "BLOKE_PC_AGO")== 2 ){ return ; } int nPv= 0 ; int CurHP = GetCurrentHitPoints( oDying); int DyingHP = GetLocalInt( oDying, "DyingHP"); int nBonusCon = GetAbilityModifier( ABILITY_CONSTITUTION, oDying); int bAgo = ( GetLocalInt( oDying, "BLOKE_PC_AGO")== 1) ? TRUE : FALSE ; if ( CurHP<= 0) nPv = DyingHP; else nPv= CurHP; if( bAgo ){ if( nPv>= nDEATHDOOR ){ FloatingTextStringOnCreature( "Agonisant" , oDying); } else { effect eMort = EffectDeath( FALSE, FALSE); SpeakString( "Vous etes mort."); SetLocalInt( oDying, "DyingHP", - 1); DeleteLocalInt( oDying, "BLOKE_PC_AGO"); ApplyEffectToObject( DURATION_TYPE_INSTANT, eMort, oDying); return; } } else { if( nPv >= 0 ){ DeleteLocalInt( oDying, "DyingHP"); DeleteLocalInt( oDying, "BLOKE_PC_AGO"); SendMessageToPC( oDying, "Vous etes sauf.") ; if ( CurHP<= 0) { effect eStabilise = EffectHeal( 1- GetCurrentHitPoints( oDying)); ApplyEffectToObject( DURATION_TYPE_INSTANT, eStabilise, oDying); } PlayVoiceChat( VOICE_CHAT_LAUGH, oDying); AssignCommand( oDying, ClearAllActions()); CleanDeathCard( oDying); ChkAgoSpeed( oDying) ; effect eRaise = EffectResurrection() ; ApplyEffectToObject( DURATION_TYPE_INSTANT, eRaise, oDying); return; } else { SetLocalInt( oDying, "BLOKE_PC_AGO", 1); SendMessageToAllDMs( "Cas d'agonie bizarre : ajuste") ; } } nAgonie = ( nPv< 0) ? 1 : 0 ; SetLocalInt( oDying, "DyingHP", nPv- nAgonie); int nStvig = FortitudeSave( oDying, nDCFort, SAVING_THROW_TYPE_DIVINE); int nChanceStab; switch( nStvig) { case 0: nChanceStab = 11; break; case 1: nChanceStab = d10( 1); break; case 2: nChanceStab = 0; break; default: nChanceStab = 11; break; } if ( nChanceStab <= nStab) { if ( nPv< 0) SendMessageToPC( oDying, "Vous luttez pour survivre"); else SendMessageToPC( oDying, "Vous reprenez connaissance."); SetLocalInt( oDying, "BLOKE_PC_AGO", 0); SetLocalInt( oDying, "DyingHP", 0); if ( CurHP< 0) { effect eStabilise = EffectHeal(- CurHP); ApplyEffectToObject( DURATION_TYPE_INSTANT, eStabilise, oDying); } else ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectKnockdown(), oDying, 5.9); } else { if ( nPv< 0) { SendMessageToPC( oDying, "La mort approche."); if ( d3() == 1) PlayVoiceChat( VOICE_CHAT_NEARDEATH, oDying); } else { SetLocalInt( oDying, "DyingHP", 0); SetLocalInt( oDying, "BLOKE_PC_AGO", 0); ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectKnockdown(), oDying, 5.9); } } DelayCommand( fDelai, LoopDying( oDying)); } void CheckDying( object oDying) { if ( GetLocalInt( oDying, "BLOKE_PC_AGO")!= 0) return ; SetLocalInt( oDying, "BLOKE_PC_AGO", 1); GiveAgoCard( oDying) ; SetLocalInt( oDying, "DyingHP", - 1); if( GetLocalInt( oDying, "BLOKE_PC_MORT") == 1 ){ return ; } if ( GetCurrentHitPoints( oDying) <= - 10) { FloatingTextStringOnCreature( "Mort", oDying) ; ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDeath( FALSE, FALSE), oDying); return ; } GiveDeathCard( oDying) ; PlayVoiceChat( VOICE_CHAT_HEALME, oDying); AssignCommand( GetLastDamager( oDying), ClearAllActions( TRUE)); ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectEthereal(), oDying, fDelai); DelayCommand( fDelai, LoopDying( oDying)); } void main() { object oDying = GetLastPlayerDying(); DelayCommand( 2.0, CheckDying( oDying)) ; RemoveSpecificEffect( EFFECT_TYPE_POLYMORPH, oDying) ; } Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "ly_lib_death"void main() { object oDead = GetLastPlayerDied(); location lDead = GetLocation( oDead) ; object oKiller = GetLastKiller(); if( GetCurrentHitPoints( oDead) <= - 10 ){ SetLocalInt( oDead, "BLOKE_PC_MORT", 1); } else { SendMessageToPC( oDead, "OnDeath Event Bogus : exiting"); DeleteLocalInt( oDead, "BLOKE_PC_MORT"); return ; } SetLocalInt( oDead, "BLOKE_PC_AGO", 2); GiveDeathCard( oDead) ; if ( GetStandardFactionReputation( STANDARD_FACTION_COMMONER, oDead) < 50) { SetStandardFactionReputation( STANDARD_FACTION_COMMONER, 50, oDead); } if ( GetStandardFactionReputation( STANDARD_FACTION_MERCHANT, oDead) < 50) { SetStandardFactionReputation( STANDARD_FACTION_MERCHANT, 50, oDead); } if ( GetStandardFactionReputation( STANDARD_FACTION_DEFENDER, oDead) < 50) { SetStandardFactionReputation( STANDARD_FACTION_DEFENDER, 50, oDead); } ClearPersonalReputation( oDead, oKiller) ; ClearPersonalReputation( oKiller, oDead) ; object oTarget = GetFirstObjectInShape( SHAPE_SPHERE, 40.0f, lDead); while ( GetIsObjectValid( oTarget)) { if(! GetIsReactionTypeFriendly( oTarget)) { ClearPersonalReputation( oDead, oTarget) ; ClearPersonalReputation( oTarget, oDead) ; } oTarget = GetNextObjectInShape( SHAPE_SPHERE, 40.0f, lDead); } DelayCommand( 2.5, PopUpGUIPanel( oDead, GUI_PANEL_PLAYER_DEATH)); } Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.Spoiler :NWScript :#include "nw_i0_plot"#include "ly_lib_time"void main() { object oRespawner = GetLastRespawnButtonPresser(); ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectResurrection(), oRespawner); ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectHeal( GetMaxHitPoints( oRespawner)), oRespawner); RemoveEffects( oRespawner); DestroyObject( GetItemPossessedBy( oRespawner, "mortNODROP")); DeleteLocalInt( oRespawner, "BLOKE_PC_MORT"); DeleteLocalInt( oRespawner, "BLOKE_PC_AGO"); if ( GetHitDice( oRespawner)!= 1 ) { int nXP = GetXP( oRespawner); int nLvl ; int nPenalty = 50 * GetHitDice( oRespawner); int nHD = GetHitDice( oRespawner); int nMin = (( nHD * ( nHD - 1)) / 2) * 1000; int nNewXP = nXP - nPenalty; if ( nNewXP < nMin) { nNewXP = nMin; } nLvl= GetHitDice( oRespawner); if( nLvl> 3) { SetXP( oRespawner, nNewXP); int nGoldToTake = FloatToInt( 0.10 * GetGold( oRespawner)); if ( nGoldToTake > 50000) { nGoldToTake = 50000; } AssignCommand( oRespawner, TakeGoldFromCreature( nGoldToTake, oRespawner, TRUE)); DelayCommand( 4.0, FloatingTextStrRefOnCreature( 58299, oRespawner, FALSE)); DelayCommand( 4.8, FloatingTextStrRefOnCreature( 58300, oRespawner, FALSE)); } } object oSpawnPoint = GetObjectByTag( "NW_DEATH_TEMPLE"); AssignCommand( oRespawner, JumpToLocation( GetLocation( oSpawnPoint))); ly_grant_rest( oRespawner) ; } Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Note : il faut également modifier les sorts rappel à la vie et résurrection pour qu'ils suppriment la carte de mort (mortNODROP) et la carte d'agonie (agoNODROP)
|