PWE_PRC8/_module/nss/ff_modhb_inc.nss
Jaysyn904 ee1dc35889 Initial Commit
Initial Commit
2025-04-03 10:29:41 -04:00

1682 lines
91 KiB
Plaintext
Raw Permalink Blame History

///*************************************
//* NWN-FF 4.0 (c) 2004 FastFrench *
//*************************************
// This file is licensed under the terms of the
// GNU GENERAL PUBLIC LICENSE (GPL) Version 2
// ********************
// ** ff_modhb_inc.nss **
// ********************
// ** include file used to process speech data
#include "ff_include"
// Commandes PC
const int CMD_ADMIN = 1;
const int CMD_ANIM1 = 2;
const int CMD_ANIM2 = 3;
const int CMD_INCLINE = 4;
const int CMD_ASSOIT = 5;
const int CMD_VOLE = 6;
const int CMD_SALUT = 7;
const int CMD_GAUCHE = 8;
const int CMD_DROITE = 9;
const int CMD_LIT = 10;
const int CMD_PAUSE2 = 11;
const int CMD_PAUSE1 = 12;
const int CMD_PAUSE3 = 13;
const int CMD_PAUSE4 = 14;
const int CMD_BONJOUR = 15;
const int CMD_RIT = 16;
const int CMD_DANCE = 17;
const int CMD_MORT = 18;
const int CMD_TROM = 19;
const int CMD_FATIGUE = 20;
const int CMD_PARLE = 21;
const int CMD_PARLE2 = 22;
const int CMD_PARLE3 = 23;
const int CMD_SPASMES = 24;
const int CMD_BOIT = 25;
const int CMD_PRIE = 26;
const int CMD_ECOUTE = 27;
const int CMD_MEDITE = 28;
const int CMD_AIDE = 29;
const int CMD_SUIT = 30;
const int CMD_FUIT = 31;
const int CMD_JOURNAL = 32;
const int CMD_STRIPTEASE = 34;
const int CMD_SEPENCHE = 35;
const int CMD_SEBAISSE = 36;
const int CMD_CONJURE = 37;
const int CMD_CONJURE2 = 38;
const int CMD_REGARDELOIN = 39;
const int CMD_ESQUIVE = 40;
const int CMD_EVITE = 41;
const int CMD_PROVOQUE = 42;
const int CMD_VICTOIRE = 43;
const int CMD_VICTOIRE2 = 44;
const int CMD_VICTOIRE3 = 45;
const int CMD_PAUSE = 46;
const int CMD_VICTOIRE1 = 47;
const int CMD_CONJURE1 = 48;
const int CMD_MEGASPY = 49;
const int CMD_CHANTE = 51;
const int CMD_RONFLE = 52;
const int CMD_SIFFLE = 53;
const int CMD_ACCLAME = 54;
const int CMD_ETERNUE = 55;
const int CMD_GROGNE = 56;
const int CMD_GEMIT = 57;
const int CMD_PLEURE = 58;
const int CMD_CRIT = 59;
const int CMD_SERVEUR = 60;
// Commande Anim
const int CMD_VIVANT = 100;
const int CMD_INVISIBLE = 101;
const int CMD_RAPIDE = 102;
const int CMD_VISIBLE = 103;
const int CMD_BOUCLIER = 104;
const int CMD_MINOR_POLYMORPH = 106;
const int CMD_REGEN = 107;
const int CMD_SETPOS = 108;
const int CMD_RECALL = 109;
const int CMD_DOUE = 110;
const int CMD_ETHERAL = 111;
const int CMD_NORMAL = 112;
const int CMD_BOOST = 113;
// Commande Anim Snr
const int CMD_FAUBOURG = 200;
const int CMD_MARSEILLE = 201;
const int CMD_PAIX = 204;
const int CMD_RESU = 205;
const int CMD_BIEN = 206;
const int CMD_MAL = 207;
const int CMD_POLYMORPH = 208;
const int CMD_MAJOR_POLYMORPH = 209;
const int CMD_VAMPIREQG = 210;
const int CMD_KARAK = 211;
const int CMD_GB = 212;
// Commande DM
// Commande Admin
const int CMD_AMOUR = 400;
const int CMD_HAINE = 401;
const int CMD_TEST1 = 402;
const int CMD_TEST2 = 403;
const int CMD_TEST3 = 404;
const int CMD_DISPELDM = 405;
const int CMD_DM = 406;
void MagicMoveTo(object oPC, object oCible)
{
//AssignCommand(oPC,JumpToObject(oWP));
AssignCommand(oPC,ClearAllActions(TRUE));
effect eDi = EffectDisappear();
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDi,oPC);
AssignCommand(oPC,DelayCommand(3.0,JumpToLocation(GetLocation(oCible))));
}
void InitSpeech()
{
object oSpeech = GetWaypointByTag("NWN_Speech");
SetLocalString(oSpeech, "NWNX!FFSPEECH!VERSION", "xxxxxxxxxxxxxxxxxxxxxxxx");
string sVersion = GetLocalString(oSpeech, "NWNX!FFSPEECH!VERSION");
if (sVersion=="xxxxxxxxxxxxxxxxxxxxxxxx")
WriteTimestampedLogEntry("NWNx_FFSpeech.dll NOT LOADED !!");
else
{
WriteTimestampedLogEntry("NWNx_FFSpeech.dll version "+sVersion+" LOADED !!");
SetLocalInt(oSpeech, "GUsingSpeech", 1);
}
SetLocalString(oSpeech, "NWNX!FFSPEECH!FILTER", "*");
SetLocalString(oSpeech, "NWNX!FFSPEECH!DEADCANSPEAK", IntToString(FF_SPEECH_DEADCANSPEAK));
SetLocalString(oSpeech, "NWNX!FFSPEECH!INCLUDECHANNEL", IntToString(FF_SPEECH_GETCHANNEL));
SetLocalString(oSpeech, "NWNX!FFSPEECH!INCLUDEIP", IntToString(FF_SPEECH_GETIP));
SetLocalString(oSpeech, "Anim1", ff_GetPersistentString("GAnim1", "global", "FF ANIMATOR"));
SetLocalString(oSpeech, "Anim2", ff_GetPersistentString("GAnim2", "global", "FF ANIMATOR LDR"));
SetLocalInt(oSpeech, "THIS IS A SECRET KEY SENTENCE" , CMD_ADMIN );
SetLocalInt(oSpeech, GetLocalString(oSpeech, "Anim1") , CMD_ANIM1 );
SetLocalInt(oSpeech, GetLocalString(oSpeech, "Anim2") , CMD_ANIM2 );
SetLocalInt(oSpeech, "S'INCLINE" , CMD_INCLINE );
SetLocalInt(oSpeech, "BOW" , CMD_INCLINE );
SetLocalInt(oSpeech, "BOWS" , CMD_INCLINE );
SetLocalInt(oSpeech, "S'ASSOIT" , CMD_ASSOIT );
SetLocalInt(oSpeech, "SITS DOWN" , CMD_ASSOIT );
SetLocalInt(oSpeech, "SIT DOWN" , CMD_ASSOIT );
SetLocalInt(oSpeech, "SIT" , CMD_ASSOIT );
SetLocalInt(oSpeech, "VOLE" , CMD_VOLE );
SetLocalInt(oSpeech, "PICKPOCKET" , CMD_VOLE );
SetLocalInt(oSpeech, "STEAL" , CMD_VOLE );
SetLocalInt(oSpeech, "STEALS" , CMD_VOLE );
SetLocalInt(oSpeech, "SALUT" , CMD_SALUT );
SetLocalInt(oSpeech, "HELLO" , CMD_SALUT );
SetLocalInt(oSpeech, "GAUCHE" , CMD_GAUCHE );
SetLocalInt(oSpeech, "LEFT" , CMD_GAUCHE );
SetLocalInt(oSpeech, "DROITE" , CMD_DROITE );
SetLocalInt(oSpeech, "RIGHT" , CMD_DROITE );
SetLocalInt(oSpeech, "LIT" , CMD_LIT );
SetLocalInt(oSpeech, "READS" , CMD_LIT );
SetLocalInt(oSpeech, "READ" , CMD_LIT );
SetLocalInt(oSpeech, "PAUSE" , CMD_PAUSE );
SetLocalInt(oSpeech, "S'ENNUIE" , CMD_PAUSE2 );
SetLocalInt(oSpeech, "SE GRATTE LA TETE" , CMD_PAUSE1 );
SetLocalInt(oSpeech, "SCRATCHS HIS HEAD" , CMD_PAUSE1 );
SetLocalInt(oSpeech, "PAUSE2" , CMD_PAUSE3 );
SetLocalInt(oSpeech, "ATTEND" , CMD_PAUSE4 );
SetLocalInt(oSpeech, "WAIT" , CMD_PAUSE4 );
SetLocalInt(oSpeech, "WAITS" , CMD_PAUSE4 );
SetLocalInt(oSpeech, "BONJOUR" , CMD_BONJOUR );
SetLocalInt(oSpeech, "RIT" , CMD_RIT );
SetLocalInt(oSpeech, "LAUGH" , CMD_RIT );
SetLocalInt(oSpeech, "LAUGHS" , CMD_RIT );
SetLocalInt(oSpeech, "LOL" , CMD_RIT );
SetLocalInt(oSpeech, "DANCE" , CMD_DANCE );
SetLocalInt(oSpeech, "DANCES" , CMD_DANCE );
SetLocalInt(oSpeech, "MORT" , CMD_MORT );
SetLocalInt(oSpeech, "DEAD" , CMD_MORT );
SetLocalInt(oSpeech, "TROM" , CMD_TROM );
SetLocalInt(oSpeech, "DAED" , CMD_TROM );
SetLocalInt(oSpeech, "FATIGUE" , CMD_FATIGUE );
SetLocalInt(oSpeech, "TIRED" , CMD_FATIGUE );
SetLocalInt(oSpeech, "PARLE" , CMD_PARLE );
SetLocalInt(oSpeech, "SPEAK" , CMD_PARLE );
SetLocalInt(oSpeech, "SPEAKS" , CMD_PARLE );
SetLocalInt(oSpeech, "PLAIDE" , CMD_PARLE2 );
SetLocalInt(oSpeech, "PARLE AVEC FORCE" , CMD_PARLE3 );
SetLocalInt(oSpeech, "SPASMES" , CMD_SPASMES );
SetLocalInt(oSpeech, "BOIT" , CMD_BOIT );
SetLocalInt(oSpeech, "DRINK" , CMD_BOIT );
SetLocalInt(oSpeech, "DRINKS" , CMD_BOIT );
SetLocalInt(oSpeech, "PRIE" , CMD_PRIE );
SetLocalInt(oSpeech, "PRAY" , CMD_PRIE );
SetLocalInt(oSpeech, "ECOUTE" , CMD_ECOUTE );
SetLocalInt(oSpeech, "LISTEN" , CMD_ECOUTE );
SetLocalInt(oSpeech, "LISTENS" , CMD_ECOUTE );
SetLocalInt(oSpeech, "MEDITE" , CMD_MEDITE );
SetLocalInt(oSpeech, "AIDE" , CMD_AIDE );
SetLocalInt(oSpeech, "HELP" , CMD_AIDE );
SetLocalInt(oSpeech, "SOS" , CMD_AIDE );
SetLocalInt(oSpeech, "SUIT" , CMD_SUIT );
SetLocalInt(oSpeech, "FOLLOW" , CMD_SUIT );
SetLocalInt(oSpeech, "FOLLOWS" , CMD_SUIT );
SetLocalInt(oSpeech, "FUIT" , CMD_FUIT );
SetLocalInt(oSpeech, "FLEE" , CMD_FUIT );
SetLocalInt(oSpeech, "FLEES" , CMD_FUIT );
SetLocalInt(oSpeech, "JOURNAL" , CMD_JOURNAL );
SetLocalInt(oSpeech, "STRIP-TEASE" , CMD_STRIPTEASE );
SetLocalInt(oSpeech, "SE PENCHE" , CMD_SEPENCHE );
SetLocalInt(oSpeech, "SE BAISSE" , CMD_SEBAISSE );
SetLocalInt(oSpeech, "CONJURE1" , CMD_CONJURE1 );
SetLocalInt(oSpeech, "CONJURE2" , CMD_CONJURE2 );
SetLocalInt(oSpeech, "REGARDE AU LOIN" , CMD_REGARDELOIN );
SetLocalInt(oSpeech, "ESQUIVE" , CMD_ESQUIVE );
SetLocalInt(oSpeech, "DODGE" , CMD_ESQUIVE );
SetLocalInt(oSpeech, "DODGES" , CMD_ESQUIVE );
SetLocalInt(oSpeech, "EVITE" , CMD_EVITE );
SetLocalInt(oSpeech, "AVOID" , CMD_EVITE );
SetLocalInt(oSpeech, "AVOIDS" , CMD_EVITE );
SetLocalInt(oSpeech, "PROVOQUE" , CMD_PROVOQUE );
SetLocalInt(oSpeech, "VICTOIRE" , CMD_VICTOIRE );
SetLocalInt(oSpeech, "VICTOIRE1" , CMD_VICTOIRE2 );
SetLocalInt(oSpeech, "VICTOIRE2" , CMD_VICTOIRE2 );
SetLocalInt(oSpeech, "VICTOIRE3" , CMD_VICTOIRE3 );
SetLocalInt(oSpeech, "VICTORY" , CMD_VICTOIRE );
SetLocalInt(oSpeech, "VICTORY1" , CMD_VICTOIRE2 );
SetLocalInt(oSpeech, "VICTORY2" , CMD_VICTOIRE2 );
SetLocalInt(oSpeech, "VICTORY3" , CMD_VICTOIRE3 );
SetLocalInt(oSpeech, "CONJURE" , CMD_CONJURE );
SetLocalInt(oSpeech, "MEGASPY" , CMD_MEGASPY );
SetLocalInt(oSpeech, "CHANTE" , CMD_CHANTE );
SetLocalInt(oSpeech, "SING" , CMD_CHANTE );
SetLocalInt(oSpeech, "SINGS" , CMD_CHANTE );
SetLocalInt(oSpeech, "RONFLE" , CMD_RONFLE );
SetLocalInt(oSpeech, "SIFFLE" , CMD_SIFFLE );
SetLocalInt(oSpeech, "ACCLAME" , CMD_ACCLAME );
SetLocalInt(oSpeech, "ETERNUE" , CMD_ETERNUE );
SetLocalInt(oSpeech, "GROGNE" , CMD_GROGNE );
SetLocalInt(oSpeech, "GEMIT" , CMD_GEMIT );
SetLocalInt(oSpeech, "PLEURE" , CMD_PLEURE );
SetLocalInt(oSpeech, "CRY" , CMD_PLEURE );
SetLocalInt(oSpeech, "CRIES" , CMD_PLEURE );
SetLocalInt(oSpeech, "CRIT" , CMD_CRIT );
SetLocalInt(oSpeech, "SERVEUR" , CMD_SERVEUR );
SetLocalInt(oSpeech, "SERVER" , CMD_SERVEUR );
SetLocalInt(oSpeech, "INVISIBLE" , CMD_INVISIBLE );
SetLocalInt(oSpeech, "NORMAL" , CMD_NORMAL );
SetLocalInt(oSpeech, "ETHERAL" , CMD_ETHERAL );
SetLocalInt(oSpeech, "DOUE" , CMD_DOUE );
SetLocalInt(oSpeech, "SETPOS" , CMD_SETPOS );
SetLocalInt(oSpeech, "RECALL" , CMD_RECALL );
SetLocalInt(oSpeech, "REGEN" , CMD_REGEN );
SetLocalInt(oSpeech, "POLYMORPH" , CMD_POLYMORPH );
SetLocalInt(oSpeech, "MINOR POLYMORPH" , CMD_MINOR_POLYMORPH );
SetLocalInt(oSpeech, "MAJOR POLYMORPH" , CMD_MAJOR_POLYMORPH );
SetLocalInt(oSpeech, "VIVANT" , CMD_VIVANT );
SetLocalInt(oSpeech, "ALIVE" , CMD_VIVANT );
SetLocalInt(oSpeech, "RAPIDE" , CMD_RAPIDE );
SetLocalInt(oSpeech, "FAST" , CMD_RAPIDE );
SetLocalInt(oSpeech, "VISIBLE" , CMD_VISIBLE );
SetLocalInt(oSpeech, "BOUCLIER" , CMD_BOUCLIER );
SetLocalInt(oSpeech, "SHIELD" , CMD_BOUCLIER );
SetLocalInt(oSpeech, "PAIX" , CMD_PAIX );
SetLocalInt(oSpeech, "PEACE" , CMD_PAIX );
SetLocalInt(oSpeech, "RESU" , CMD_RESU );
SetLocalInt(oSpeech, "BIEN" , CMD_BIEN );
SetLocalInt(oSpeech, "GOOD" , CMD_BIEN );
SetLocalInt(oSpeech, "MAL" , CMD_MAL );
SetLocalInt(oSpeech, "EVIL" , CMD_MAL );
SetLocalInt(oSpeech, "AMOUR" , CMD_AMOUR );
SetLocalInt(oSpeech, "LOVE" , CMD_AMOUR );
SetLocalInt(oSpeech, "HAINE" , CMD_HAINE );
SetLocalInt(oSpeech, "HATE" , CMD_HAINE );
SetLocalInt(oSpeech, "TEST1" , CMD_TEST1 );
SetLocalInt(oSpeech, "TEST2" , CMD_TEST2 );
SetLocalInt(oSpeech, "TEST3" , CMD_TEST3 );
SetLocalInt(oSpeech, "GB" , CMD_GB );
SetLocalInt(oSpeech, "BOOST" , CMD_BOOST );
SetLocalInt(oSpeech, "DISPELDM" , CMD_DISPELDM );
SetLocalInt(oSpeech, "DM" , CMD_DM );
}
void GoodEffect(object oAfPC, object oPC, int iLevel) // 0: effets visuels 1: soin et effet visuel, 2: plus resu, 3: plus effets
{
if (iLevel>1)
if (GetIsDead(oAfPC))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oAfPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_RAISE_DEAD), oAfPC);
ff_FlushData(oAfPC);
DeleteLocalObject(oAfPC, "LastBadPK");
WriteTimestampedLogEntry("> (DM)"+GetName(oPC)+" ressuscite "+GetName(oAfPC));
}
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HEALING_X),oAfPC);
if (iLevel>0)
{
int iMaxHP = GetMaxHitPoints(oAfPC);
int iCurrentHP = GetCurrentHitPoints(oAfPC);
if (iMaxHP != 0 && iMaxHP!=iCurrentHP)
{
int iDamage = iMaxHP-iCurrentHP;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iDamage),oAfPC);
if (!GetIsInCombat(oAfPC))
AssignCommand(oAfPC, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 1.0, 10.0));
}
}
if (iLevel>2)
{
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAttackIncrease(Random(8)+1),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageIncrease(Random(8)+1,DAMAGE_TYPE_DIVINE),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACIncrease(Random(8)+1),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedIncrease(Random(100)),oAfPC, 10.0+Random(60)*Random(5));
}
}
void BadEffect(object oAfPC, object oPC, int iLevel) // 0/1: juste anim et effet visual, 2: degats, 3: degats et effets
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY),oAfPC);
AssignCommand(oAfPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK, 1.0, 3.0));
if (iLevel>2)
{
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDisease(Random(DISEASE_VERMIN_MADNESS+1)),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectPoison(Random(POISON_IRON_GOLEM+1)),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectConfused(),oAfPC, 10.0+Random(60));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCurse(Random(5),Random(5),Random(5),Random(5),Random(5),Random(5)),oAfPC, 10.0+Random(60)*Random(5));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedDecrease(Random(100)),oAfPC, 10.0+Random(80));
if (Random(3)==0)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(Random(8)+1),oAfPC, 10.0+Random(60)*Random(5));
}
if (iLevel>1)
{
int iCurrentHP = GetCurrentHitPoints(oAfPC);
if (iCurrentHP>1)
{
int iDamage = Random(iCurrentHP);
ApplyEffectToObject(DURATION_TYPE_INSTANT,SupernaturalEffect(EffectDamage(iDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE)),oAfPC);
}
}
}
void CreateAndSend(object oPC, string sName, string sMsg)
{
object oPigeon = CreateObject(OBJECT_TYPE_CREATURE, "ff_pigeon2", GetLocation(oPC), TRUE);
AssignCommand(oPigeon,SetIsDestroyable(TRUE, FALSE, FALSE));
effect ef = EffectDisappear();
DelayCommand(3.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,ef,oPigeon));
SQLExecDirect("SELECT Id,Actif FROM idplayer WHERE Name='"+SQLEncodeSpecialChars(sName)+"' AND Ban=0 LIMIT 1");
string sDest = sName;
if (SQLLocalFetch()!=SQL_SUCCESS)
{
SQLExecDirect("SELECT Name,Id,Actif FROM idplayer WHERE Name RLIKE '"+SQLEncodeSpecialChars(sName)+"' AND Ban=0 LIMIT 1");
if (SQLLocalFetch()!=SQL_SUCCESS)
{
SendMessageToPC(oPC,"Il n'y a aucun personnage actif du nom de "+sName+" dans ce monde: votre pigeon part a l'aveuglette");
DelayCommand(7.0, DestroyObject(oPigeon));
return;
}
else
{
sDest = SQLDecodeSpecialChars(SQLLocalEatData());
SendMessageToPC(oPC,"Le pigeon ira remettre ce message a '"+sDest+"' (et non '"+sName+"' qui n'existe pas)");
}
}
string Id = SQLLocalEatData();
string sMesFin = "[g]"+GetName(oPC)+"[dg] vous <20>crit '[w]"+sMsg+"[dg]'";
if (SQLLocalEatDataInt()==1)
{
object oDest=GetFirstPC();
while (oDest!=OBJECT_INVALID)
{
if (GetLocalString(oDest, "PWId")==Id)
{
//SendPigeonToPC(oDest, sMesFin);
SendMessageToAllDMs(GetName(oPC)+" send to "+sDest+" the following message: '"+ff_Colorize(sMesFin)+"'");
SendMessageToPC(oPC,"The pigeon reaches its destination and gives his message "+sDest);
SendMessageToPC(oDest,"A pigeon just arrived and gives you the following message:\n"+ff_Colorize(sMesFin));
object oPig2 = CreateObject(OBJECT_TYPE_CREATURE, "ff_pigeon2", GetLocation(oDest), TRUE);
AssignCommand(oPig2,SetIsDestroyable(TRUE, FALSE, FALSE));
//AssignCommand(oPig2, DelayCommand(6.0, SpeakString(Colorize(sMesFin))));
CreateItemOnObject("ff_pigeonobj",oDest);
DestroyObject(oPig2,10.0);
DestroyObject(oPigeon,15.0);
return;
}
oDest = GetNextPC();
}
}
// string sId = GetLocalString(oPlayer, "PWId");
SQLExecDirect("INSERT INTO logactions (Id,Action,OnlyOnce,DelayFromLoad,Value1,Date) VALUES("+Id+",'MESSAGE',1,20,'"+SQLEncodeSpecialChars(sMesFin)+"',NOW())");// Actions a etendre a tous les joueurs actifs
SendMessageToPC(oPC,"Le pigeon ne parvient pas a trouver le destinataire du message, il continuera a le chercher jusqu'a ce qu'il trouve "+sDest);
SendMessageToAllDMs(GetName(oPC)+" a envoye a "+sDest+" le message suivant: '"+sMesFin+"'. Ce message est stocke dans la base de donnees pour quand il se connectera.");
DelayCommand(15.0, DestroyObject(oPigeon));
//AssignCommand(oPC,ActionDoCommand(DestroyObject(oPigeon)));
}
void subloop(object oSpeech, int bUsingSpeech);
void boucle()
{
object oSpeech=GetWaypointByTag("NWN_Speech");
int bUsingSpeech = GetLocalInt(oSpeech, "GUsingSpeech");
if (bUsingSpeech == 0) return;
bUsingSpeech++;
SetLocalInt(oSpeech, "GUsingSpeech", bUsingSpeech);
subloop(oSpeech, bUsingSpeech);
}
void subloop(object oSpeech, int bUsingSpeech)
{
if (GetLocalInt(oSpeech, "GUsingSpeech") != bUsingSpeech) return;
SetLocalString(oSpeech, "NWNX!FFSPEECH!HASSPEECH", "0");
if (GetLocalString(oSpeech, "NWNX!FFSPEECH!HASSPEECH")=="0") {DelayCommand(0.2, subloop(oSpeech, bUsingSpeech));return;}
string sBuf = GetLocalString(GetNWNMySQLWP(), "NWNX!ODBC!SPACER");
SetLocalString(oSpeech, "NWNX!FFSPEECH!GETSPEECH", sBuf);
LOCAL_BUFFER = GetLocalString(oSpeech, "NWNX!FFSPEECH!GETSPEECH");
int Nb=0;
object oPC;
string sExtract;
while (GetStringLength(LOCAL_BUFFER)>2)
{
string sName = SQLLocalEatData(); // Not really SQL data, but the string has the same format
int iCanal = SPEECHVOLUME_INVALID; //
string sIP="127.0.0.1";
if (FF_SPEECH_GETIP)
sIP = SQLLocalEatData();
if (FF_SPEECH_GETCHANNEL) // Channel needed
iCanal = SQLLocalEatDataInt();
string sSpeech = SQLLocalEatData(); // Not really SQL data, but the string has the same format
Nb++;
int bFound = FALSE;
effect ef;
oPC = GetLocalObject(oSpeech,sName);
if (oPC == OBJECT_INVALID)
{
if (FF_SPEECH_GETIP && (GetLocalObject(oSpeech,sIP)!=OBJECT_INVALID) )
oPC = GetLocalObject(oSpeech,sIP);
else
{
WriteTimestampedLogEntry("Name='"+sName+"' => aucun objet associe (sSpeech='"+sSpeech+"')");
continue;
}
}
int iLVPlayer = GetLocalInt(oPC, "DM_STATUS");
if (iLVPlayer==0)
{
WriteTimestampedLogEntry("Name='"+sName+"', sSpeech='"+sSpeech+"' => iLVPlayer=0) - Name(oPC): "+GetName(oPC));
continue;
}
if (GetPCPlayerName(oPC)!=sName && GetPCIPAddress(oPC)!=sIP)
{
object oPC2 = GetLocalObject(oSpeech,"B<>"+sName);
if (GetIsObjectValid(oPC2) && GetPCPlayerName(oPC2)==sName)
{
oPC = oPC2;
bFound = 2;
}
else
{
oPC2 = GetLocalObject(oSpeech,"B<>"+sIP);
if (GetIsObjectValid(oPC2) && GetPCIPAddress(oPC2)==sIP)
{
oPC = oPC2;
bFound = 2;
}
}
}
else
{
bFound = TRUE;
ff_FlushData(oPC);
}
if (bFound == FALSE)
{
if (GetIsPossessedFamiliar(GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC)))
{
object oPC2 = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC);
//string sReport = GetName(oPC)+" parle a travers son familier "+GetName(oPC2)+" ? :'"+sSpeech+"'";
if (GetPCPlayerName(oPC2)==sName)
{
SetLocalInt(oPC2, "DM_STATUS", iLVPlayer);
SetLocalObject(oSpeech,"B<>"+sName,oPC2);
SetLocalObject(oSpeech,"B<>"+sIP,oPC2);
//sReport += " (IP OK)";
oPC = oPC2;
bFound = 2;
}
else
{
string sReport = GetName(oPC)+" parle a travers son familier "+GetName(oPC2)+" ? :'"+sSpeech+"' (PCNames differ: '"+GetPCPlayerName(oPC2)+"' vs '"+sName+"')";
WriteTimestampedLogEntry(sReport);
SendMessageToAllDMs(sReport);
}
}
else
if (GetIsDM(oPC))
{
int iLocStar = FindSubString(sSpeech, "*");
if (iLocStar<0) continue;
location lLoc = GetLocalLocation(oPC, "Position");
object oTarget;
string sReport = "Recherche du NPC incarne par '"+GetName(oPC)+"' dans '"+GetName(GetAreaFromLocation(lLoc))+"'...";
WriteTimestampedLogEntry(sReport);
SendMessageToPC(oPC,sReport);
///
int Nb=1;
while ((oTarget = GetNearestCreatureToLocation(CREATURE_TYPE_IS_ALIVE, TRUE, lLoc, Nb++))!=OBJECT_INVALID)
{
if (GetIsObjectValid(oTarget))
if (GetIsDMPossessed(oTarget))
{
SendMessageToPC(oTarget, GetName(oTarget)+" (dans '"+GetName(OBJECT_SELF)+"') est possede par un DM !\n IP:"+GetPCIPAddress(oTarget)+"\n GetPCPlayerName:"+GetPCPlayerName(oTarget)+"\n Tag:"+GetTag(oTarget)+"\n Master:"+GetName(GetMaster(oTarget)));
WriteTimestampedLogEntry("Recherche DM(Speech) => "+ GetName(oTarget)+" (dans '"+GetName(OBJECT_SELF)+"') est possede par un DM !\n IP:"+GetPCIPAddress(oTarget)+"\n GetPCPlayerName:"+GetPCPlayerName(oTarget)+"\n Tag:"+GetTag(oTarget)+"\n Master:"+GetName(GetMaster(oTarget)));
SetLocalObject(oSpeech,"B<>"+GetPCPlayerName(oTarget),oTarget);
SetLocalObject(oSpeech,"B<>"+GetPCIPAddress(oTarget),oTarget);
SetLocalInt(oTarget, "DM_STATUS", GetLocalInt(GetMaster(oTarget),"DM_STATUS"));
if (GetMaster(oTarget) == oPC)
{
bFound = 2;
SendMessageToAllDMs(sReport);
oPC = oTarget;
break;
}
}
}
}
if (!GetIsObjectValid(oPC) || (bFound==FALSE))
continue;
}
if (iLVPlayer<LV_ANIM1 && (GetIsDead(oPC) || (bFound==2 && GetIsDead(GetMaster(oPC)) )) )
{
if (FF_SPEECH_DEADCANSPEAK) continue; // Nothing to do in that case, just ignore what is said
if (bFound==2 && GetIsDead(GetMaster(oPC)))
{
object oPC2 = GetMaster(oPC);
UnpossessFamiliar(oPC);
oPC = oPC2;
}
// You can edit the proper function in ff_inc_server to fit your needs
ff_TalkingDead(oPC, iCanal);
continue;
}
while (sSpeech!="") {
int iLocStar = FindSubString(sSpeech, "*");
if (iLocStar<0) break;
sSpeech = GetSubString(sSpeech, iLocStar+1, GetStringLength(sSpeech)-(iLocStar+1));
int iLocStar2 = FindSubString(sSpeech, "*");
if (iLocStar2<0) break;
sExtract = GetStringUpperCase(GetStringLeft(sSpeech,iLocStar2));
int NoCommand = GetLocalInt(oSpeech,sExtract);
if (NoCommand==0)
{
if ( (GetStringLeft(sExtract,8)=="ECRIT A ") || (GetStringLeft(sExtract,9)=="WRITE TO "))
{
int iLocDebug = FindSubString(sSpeech, ":");
if (iLocDebug<0) break;
object oPigeon = GetItemPossessedBy(oPC, "ff_pigeonobj");
if (oPigeon==OBJECT_INVALID)
SendMessageToPC(oPC,"You need an egg to send a message");
if (GetIsObjectValid(oPigeon))
{
string sName=GetSubString(sSpeech, 8, iLocDebug - 8);
//string sMsg =GetStringRight(sSpeech,GetStringLength(sSpeech)-iLocDebug-1);
string sMsg = SQLDecodeSpecialChars(GetSubString(sSpeech, iLocDebug+1, iLocStar2-iLocDebug-1));
//SendMessageToPC(oPC,"Envoi du message:'"+sMsg+"' a '"+sName+"'");
//ExecuteScript(GetSubString(sExtract,4, GetStringLength(sExtract)-4),oPC);
AssignCommand(oPC,pwWriteLog(oPC, "PC", "ECRIT A", "'"+GetName(oPC)+"' ecrit '"+sMsg+"' a '"+sName+"'"));
AssignCommand(oPC,ActionPutDownItem(oPigeon));
AssignCommand(oPC,ActionPlayAnimation (ANIMATION_LOOPING_GET_MID, 1.0, 5.0));
AssignCommand(oPC,ActionDoCommand(DestroyObject(oPigeon)));
AssignCommand(oPC,ActionDoCommand(CreateAndSend(oPC,sName,sMsg)));
}
}
else
if ((iLVPlayer>=LV_ANIM1) && ((GetStringLeft(sExtract,7)=="INDICE:") || (GetStringLeft(sExtract,5)=="HINT:") || (GetStringLeft(sExtract,7)=="SCROLL:")))
{
string sName=GetSubString(sSpeech, 7, iLocStar2 - 7);
SendMessageToPC(oPC,"Creation of a new scroll-hint:'"+sName+"'");
int NbIndice = ff_GetPersistentInt("GNextIndice","global", 1);
CreateObject(OBJECT_TYPE_ITEM, "ff_indice",GetLocation(oPC),TRUE,IntToString(NbIndice));
AssignCommand(oPC,ff_SetPersistentInt("GNextIndice",NbIndice+1));
AssignCommand(oPC,ff_SetPersistentString("IndiceNo"+IntToString(NbIndice),sName));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM", "INDICE", "'"+GetName(oPC)+"' ecrit l'indice No "+IntToString(NbIndice)+" a "+GetName(GetArea(oPC))+": '"+sName+"'"));
}
else
if (iLVPlayer==LV_ADMIN)
if (GetStringLeft(sExtract,3)=="WP:")
{
string sName = GetSubString(sSpeech,3, GetStringLength(sExtract)-3);
object oWP = GetWaypointByTag(sName);
if (!GetIsObjectValid(oWP))
oWP = GetObjectByTag(sName);
if (!GetIsObjectValid(oWP)) // Ni un WP, ni un objet => recherche d'un joueur avec ce nom
//
{
object oAfPC = GetFirstPC();
while (oAfPC!=OBJECT_INVALID)
{
if ( (GetName(oAfPC)==sName) || (GetPCPlayerName(oAfPC)==sName) )
{
oWP = oAfPC;
break;
}
oAfPC =GetNextPC();
}
}
//
if (GetIsObjectValid(oWP))
{
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "WP:", GetName(oPC)+" se teleporte vers '"+GetSubString(sSpeech,3, GetStringLength(sExtract)-3)+"' (cible OK)"));
MagicMoveTo(oPC, oWP);
}
else
{
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "WP:", GetName(oPC)+" voudrait aller vers '"+GetSubString(sSpeech,3, GetStringLength(sExtract)-3)+"' (cible INVALIDE)"));
SendMessageToPC(oPC,GetSubString(sSpeech,3, GetStringLength(sExtract)-3)+" ??! C'est quoi ca ?! (ni un WP, ni le TAG d'un object, ni meme un PC valide)");
}
}
else if (GetStringLeft(sExtract,4)=="RUN:")
{
ExecuteScript(GetSubString(sExtract,4, GetStringLength(sExtract)-4),oPC);
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "RUN", GetName(oPC)+" lance: '"+sExtract+"'"));
}
else if (GetStringLeft(sExtract,7)=="SETANIM")
{
string sPSW = GetSubString(sExtract,9, GetStringLength(sExtract)-9);
if (GetStringLeft(sExtract,9)=="SETANIM1:")
{
string OldPsw = GetLocalString(oSpeech, "Anim1");
DeleteLocalInt(oSpeech, OldPsw);
SetLocalInt(oSpeech, sPSW, CMD_ANIM1);
SetLocalString(oSpeech, "Anim1", sPSW);
AssignCommand(oPC,ff_SetPersistentString("GAnim1", sPSW));
SendMessageToPC(oPC," Ancien mot de passe Animateur Basic:"+ OldPsw+", Nouveau mot de passe:"+sPSW);
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "ANIM1", GetName(oPC)+" a change de mot de passe: "+OldPsw+"=>"+sPSW));
SendMessageToAllDMs("Mot de passe Anim1 change par "+GetName(oPC));
object oAfPC = GetFirstPC();
while (oAfPC!=OBJECT_INVALID)
{
if (GetLocalInt(oAfPC, "DM_STATUS") == LV_ANIM1)
{
ef = GetFirstEffect(oAfPC);
int iType, iSubType, iDuration;
while (GetIsEffectValid(ef))
{
iType = GetEffectType(ef);
if ( (GetEffectDurationType(ef) == DURATION_TYPE_PERMANENT) &&
(GetEffectSubType(ef) == SUBTYPE_MAGICAL))
RemoveEffect(oAfPC,ef);
ef = GetNextEffect(oAfPC);
}
SendMessageToPC(oAfPC,"Sniff, vous perdez tous vos super-pouvoirs :(");
SendMessageToAllDMs(GetName(oAfPC)+" perd tous ses super-pouvoirs :)");
if (GetSubRace(oAfPC)=="Vampire")
SetLocalInt(oAfPC, "DM_STATUS",LV_VAMPIRE);
else
SetLocalInt(oAfPC, "DM_STATUS",LV_PC);
}
oAfPC =GetNextPC();
}
}
if (GetStringLeft(sExtract,9)=="SETANIM2:")
{
string OldPsw = GetLocalString(oSpeech, "Anim2");
DeleteLocalInt(oSpeech, OldPsw);
SetLocalInt(oSpeech, sPSW, CMD_ANIM2);
SetLocalString(oSpeech, "Anim2", sPSW);
AssignCommand(oPC,ff_SetPersistentString("GAnim2", sPSW));
SendMessageToPC(oPC," Ancien mot de passe Animateur Avance:"+ OldPsw+", Nouveau mot de passe:"+sPSW);
SendMessageToAllDMs("Mot de passe Anim2 change par "+GetName(oPC));
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "ANIM2", GetName(oPC)+" a change de mot de passe: "+OldPsw+"=>"+sPSW));
object oAfPC = GetFirstPC();
while (oAfPC!=OBJECT_INVALID)
{
if (GetLocalInt(oAfPC, "DM_STATUS") == LV_ANIM2)
{
ef = GetFirstEffect(oAfPC);
int iType, iSubType, iDuration;
while (GetIsEffectValid(ef))
{
iType = GetEffectType(ef);
if ( (GetEffectDurationType(ef) == DURATION_TYPE_PERMANENT) &&
(GetEffectSubType(ef) == SUBTYPE_MAGICAL))
RemoveEffect(oAfPC,ef);
ef = GetNextEffect(oAfPC);
}
SendMessageToPC(oAfPC,"Sniff, vous perdez tous vos super-pouvoirs :(");
SendMessageToAllDMs(GetName(oAfPC)+" perd tous ses super-pouvoirs :)");
if (GetSubRace(oAfPC)=="Vampire")
SetLocalInt(oAfPC, "DM_STATUS",LV_VAMPIRE);
else
SetLocalInt(oAfPC, "DM_STATUS",LV_PC);
}
oAfPC =GetNextPC();
}
} // SETANIM2:
} // SETANIM
} // NoCommand == 0
else
if (NoCommand<iLVPlayer)
switch (NoCommand)
{
case CMD_SERVEUR:
{
AssignCommand(oPC, ActionStartConversation(oPC, "ff_serverstat", TRUE, FALSE));
break;
}
case CMD_MEGASPY:
{
int iDM=0;
object oPC3 = GetFirstPC();
string sRes = "DM report step 1:\n";
int bMissing = FALSE;
while (oPC3!=OBJECT_INVALID)
{
if (GetIsDMPossessed(oPC3) || GetIsDM(oPC3))
{
iDM++;
if (GetIsDMPossessed(oPC3))
sRes += IntToString(iDM)+"/ (poss) "+GetName(oPC3)+" - M:"+GetName(GetMaster(oPC3))+" ("+GetPCPlayerName(oPC3)+") - "+GetName(GetArea(oPC3))+" ("+GetPCIPAddress(oPC3)+", M:"+GetPCIPAddress(GetMaster(oPC3))+")\n";
else
{
sRes += IntToString(iDM)+"/ "+GetName(oPC3)+" ("+GetPCPlayerName(oPC3)+") - "+GetName(GetArea(oPC3))+" ("+GetPCIPAddress(oPC3)+")\n";
if (GetName(oPC3)=="") bMissing = TRUE;
object oPC2 = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oPC3);
if (oPC2!=OBJECT_INVALID)
sRes += IntToString(iDM)+"/ Son ANIMALCOMPANION: "+GetName(oPC2)+" ("+GetPCPlayerName(oPC2)+") - "+GetName(GetArea(oPC2))+" ("+GetPCIPAddress(oPC2)+")\n";
oPC2 = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC3);
if (oPC2!=OBJECT_INVALID)
sRes += IntToString(iDM)+"/ Son FAMILIAR: "+GetName(oPC2)+" ("+GetPCPlayerName(oPC2)+") - "+GetName(GetArea(oPC2))+" ("+GetPCIPAddress(oPC2)+")\n";
oPC2 = GetAssociate(ASSOCIATE_TYPE_DOMINATED,oPC3);
if (oPC2!=OBJECT_INVALID)
sRes += IntToString(iDM)+"/ Son DOMINATED: "+GetName(oPC2)+" ("+GetPCPlayerName(oPC2)+") - "+GetName(GetArea(oPC2))+" ("+GetPCIPAddress(oPC2)+")\n";
oPC2 = GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC3);
if (oPC2!=OBJECT_INVALID)
sRes += IntToString(iDM)+"/ Son HENCHMAN: "+GetName(oPC2)+" ("+GetPCPlayerName(oPC2)+") - "+GetName(GetArea(oPC2))+" ("+GetPCIPAddress(oPC2)+")\n";
oPC2 = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oPC3);
if (oPC2!=OBJECT_INVALID)
sRes += IntToString(iDM)+"/ Son SUMMONED: "+GetName(oPC2)+" ("+GetPCPlayerName(oPC2)+") - "+GetName(GetArea(oPC2))+" ("+GetPCIPAddress(oPC2)+")\n";
}
}
oPC3 = GetNextPC();
}
//WriteTimestampedLogEntry(sRes);
SendMessageToPC(oPC,sRes);
break; // Sinon, RESCAN
}
case CMD_DISPELDM:
{
object oPC2 = GetFirstPC();
while (oPC2!=OBJECT_INVALID && oPC2!=oPC)
{
if (GetLocalInt(oPC2, "DM_STATUS")>=LV_ANIM1)
{
ef = GetFirstEffect(oPC2);
int iType, iSubType, iDuration;
int Dispeled = FALSE;
if (GetIsDead(oPC2))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC2);
DeleteLocalObject(oPC2, "LastBadPK");
}
int iMaxHP = GetMaxHitPoints(oPC2);
int iCurrentHP = GetCurrentHitPoints(oPC2);
if (iMaxHP != 0 && iMaxHP>iCurrentHP)
{
int iDamage = iMaxHP-iCurrentHP;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iDamage),oPC2);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HEALING_X),oPC2);
}
ef = GetFirstEffect(oPC2);
while (GetIsEffectValid(ef))
{
Dispeled = TRUE;
RemoveEffect(oPC2,ef);
ef = GetNextEffect(oPC2);
}
AssignCommand(oPC2,ff_FlushData(oPC2));
if (Dispeled) SendMessageToPC(oPC2,"Sniff, vous perdez tous vos super-pouvoirs :(");
SendMessageToAllDMs(GetName(oPC2)+" perd tous ses super-pouvoirs :)");
}
oPC2 = GetNextPC();
}
break;
}
case CMD_ADMIN:
{
SetLocalInt(oPC, "DM_STATUS", LV_ADMIN);
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSpellResistanceIncrease(60), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageResistance(4095,10000), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageImmunityIncrease(4095, 100), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectRegenerate(50,1.0), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(50,ATTACK_BONUS_MISC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectModifyAttacks(5),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_SONIC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_COLD),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_FIRE),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_MAGICAL),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_SLASHING),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(100, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL),oPC));
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "LOG", GetName(oPC)+" est devenu ADMINISTRATEUR"));
break;
}
case CMD_ANIM1:
{
SetLocalInt(oPC, "DM_STATUS",LV_ANIM1);
SendMessageToPC(oPC, "Vous voila desormais ANIMATEUR");
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW, 1.0));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM1", "LOG", GetName(oPC)+" est devenu Animateur Basic"));
break;
}
case CMD_ANIM2:
{
SetLocalInt(oPC, "DM_STATUS",LV_ANIM2);
SendMessageToPC(oPC, "Vous voila desormais ANIMATEUR Senior");
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW, 1.0));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM2", "LOG", GetName(oPC)+" est devenu Animateur Avance"));
break;
}
case CMD_INCLINE:
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW, 1.0));
break;
}
case CMD_ASSOIT:
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 300.0));
break;
}
case CMD_VOLE:
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_STEAL, 1.0));
break;
}
case CMD_SALUT:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_GOODBYE,oPC)));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0));
break;
}
case CMD_GAUCHE:
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 1.0));
break;
}
case CMD_DROITE:
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT, 1.0));
break;
}
case CMD_LIT:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_READ));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_READ));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_READ));
break;
}
case CMD_PAUSE2:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_BORED,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_PAUSE_BORED));
break;
}
case CMD_PAUSE1:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD));
break;
}
case CMD_PAUSE3:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_PAUSE,1.0,3.0));
break;
}
case CMD_PAUSE4:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_PAUSE2,1.0,5.0));
break;
}
case CMD_BONJOUR:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_HELLO,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_GREETING));
break;
}
case CMD_RIT:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 1.0, 7.0));
break;
}
case CMD_DANCE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY2));
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 3.0, 2.0));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY1));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 3.0, 2.0));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3));
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
break;
}
case CMD_STRIPTEASE:
{
object oItemstrips = GetItemInSlot (INVENTORY_SLOT_CHEST, oPC);
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC, ActionDoCommand(SetFacing (DIRECTION_WEST)));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP,1.0));
//the strip part
AssignCommand(oPC, ActionUnequipItem (oItemstrips));
//more danceing
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC, ActionDoCommand(SetFacing (DIRECTION_EAST)));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0));
AssignCommand(oPC, ActionDoCommand(SetFacing (DIRECTION_WEST)));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_PLEADING,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP,1.0));
AssignCommand(oPC, ActionDoCommand(SetFacing (DIRECTION_EAST)));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0));
AssignCommand(oPC, ActionEquipItem(oItemstrips, INVENTORY_SLOT_CHEST));
break;
}
case CMD_MORT:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_DEATH,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_DEAD_FRONT, 1.0, 240.0));
break;
}
case CMD_TROM:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_DEATH,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_DEAD_BACK, 1.0, 240.0));
break;
}
case CMD_FATIGUE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_PAUSE_TIRED, 1.0, 10.0));
PlayVoiceChat(VOICE_CHAT_REST, oPC);
break;
}
case CMD_PARLE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_NORMAL, 1.0, 15.0));
break;
}
case CMD_PARLE2:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_PLEADING, 1.0, 10.0));
break;
}
case CMD_PARLE3:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_FORCEFUL, 1.0, 7.0));
break;
}
case CMD_SPASMES:
{
switch (Random(5))
{
case 0:
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_PAIN1,oPC))); break;
case 1:
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_PAIN2,oPC))); break;
case 2:
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_PAIN3,oPC))); break;
case 3:
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_POISONED,oPC))); break;
case 4:
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_NEARDEATH,oPC))); break;
}
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_SPASM, 1.0, 7.0));
break;
}
case CMD_BOIT:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_CHEER,oPC)));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_DRINK, 1.0));
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_PAUSE_DRUNK, 1.0, 12.0));
break;
}
case CMD_PRIE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_WORSHIP, 1.0, 180.0));
break;
}
case CMD_ECOUTE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_LISTEN, 1.0, 7.0));
break;
}
case CMD_MEDITE:
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_MEDITATE, 1.0, 120.0));
break;
}
case CMD_SEPENCHE:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_GET_MID, 1.0, 5.0));
break;
}
case CMD_SEBAISSE:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_GET_LOW, 1.0, 5.0));
break;
}
case CMD_PROVOQUE:
{
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_TAUNT,oPC)));
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_TAUNT));
break;
}
case CMD_VICTOIRE:
{
switch (Random(3))
{
case 0: AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY1)); break;
case 1: AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY2)); break;
case 2: AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY3)); break;
}
break;
}
case CMD_VICTOIRE1:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY1));
break;
}
case CMD_VICTOIRE2:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY2));
break;
}
case CMD_VICTOIRE3:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_VICTORY3));
break;
}
case CMD_CONJURE:
{
switch (Random(2))
{
case 0: AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_CONJURE1, 1.0, 3.0+Random(6))); break;
case 1: AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_CONJURE2, 1.0, 3.0+Random(6))); break;
}
break;
}
case CMD_CONJURE1:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_CONJURE1, 1.0, 5.0));
break;
}
case CMD_CONJURE2:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_CONJURE2, 1.0, 5.0));
break;
}
case CMD_ESQUIVE:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_DODGE_DUCK));
break;
}
case CMD_EVITE:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_FIREFORGET_DODGE_SIDE));
break;
}
case CMD_REGARDELOIN:
{
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_LOOK_FAR, 1.0, 5.0));
break;
}
case CMD_AIDE:
{
//AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_HELP,oPC)));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[y]Here is the list of all the orders you can say on any channel (talk...). Just enclose them with two stars '*'")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[y]For instance, on the channel 'talk', you can try to type: [w]/tp MyAccount *ECOUTE* *MEDITE* *SPASMES* *DEAD*\n")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Long animations:[g] *Medite*, *Prie*, *Dead*, *Daed*, *S'assoit*")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Complex animations:[g] *Dance*, *Strip-tease*")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Short pauses (2 to 7 seconds):[g] *Pause*, *Attend*, *Se gratte la tete*, *S'ennuie*, *Regarde au loin*, *Ecoute*, *Fatigue*")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Communication:[g] *Speak*, *Plaide*, *Parle avec force*, *Rit* (ou *LOL*), *Lit*, *Bonjour*, *Provoque*")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Random animations:[g] *Conjure* (*Conjure1*, *Conjure2*), *Victory* (*Victory1*, *Victory2*, *Victory3*)")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Other animations:[g] *Drink*, *Spasmes*, *Right*, *Left*, *Salut*, *Vole*, *S'incline*, *Se penche*, *Se baisse*\n")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Other kind of actions: [b]*Suit*, *Fuit*, *Journal*, *Help*[y]")));
if (iLVPlayer >= LV_ANIM1)
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Distant RP communication: [b]*Write to Nom:Message*[y]")));
else
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("[w]Distant RP communication: [b]*Write to Nom:Message* (need a pigeon egg)[y]")));
//if (iLVPlayer >= LV_VAMPIRE)
// AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[w]For the vampires: [c]*Time*, *noirceur*\n")));
if (iLVPlayer >= LV_ANIM1)
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[w]For the animators: [c]*Alive*, *Invisible*, *Visible*, *Shield*, *Fast*, *Minor Polymorph*, *Doue*, *Regen*, *SetPos*, *Recall*, *Etheral*, *Boost*, *Normal*, [w]*Scroll:<free text>*\n")));
if (iLVPlayer >= LV_ANIM2)
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[w]For the senior animators: [g]*Resu*, *Evil*, *Good*, *Peace*, [w]*Polymorph*, *Major Polymorph*, *GB*\n")));
//(No DM command left on this light version)
//if (iLVPlayer >= LV_DM)
// AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[w]Pour les DMs: [c]\n")));
if (iLVPlayer >= LV_ADMIN)
{
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[w]And for the admins: [c]*WP:xxx*, *RUN:xxx*, *Love*, *Hate*[y]\n")));
AssignCommand(oPC, SendMessageToPC(oPC,ff_Colorize("\n[dw]And **secret** commands, that can be used by any player: [dc]*"+GetLocalString(oSpeech, "Anim1")+"*, *"+GetLocalString(oSpeech, "Anim2")+"*[w]. *SETANIM1:xxx* et *SETANIM2:xxx* allow you to persistantly change those passwords\n[dg]*MegaSpy*, *DispelDM*, *DM* [db]*Test1*, *Test2* et *Test3* are reserved for experimental needs")));
}
break;
}
case CMD_JOURNAL:
{
SendMessageToPC(oPC,ff_Colorize("[g]You've played this char for [w]"+ff_GetStrTotalTime(GetLocalInt(oPC, "Time"))));
break;
}
case CMD_SUIT:
{
object oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oPC, 1);
if (oTarget==oPC)
oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oPC, 2);
if(GetIsObjectValid(oTarget))
{
AssignCommand(oTarget, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_FOLLOWME,oTarget)));
AssignCommand (oPC, ActionForceFollowObject(oTarget));
SendMessageToPC(oPC, "OK, you're now following "+GetName(oTarget));
float fDelay = 30.0+Random(300);
AssignCommand(oPC,DelayCommand(fDelay,ClearAllActions()));
}
else
SendMessageToPC(oPC, "OK, but who do you want to follow?!");
break;
}
case CMD_FUIT:
{
object oTarget = GetLastHostileActor(oPC);
if(GetIsObjectValid(oTarget))
{
AssignCommand(oPC,ClearAllActions(TRUE));
AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_FLEE,oPC)));
AssignCommand (oPC, ActionMoveAwayFromObject(oTarget, TRUE, 30.0));
SendMessageToPC(oPC, "You're running away from "+GetName(oPC));
}
else
SendMessageToPC(oPC,"Fleeing ? OK, but who ?");
break;
}
case CMD_NORMAL:
{
if (GetIsDead(oPC))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC);
DeleteLocalObject(oPC, "LastBadPK");
}
int iMaxHP = GetMaxHitPoints(oPC);
int iCurrentHP = GetCurrentHitPoints(oPC);
if (iMaxHP != 0 && iMaxHP>iCurrentHP)
{
int iDamage = iMaxHP-iCurrentHP;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iDamage),oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HEALING_X),oPC);
}
ef = GetFirstEffect(oPC);
while (GetIsEffectValid(ef))
{
RemoveEffect(oPC,ef);
ef = GetNextEffect(oPC);
}
AssignCommand(oPC,ff_FlushData(oPC));
break;
}
case CMD_CHANTE:
{
if(GetGender(oPC)==GENDER_MALE)
{
if(GetAlignmentGoodEvil(oPC)==ALIGNMENT_EVIL)
AssignCommand (oPC, PlaySound("as_pl_evilchantm"));
else
AssignCommand (oPC, PlaySound("as_pl_chantingm"+IntToString(Random(2)+1)));
}
else AssignCommand (oPC, PlaySound("as_pl_chantingf"+IntToString(Random(2)+1)));
break;
}
case CMD_RONFLE:
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SLEEP), oPC);
if(GetGender(oPC)==GENDER_MALE)
AssignCommand (oPC, PlaySound("as_pl_snoringm"+IntToString(Random(2)+1)));
else AssignCommand (oPC, PlaySound("as_pl_snoringf1"));
break;
}
case CMD_CRIT:
{
if(GetGender(oPC)==GENDER_MALE)
{
if(Random(2)==0)
AssignCommand (oPC, PlaySound("as_pl_x2screamm"+IntToString(Random(6)+1)));
else
AssignCommand (oPC, PlaySound("as_pl_screamm"+IntToString(Random(6)+1)));
}
else
{
if(Random(2)==0)
AssignCommand (oPC, PlaySound("as_pl_x2screamf"+IntToString(Random(6)+1)));
else
AssignCommand (oPC, PlaySound("as_pl_screamf"+IntToString(Random(6)+1)));
}
break;
}
case CMD_PLEURE:
{
if(GetGender(oPC)==GENDER_MALE)
AssignCommand (oPC, PlaySound("as_pl_wailingm"+IntToString(Random(6)+1)));
else
AssignCommand (oPC, PlaySound("as_pl_wailingf"+IntToString(Random(6)+1)));
break;
}
case CMD_GEMIT:
{
if(GetGender(oPC)==GENDER_MALE)
AssignCommand (oPC, PlaySound("as_pl_ailingm"+IntToString(Random(5)+1)));
else
AssignCommand (oPC, PlaySound("as_pl_ailingf"+IntToString(Random(5)+1)));
break;
}
case CMD_GROGNE:
{
if(GetGender(oPC)==GENDER_MALE)
AssignCommand (oPC, PlaySound("as_pl_hangoverm1"));
else
AssignCommand (oPC, PlaySound("as_pl_hangoverf1"));
break;
}
case CMD_ETERNUE:
{
if(GetGender(oPC)==GENDER_MALE)
AssignCommand (oPC, PlaySound("as_pl_sneezingm1"));
else
AssignCommand (oPC, PlaySound("as_pl_sneezingf1"));
break;
}
case CMD_ACCLAME:
{
PlayVoiceChat(VOICE_CHAT_CHEER, oPC);
int rand=Random(3);
if(rand==0)
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1));
else if(rand==1)
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2));
else if(rand==2)
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3));
break;
}
case CMD_SIFFLE:
{
AssignCommand(oPC, PlaySound("as_pl_whistle2"));
break;
}
case CMD_DOUE:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSkillIncrease(SKILL_ALL_SKILLS, 20), oPC);
break;
}
case CMD_ETHERAL:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectEthereal(), oPC);
break;
}
case CMD_VIVANT:
{
if (GetIsDead(oPC))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC);
DeleteLocalObject(oPC, "LastBadPK");
}
int iMaxHP = GetMaxHitPoints(oPC);
int iCurrentHP = GetCurrentHitPoints(oPC);
if (iMaxHP != 0 && iMaxHP>iCurrentHP)
{
int iDamage = iMaxHP-iCurrentHP;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iDamage),oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HEALING_X),oPC);
}
AssignCommand(oPC,ff_FlushData(oPC));
break;
}
case CMD_SETPOS:
{
SetLocalLocation(oPC, "SetPos", GetLocation(oPC));
SendMessageToPC(oPC, "Position memorisee");
break;
}
case CMD_RECALL:
{
location lLoc = GetLocalLocation(oPC, "SetPos");
if (GetAreaFromLocation(lLoc)==OBJECT_INVALID)
{
MagicMoveTo(oPC, GetWaypointByTag("WP_Barak_02"));
//AssignCommand(oPC,JumpToObject(GetWaypointByTag("WP_Barak_02")));
SendMessageToPC(oPC, "Pas de position memorisee");
}
else
{
AssignCommand(oPC,JumpToLocation(lLoc));
//AssignCommand(oPC,JumpToLocation(lLoc));
SendMessageToPC(oPC, "Retour a la position memorisee");
}
break;
}
case CMD_DM:
{
SetLocalInt(oPC, "DM_STATUS", LV_DM);
SendMessageToPC(oPC, "Vous etes redevenu simple DM...");
break;
}
case CMD_INVISIBLE:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectInvisibility(INVISIBILITY_TYPE_IMPROVED),oPC);
if (iLVPlayer>=LV_ANIM2)
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_INVISIBILITY),oPC);
if (iLVPlayer>=LV_ADMIN)
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY),oPC);
//ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY),oPC);
break;
}
case CMD_RAPIDE:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectHaste(),oPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectMovementSpeedIncrease(99),oPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectMovementSpeedIncrease(99),oPC);
break;
}
case CMD_VISIBLE:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectTrueSeeing(),oPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectUltravision(),oPC);
break;
}
case CMD_BOUCLIER:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDamageShield(20,DAMAGE_BONUS_2d6, DAMAGE_TYPE_NEGATIVE),oPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDamageShield(20,DAMAGE_BONUS_2d6, DAMAGE_TYPE_COLD),oPC);
break;
}
case CMD_REGEN:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectRegenerate(5,1.0),oPC);
break;
}
case CMD_MINOR_POLYMORPH:
{
switch(Random(8))
{
case 0: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_BADGER),oPC); break;
case 1: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_BOAR),oPC); break;
case 2: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_COW),oPC); break;
case 3: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_DIRE_BADGER),oPC); break;
case 4: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_DIRE_BOAR),oPC); break;
case 5: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_IMP),oPC); break;
case 6: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_PENGUIN),oPC); break;
case 7: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_PIXIE),oPC); break;
}
break;
}
case CMD_POLYMORPH:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(Random(46)),oPC);
break;
}
case CMD_MAJOR_POLYMORPH:
{
switch(Random(8))
{
case 0: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_RED_DRAGON),oPC); break;
case 1: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_IRON_GOLEM),oPC); break;
case 2: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL),oPC); break;
case 3: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_CELESTIAL_AVENGER),oPC); break;
case 4: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_BALOR),oPC); break;
case 5: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_DEATH_SLAAD),oPC); break;
case 6: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL),oPC); break;
case 7: ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectPolymorph(POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL),oPC); break;
}
break;
}
case CMD_PAIX:
{
int iNo=1;
object oTarget = GetFirstObjectInArea(GetArea(oPC));
while (oTarget!=OBJECT_INVALID)
{
if (GetIsObjectValid(oTarget) && GetObjectType(oTarget)==OBJECT_TYPE_CREATURE)
{
object oEn = GetLastHostileActor(oTarget);
if (oEn!=OBJECT_INVALID)
{
SetIsTemporaryFriend(oEn, oTarget);
SetIsTemporaryFriend(oTarget, oEn);
AssignCommand(oEn, ClearAllActions(TRUE));
AssignCommand(oTarget, ClearAllActions(TRUE));
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_CHARM), oEn);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_CHARM), oTarget);
SendMessageToPC(oPC,GetName(oTarget)+" et "+GetName(oEn)+" sont maintenant de vrais amis inseparables :)");
if (GetIsPC(oTarget))
SendMessageToPC(oTarget,"Une musique incroyable et apaisante retentit dans votre tete, et vous n'avez soudain plus aucune envie de combattre "+GetName(oEn));
if (GetIsPC(oEn))
SendMessageToPC(oEn,"Une musique incroyable et apaisante retentit dans votre tete, et vous n'avez soudain plus aucune envie de combattre "+GetName(oTarget));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM2", "PAIX", GetName(oPC)+" a lance *PAIX* entre "+GetName(oTarget)+" et "+GetName(oEn)));
}
else
SendMessageToPC(oPC,GetName(oTarget)+" ne semble pas etre en combat actuellement (GetIsInCombat="+IntToString(GetIsInCombat(oTarget))+")");
}
oTarget = GetNextObjectInArea(GetArea(oPC));
}
break;
}
case CMD_RESU:
{
object oRESU = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, FALSE, oPC);
if (oRESU!=OBJECT_INVALID)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRESU);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_RAISE_DEAD), oRESU);
if (GetIsPC(oRESU))
{
SendMessageToPC(oRESU, "Une puissance mysterieuse vous fait revenir du royaume des morts");
AssignCommand(oPC,ff_FlushData(oRESU));
DeleteLocalObject(oRESU, "LastBadPK");
AssignCommand(oRESU, ActionPlayAnimation( ANIMATION_LOOPING_WORSHIP, 1.0, 10.0));
WriteTimestampedLogEntry("> (DM)"+GetName(oPC)+" ressuscite "+GetName(oRESU));
}
AssignCommand(oPC,pwWriteLog(oPC, "ANIM2", "RESU", GetName(oPC)+" a lance *RESU* sur "+GetName(oRESU)));
}
else
SendMessageToPC(oPC,"Non, aucune creature morte a proximite");
break;
}
case CMD_BIEN:
{
object oAfPC = GetFirstPC();
object oArea = GetArea(oPC);
while (oAfPC!=OBJECT_INVALID)
{
if (GetArea(oAfPC) == oArea)
{
if (GetAlignmentGoodEvil(oAfPC)==ALIGNMENT_GOOD)
{
GoodEffect(oAfPC,oPC,3);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous recevez une grande bouffee d'[b]amour[w] provenant d'une merveilleuse puissance divine et aimante, qui vous remet en pleine forme[y]"));
}
else if (GetAlignmentGoodEvil(oAfPC)==ALIGNMENT_EVIL)
{
BadEffect(oAfPC,oPC,3);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous suffoquez en sentant passer une grande bouffee d'[b]amour[w] provenant d'une merveilleuse puissance divine et aimante[y]"));
}
else if (GetAlignmentGoodEvil(oAfPC)==ALIGNMENT_NEUTRAL)
{
GoodEffect(oAfPC,oPC,0);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous restez relativement indifferent en sentant passer une grande bouffee d'[b]amour[w] provenant d'une merveilleuse puissance divine et aimante[y]"));
}
}
oAfPC =GetNextPC();
}
AssignCommand(oPC,pwWriteLog(oPC, "DM", "BIEN", GetName(oPC)+" a lance *BIEN* dans "+GetName(GetArea(oPC))));
break;
}
case CMD_MAL:
{
object oAfPC = GetFirstPC();
object oArea = GetArea(oPC);
while (oAfPC!=OBJECT_INVALID)
{
if (GetArea(oAfPC) == oArea)
if (GetAlignmentGoodEvil(oAfPC)==ALIGNMENT_EVIL)
{
GoodEffect(oAfPC,oPC,3);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous jubilez en sentant une grande bouffee de [r]haine[w] provenant d'une horrible puissance malfaisante"));
}
else if (GetAlignmentGoodEvil(oAfPC)==ALIGNMENT_GOOD)
{
BadEffect(oAfPC,oPC,3);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous etouffez sous une grande bouffee de [r]haine[w] provenant d'une horrible puissance malfaisante"));
}
else
{
BadEffect(oAfPC,oPC,0);
SendMessageToPC(oAfPC, ff_Colorize("[w]Vous restez relativement indifferent face a la grande bouffee de [r]haine[w] provenant d'une horrible puissance malfaisante"));
}
oAfPC =GetNextPC();
}
AssignCommand(oPC,pwWriteLog(oPC, "DM", "MAL", GetName(oPC)+" a lance *MAL* dans "+GetName(GetArea(oPC))));
break;
}
case CMD_GB:
{
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSpellResistanceIncrease(60), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageResistance(4095,10000), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageImmunityIncrease(4095, 100), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectRegenerate(50,1.0), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(50,ATTACK_BONUS_MISC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectModifyAttacks(5),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_SONIC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_COLD),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_FIRE),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_MAGICAL),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_SLASHING),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(100, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL),oPC));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM2", "GB", GetName(oPC)+" est devenu GrosBill !"));
break;
}
case CMD_BOOST:
{
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSpellResistanceIncrease(10), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageResistance(4095,100), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectRegenerate(1,1.0), oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(10,ATTACK_BONUS_MISC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectModifyAttacks(1),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_SONIC),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_COLD),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_FIRE),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_MAGICAL),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_SLASHING),oPC));
AssignCommand(oPC, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(10, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL),oPC));
AssignCommand(oPC,pwWriteLog(oPC, "ANIM1", "BOOST", GetName(oPC)+" est un peu booste !"));
break;
}
case CMD_AMOUR:
{
int iNb=0;
object oAfPC = GetFirstPC();
while (oAfPC!=OBJECT_INVALID)
{
if (GetSubRace(oAfPC)!="Vampire")
{
DelayCommand(IntToFloat(iNb)/10,GoodEffect(oAfPC,oPC,3));
DelayCommand(IntToFloat(iNb)/10,SendMessageToPC(oAfPC, ff_Colorize("[w]Vous recevez une grande bouffee d'[b]amour[w] provenant d'une merveilleuse puissance divine et aimante, qui vous remet en pleine forme[y]")));
}
else
{
DelayCommand(IntToFloat(iNb)/10,BadEffect(oAfPC,oPC,0));
DelayCommand(IntToFloat(iNb)/10,SendMessageToPC(oAfPC, ff_Colorize("[w]Vous frissonnez en sentant passer une grande bouffee d'[b]amour[w] provenant d'une merveilleuse puissance divine et aimante[y]")));
}
iNb++;
oAfPC =GetNextPC();
}
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "AMOUR", GetName(oPC)+" a lance *AMOUR*"));
SendMessageToAllDMs("Une enorme vague d'AMOUR lancee par "+GetName(oPC));
break;
}
case CMD_HAINE:
{
object oAfPC = GetFirstPC();
int iNb=0;
while (oAfPC!=OBJECT_INVALID)
{
if (GetSubRace(oAfPC)!="Vampire")
{
DelayCommand(IntToFloat(iNb)/10,SendMessageToPC(oAfPC, ff_Colorize("[w]Vous etouffez sous une grande bouffee de [r]haine[w] provenant d'une horrible puissance malfaisante")));
DelayCommand(IntToFloat(iNb)/10,BadEffect(oAfPC,oPC,3));
}
else
{
DelayCommand(IntToFloat(iNb)/10,SendMessageToPC(oAfPC, ff_Colorize("[w]Vous jubilez en sentant une grande bouffee de [r]haine[w] provenant d'une horrible puissance malfaisante")));
DelayCommand(IntToFloat(iNb)/10,GoodEffect(oAfPC,oPC,0));
}
iNb++;
oAfPC =GetNextPC();
}
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "HAINE", GetName(oPC)+" a lance *HAINE*"));
SendMessageToAllDMs("Une enorme vague de HAINE lancee par "+GetName(oPC));
break;
}
case CMD_TEST1:
{
object oRESU = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oPC);
if (oRESU!=OBJECT_INVALID)
{
SendMessageToPC(oRESU,"Vous entrez soudain en Trance et perdez le controle de votre corps... comme possede.");
AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,SupernaturalEffect(EffectCutsceneDominated()),oRESU, 60.0));
SendMessageToPC(oPC, "EffectCutsceneDominated() actif sur "+GetName(oRESU)+" pendant 60 secondes");
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "TEST1", GetName(oPC)+" a lance Test1 (EffectCutsceneDominated()) sur "+GetName(oRESU)));
}
break;
}
case CMD_TEST2:
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDisappear(),oPC);
DelayCommand(2.0,SendMessageToPC(oPC, "Pouff, t'es plus la ?!"));
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "TEST2", GetName(oPC)+" a disparu ?! (test2)"));
break;
}
case CMD_TEST3:
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY),oPC);
AssignCommand(oPC,pwWriteLog(oPC, "ADMIN", "TEST3", GetName(oPC)+" a disparu ?! (test3)"));
break;
}
} // switch
sSpeech = GetSubString(sSpeech, iLocStar2+1, GetStringLength(sSpeech)-(iLocStar2+1));
} // while sSpeech != ""
} // while (GetStringLength(LOCAL_BUFFER)>2)
DelayCommand(0.2, subloop(oSpeech, bUsingSpeech));
}