Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] Allez directement en Prison, ne passez pas par la case départ
[Script] Allez directement en Prison, ne passez pas par la case départ
Par Daynos le 12/10/2002 à 17:06:34 (#2323253)
Allez directement en Prison, ne passez pas par la case départ
Voici un petit script anti-tueur de NPC
Mieux que de rendre les NPC invincible, mieux que les summons de guardes, mieux que l'instakill du PC qui attaque le NPC.
La Prison !
le but de ce script, est de téléporter le PC attaquant dans une Zone (et de préférence une prison).
Mettez le script suivant dans OnDamaged :
#include "NW_I0_GENERIC"
void main()
{
if (!GetFleeToExit())
{
if (!GetSpawnInCondition (NW_FLAG_SET_WARNINGS))
{
if (!GetIsObjectValid (GetAttemptedAttackTarget ()) && !GetIsObjectValid (GetAttemptedSpellTarget ()))
{
if (GetBehaviorState (NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior (GetLastDamager ());
}
else if (GetIsObjectValid (GetLastDamager ()))
{
DetermineCombatRound ();
if (!GetIsFighting (OBJECT_SELF))
{
object oTarget = GetLastDamager();
if (!GetObjectSeen(oTarget) && GetArea (OBJECT_SELF) == GetArea(oTarget))
{
ActionMoveToLocation (GetLocation (oTarget), TRUE);
ActionDoCommand (DetermineCombatRound ());
}
}
}
}
else if (!GetIsObjectValid (GetAttemptedSpellTarget ()))
{
object oTarget = GetAttackTarget();
object oAttacker = GetLastHostileActor();
if (GetIsObjectValid(oAttacker) && oTarget != oAttacker && GetIsEnemy(oAttacker) &&
(GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4) ||
(GetHitDice(oAttacker) - 2) > GetHitDice(oTarget) ) )
{
DetermineCombatRound (oAttacker);
}
}
}
}
if (GetSpawnInCondition (NW_FLAG_DAMAGED_EVENT))
{
SignalEvent (OBJECT_SELF, EventUserDefined (1006));
}
}
object oPC = GetLastAttacker();
if (GetIsPC(oPlayer))
{
SpeakString ("Allez hop, en taule !");
object oTarget = GetWaypointByTag ("wp_taule1");
int iRandom = Random(4);
if (iRandom==1)
{
object oTarget = GetWaypointByTag ("wp_taule1");
}
else if (iRandom==2)
{
object oTarget = GetWaypointByTag ("wp_taule2");
}
else if (iRandom==3)
{
object oTarget = GetWaypointByTag ("wp_taule3");
}
else
{
object oTarget = GetWaypointByTag ("wp_taule4");
}
DelayCommand(5.0, AssignCommand( oPC, JumpToObject( oTarget)));
}
}
Par eMRaistlin le 19/10/2002 à 23:33:07 (#2366198)
#include "NW_I0_GENERIC"
void main()
{
if (!GetFleeToExit())
{
if (!GetSpawnInCondition (NW_FLAG_SET_WARNINGS))
{
if (!GetIsObjectValid (GetAttemptedAttackTarget ()) && (!GetIsObjectValid (GetAttemptedSpellTarget ())))
{
if (GetBehaviorState (NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior (GetLastDamager ());
}
else if (GetIsObjectValid (GetLastDamager ()))
{
DetermineCombatRound ();
if (!GetIsFighting (OBJECT_SELF))
{
object oTarget = GetLastDamager();
if (!GetObjectSeen(oTarget) && GetArea (OBJECT_SELF) == GetArea(oTarget))
{
ActionMoveToLocation (GetLocation (oTarget), TRUE);
ActionDoCommand (DetermineCombatRound ());
}
}
}
}
else if (!GetIsObjectValid (GetAttemptedSpellTarget ()))
{
object oTarget = GetAttackTarget();
object oAttacker = GetLastHostileActor();
if (GetIsObjectValid(oAttacker) && oTarget != oAttacker && GetIsEnemy(oAttacker) &&(GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4) ||(GetHitDice(oAttacker) - 2) > GetHitDice(oTarget) ) )
{
DetermineCombatRound (oAttacker);
}
}
}
}
if (GetSpawnInCondition (NW_FLAG_DAMAGED_EVENT))
{
SignalEvent (OBJECT_SELF, EventUserDefined (1006));
}
object oPC=GetLastAttacker(OBJECT_SELF);
if (GetIsPC(oPC))
{
SpeakString ("Allez hop, en taule !");
object oTarget = GetWaypointByTag ("wp_taule1");
int iRandom = Random(4);
if (iRandom==1)
{
object oTarget = GetWaypointByTag ("wp_taule1");
}
else if (iRandom==2)
{
object oTarget = GetWaypointByTag ("wp_taule2");
}
else if (iRandom==3)
{
object oTarget = GetWaypointByTag ("wp_taule3");
}
else
{
object oTarget = GetWaypointByTag ("wp_taule4");
}
DelayCommand(5.0, AssignCommand( oPC, JumpToObject( oTarget)));
}
}
Par Zariel le 29/10/2002 à 0:14:19 (#2428604)
Ou dois-je mettre les "WP_taule" en question, dans la prison ? Sur le PNJ attaqué ?
:aide: J'adore ce script mais il m'a donné du fil à retordre toute la soirée. :sanglote:
Par Zariel le 29/10/2002 à 13:00:23 (#2431153)
Emraistlin, tu pourrais me filer un coup de main pour faire tourner ce script s'il te plait ? :rolleyes:
Par eMRaistlin le 29/10/2002 à 13:12:31 (#2431247)
Ou dois-je mettre les "WP_taule" en question, dans la prison ? Sur le PNJ attaqué ?
Par Nylou le 29/10/2002 à 13:41:46 (#2431524)
Personnellement je préfère le summon de guardes bien costaud qui arreteront l'agresseur et qui le téléporteront en prison si celui ci ne resiste pas bien sur.
Si l'agresseur du PNJ refuse d'aller en prison, tant pis pour lui. (mort + respawn en prison)
Si le NPC meurt, un grand pretre pourrait venir ressuciter le NPC (à gérer dans le ondeath du NPC).
Par Zariel le 29/10/2002 à 14:11:38 (#2431779)
Par LeProctophantasmiste le 29/10/2002 à 14:25:20 (#2431908)
#include "NW_I0_GENERIC"
void main()
{
if (!GetFleeToExit())
{
if (!GetSpawnInCondition (NW_FLAG_SET_WARNINGS))
{
if (!GetIsObjectValid (GetAttemptedAttackTarget ()) && (!GetIsObjectValid (GetAttemptedSpellTarget ())))
{
if (GetBehaviorState (NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior (GetLastDamager ());
}
else if (GetIsObjectValid (GetLastDamager ()))
{
DetermineCombatRound ();
if (!GetIsFighting (OBJECT_SELF))
{
object oTarget = GetLastDamager();
if (!GetObjectSeen(oTarget) && GetArea (OBJECT_SELF) == GetArea(oTarget))
{
ActionMoveToLocation (GetLocation (oTarget), TRUE);
ActionDoCommand (DetermineCombatRound ());
}
}
}
}
else if (!GetIsObjectValid (GetAttemptedSpellTarget ()))
{
object oTarget = GetAttackTarget();
object oAttacker = GetLastHostileActor();
if (GetIsObjectValid(oAttacker) && oTarget != oAttacker && GetIsEnemy(oAttacker) &&(GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4) ||(GetHitDice(oAttacker) - 2) > GetHitDice(oTarget) ) )
{
DetermineCombatRound (oAttacker);
}
}
}
}
if (GetSpawnInCondition (NW_FLAG_DAMAGED_EVENT))
{
SignalEvent (OBJECT_SELF, EventUserDefined (1006));
}
object oPC=GetLastDamager();
if (GetIsPC(oPC))
{
SpeakString ("Allez hop, en taule !");
object oTarget = GetWaypointByTag ("wp_taule1");
int iRandom = Random(4);
if (iRandom==1)
{
object oTarget = GetWaypointByTag ("wp_taule1");
}
else if (iRandom==2)
{
object oTarget = GetWaypointByTag ("wp_taule2");
}
else if (iRandom==3)
{
object oTarget = GetWaypointByTag ("wp_taule3");
}
else
{
object oTarget = GetWaypointByTag ("wp_taule4");
}
DelayCommand(5.0, AssignCommand( oPC, JumpToObject( oTarget)));
}
}
Par Zariel le 29/10/2002 à 15:06:48 (#2432259)
Par LeProctophantasmiste le 29/10/2002 à 15:37:39 (#2432496)
Par Zariel le 29/10/2002 à 19:59:05 (#2434981)
Je ne le ferais plus, promis
Par LeProctophantasmiste le 29/10/2002 à 20:38:14 (#2435299)
Par Zariel le 30/10/2002 à 7:47:43 (#2437667)
Merci bcp.
Par Etienne le 30/10/2002 à 8:49:30 (#2437817)
Provient du message de Zariel
c'est pour ca que j'essaie de trouver un moyen de linker les gardes si le script passe à la trappe ;)
Par coolstar le 30/10/2002 à 12:35:23 (#2439459)
Par Zariel le 26/12/2002 à 11:14:25 (#2880599)
J'utilise les HCR pour les règles sur la mort, pour ceux qui ne connaissent pas, le personnage est téléporté dans une zone dés qu'il meurt et ça jusqu'a la résurrection (si il y a) et si mon joueur essaie de se reconnecter et bien il revient automatiquement dans cette zone (normal, il est mort).
J'aimerai la même chose pour la prison, il est logique qu'un personnage qui s'est mal conduit ne puissent pas ressortir comme un charme de la taule sans caution ou quelque chose. Je ne sais pas par quoi passer pour effectuer cette manoeuvre.
Quelqu'un pourrait m'aider dans cette heureuse période de Noël ou tout le monde s'entraide ? :rolleyes:
allez hop en prison !
Par Jaha Effect le 28/1/2003 à 19:24:07 (#3120626)
void main()
{
SetIsDestroyable(FALSE);
object oPC=GetLastKiller();
location lLocation = GetLocation (OBJECT_SELF);
SpeakString ("A LA GARDE !!!");
CreateObject(OBJECT_TYPE_CREATURE, "mage", lLocation , FALSE);
AssignCommand(GetObjectByTag ("Mage"), ActionCastFakeSpellAtObject(SPELL_DOMINATE_PERSON, oPC));
AssignCommand(GetObjectByTag ("Mage"), ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_FNF_SUMMON_GATE), oPC, 2.0));
AssignCommand(GetObjectByTag ("Mage"), ActionSpeakString ("Vous irez moisire en prison pour ce meurtre"));
int iRandom = d4(1);
DelayCommand (7.0, AssignCommand( oPC, JumpToObject(GetWaypointByTag ("WP_taule"+IntToString(iRandom)))));
DelayCommand (15.0, DestroyObject(GetNearestObjectByTag("Mage")));
DelayCommand (15.0, DestroyObject(OBJECT_SELF));
}
Mon truc a moi (+IntToString ("nananèère..));
Par PesteLaMenace le 29/1/2003 à 14:05:31 (#3125622)
Cela simule le fait que quoi qu'on fasse il y aura toujours ou presque des gens pour aller se plaindre, une petite vieille a la fenètre, des gens pour entendre le raffut etc...
A partir d'un certain nombre de pts de crimes les autorités royales (gardes et assimilés) remarqueront le pj et lui demanderont de les suivre a la caserne. Si il vient tant mieux ce sera jugement rp sinon c'est la rixe et finissage en case prison (si il reste un garde debout). Il y a quelques (aura ils ne sont pas encore fait ceux la) chasseurs de tetes qui arpenteront le module a la recherche des gros persos a pts de crimes qui seront donc connu.
La difficultée de ce système est de trouver l'équilibre au niveau des pts de crimes. Par exemple tuer un garde si il y a un autre garde pas loin c'est evidemment prendre suffisemment de pts de crimes pour etre recherché par tous les gardes et les chasseurs de tetes.
Tuer un Noble meme tarif, tuer un cerf ou un vaux-rien dans le bas quartier n'inquietera personne, surtout pas l'autorité royale.....etc..etc...
Je n'ai pas encore testé ce système vu que le module que je prépare est....en préparation mais ce système devrait coller avec des objectifs rp.
Quand aux gardes d'un niveau hallucinant ou des pnjs contre lesquels il est impossible de faire quoi que ce soit je n'aime pas du tout, mais bien sur ca reste mon opinion en accord avec la facon dont je vois les choses, aucunement la bonne ou mauvaise facon de jouer.
Peste.
chitt question?
Par Eltannus le 2/2/2003 à 14:48:04 (#3154511)
quand le PJ est téléporter un prison, il faut l'empêcher d'utiliser sa pierre de rappel dans son inventaire.
Coment avez vous résolu ce pb?
Amicalement
Eltannus...in jail
Par Jaha Effect le 2/2/2003 à 22:05:12 (#3157288)
void main()
{
object oPC = GetEnteringObject ();
object oPierreadetruire = GetItemPossessedBy (oPC, "NW_IT_RECALL");
if (oPierreadetruire != OBJECT_INVALID)
{
DestroyObject (oPierreadetruire);
}
}
JOL Archives 1.0.1
@ JOL / JeuxOnLine