Elleslande Module pour NWN
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Elleslande Module pour NWN

Forum d' Elleslande, module RP pour Neverwinter Nights
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

 

 [DIVERS] Les combats d' arènes

Aller en bas 
3 participants
AuteurMessage
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: [DIVERS] Les combats d' arènes   [DIVERS] Les combats d' arènes EmptyVen 26 Mai - 15:31

Actuellement en cours, le scripting des combats en arènes...

Je prévoit 4 map de combat aléatoire où se trouvent pièges et décors sympa...
La première arène a été mapée et va me service pour mettre en place le scripting. Les autres map viendrons par la suite...

Les maps d'arènes, prévoyant des groupes de joueurs font 4*4.
Pour le moment il ne sera possible d'affronter que d'autres pjs...


Dernière édition par le Mar 27 Juin - 13:44, édité 2 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Les scripts   [DIVERS] Les combats d' arènes EmptyDim 18 Juin - 0:46

Voici les scripts liées au dialogues de l'organisateur :
---------------------------------------------------------------------
conditions :
-------------
Citation :

//Verifie si il n'y a pas deja deux groupe en train de combattre...
//Par pascal le 02/06/06
#include"functions"

int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;

if (GetLocalInt(oOrga,"GROUPE")==2)
iResult = TRUE;
return iResult;
}


//Verifie si il n'y a pas deja un groupe en attente...
//Par pascal le 02/06/06
#include"functions"

int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;

if (GetLocalInt(oOrga,"GROUPE")==1)
iResult = TRUE;
return iResult;
}

//Verifie qu'il y a quelqu'un en salle d'attente si le groupe 1 est deja actif
//Par pascal le 16/06/06


int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;
object oWP0 = GetObjectByTag("WP_attente");
object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,oWP0);

if ((oPlayer==OBJECT_INVALID)&&(GetLocalInt(oOrga,"GROUPE")==1))
iResult = TRUE;
else
iResult = FALSE;
return iResult;
}


Actions si Groupe 1 veut faire combat pj vs pj :
----------------------------------------------------------------


Citation :

/* Script d'arene qui va envoyer l'equipe 1 dans une salle d'attente en attendant
que l'equipe 2 se prsente. Par la suite, l'equipe 1 et l'equipe 2 sont envoyes
dans une arene au hazard*/
#include "arene_include"


void main()
{
//---------------------------------------------------------->
//Dclaration de variables
//----------------------------------------------------------<

object oOrga = OBJECT_SELF; //l'organisateur
object oPlayer = GetPCSpeaker(); //le joueur
object oWP0 = GetObjectByTag("WP_attente"); //le point de passage de la salle d'attente
location lWP0 = GetLocation(oWP0);

object oGroupe1; //Ceux qui feront partie du groupe1
string sArea; //Nom de la zone de combat
object oWP1;
object oWP2; //point d'arrive du groupe 1 et 2
string sWP1;
string sWP2;
location lWP1;
location lWP2;

//----------------------------------------------------------->
//Fonctions principales
//-----------------------------------------------------------<

AssignEquip(oPlayer,oOrga); //Si aucun groupe assigne met en groupe 1, si 1 groupe met en 2 et si deja 2 dit qu'il y en a assez...

if (GetLocalInt(oOrga,"GROUPE")==1)//Le premier groupe qui lui parle sera teleporte dans la salle d'attente
{
object oMember2 = GetFirstFactionMember(oPlayer);//Membre du groupe
while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember2,ActionJumpToLocation(lWP0));
oMember2 = GetNextFactionMember(oPlayer);
}

}

}
Partie si le groupe 2 veut faire du PJ vs PJ :
------------------------------------------------------------------


Citation :


object oOrga = OBJECT_SELF; //l'organisateur
object oPlayer = GetPCSpeaker(); //le joueur
object oWP0 = GetObjectByTag("WP_attente"); //le point de passage de la salle d'attente
location lWP0 = GetLocation(oWP0);

object oGroupe1; //Ceux qui feront partie du groupe1
string sArea; //Nom de la zone de combat
object oWP1;
object oWP2; //point d'arrive du groupe 1 et 2
string sWP1;
string sWP2;
location lWP1;
location lWP2;

//------------------------------------------------------------>
//Fonctions
//-------------------------------------------------------------<

AssignEquip(oPlayer,oOrga); //met en 2 et si deja 2 dit qu'il y en a assez...
SetLocalString(oOrga,"TYPE","VSPJ");
if (GetLocalInt(oOrga,"GROUPE")==2) //Au deuxieme groupe qui lui parle...
{
object oMember3 = GetFirstFactionMember(oPlayer);//Membre du groupe
sArea = DetermineArea(); //Determine une arene alatoirement

lWP2 = DetermineWP2(sArea);
object oLeader1 = GetLocalObject(OBJECT_SELF,"CHEF_GROUPE1");

SignalEvent(GetArea(oLeader1),EventUserDefined(990));//teleporte le groupe 1 dans l'arene aleatoire au point d'arriv 1
while (oMember3!=OBJECT_INVALID)
{

AssignCommand(oMember3,ActionJumpToLocation(lWP2));//le groupe 2 va au dpart du groupe 2 ds l'arene aleatoire
SendMessageToPC(oMember3,"Le combat commence dans 5 secondes");
oMember3 = GetNextFactionMember(oPlayer);
}
}

}

Action si le groupe veut affronter des combattant d'arène : "arene_vspnj"

Citation :

/* Script d'arene qui va envoyer l'equipe 1 dans une arne alatoire.
Un adverse ou un groupe d'adversaires y attendra nos pjs ils feront parti de
l'une des 3 maisons d'arenes...*/
#include "arene_include"


void main()
{
//---------------------------------------------------------->
//Dclaration de variables
//----------------------------------------------------------<

object oOrga = OBJECT_SELF; //l'organisateur
object oPlayer = GetPCSpeaker(); //le joueur
object oGroupe1; //Ceux qui feront partie du groupe1
string sArea; //Nom de la zone de combat
object oWP1; //point d'arrive du groupe 1 (PNJ)
object oWP2; //point d'arrive du groupe 2 (PNJ)
string sWP1;
string sWP2;
location lWP1;
location lWP2;
string sMaison;
int i = 0;

//----------------------------------------------------------->
//Fonctions principales
//-----------------------------------------------------------<

AssignEquip(oPlayer,oOrga); //Met en groupe 1 le groupe de PJs

if (GetLocalInt(oOrga,"GROUPE")==1)//Le premier groupe qui lui parle sera teleporte dans l'arene
{
sArea = DetermineArea(); //Determine l'arene de combat
lWP1 = DetermineWP1(sArea);
lWP2 = DetermineWP2(sArea);

object oMember2 = GetFirstFactionMember(oPlayer);//Membre du groupe
//Determine le nom de la maison d'arene combattu
sMaison = DetermineMaison();
SetLocalString(oOrga,"MAISON",sMaison);
SetLocalString(oOrga,"AREA",sArea);
SetLocalString(oOrga,"TYPE","VSPNJ");


while (oMember2!=OBJECT_INVALID)
{ //Envoi les pjs dans l'arene
SendMessageToPC(oMember2,"Vous allez combattre la maison"+sMaison);
i = GetXP(oMember2);
SetLocalInt(oMember2,"XP",i);
AssignCommand(oMember2,ActionJumpToLocation(lWP1));
oMember2 = GetNextFactionMember(oPlayer);
}
object oEncounter = DetermineRencontre(sArea); //Determine le triguer de rencontre de zone
SignalEvent(oEncounter,EventUserDefined(991));
SetLocalInt(oOrga,"GROUPE",2);//Dit a l'orga que le groupe2 existe



}

}

Action si le groupe veut affronter des monstres : "arene_vsmonstr"
-----------------------------------------------------------------------------

Citation :

/* Script d'arene qui va envoyer l'equipe 1 dans une arne aleatoire.
Un monstre ou un groupe de monstre y attendra nos pjs
Par Pascal le 22/06/06...*/
#include "arene_include"


void main()
{
//---------------------------------------------------------->
//Dclaration de variables
//----------------------------------------------------------<

object oOrga = OBJECT_SELF; //l'organisateur
object oPlayer = GetPCSpeaker(); //le joueur
object oGroupe1; //Ceux qui feront partie du groupe1
string sArea; //Nom de la zone de combat
object oWP1; //point d'arrive du groupe 1 (PNJ)
object oWP2; //point d'arrive du groupe 2 (PNJ)
string sWP1;
string sWP2;
location lWP1;
location lWP2;
string sMaison;
int i;

//----------------------------------------------------------->
//Fonctions principales
//-----------------------------------------------------------<

AssignEquip(oPlayer,oOrga); //Met en groupe 1 le groupe de PJs

if (GetLocalInt(oOrga,"GROUPE")==1)//Le premier groupe qui lui parle sera teleporte dans l'arene
{
sArea = DetermineArea(); //Determine l'arene de combat
lWP1 = DetermineWP1(sArea);
lWP2 = DetermineWP2(sArea);

object oMember2 = GetFirstFactionMember(oPlayer);//Membre du groupe


SetLocalString(oOrga,"AREA",sArea);

SetLocalString(oOrga,"TYPE","VSMONSTR");


while (oMember2!=OBJECT_INVALID)
{ //Envoi les pjs dans l'arene
SendMessageToPC(oMember2,"Vous allez combattre la maison"+sMaison);
i = GetXP(oMember2);
SetLocalInt(oMember2,"XP",i);
AssignCommand(oMember2,ActionJumpToLocation(lWP1));
oMember2 = GetNextFactionMember(oPlayer);
}
object oEncounter = DetermineMonstre(sArea); //Determine le triguer de rencontre de zone
SignalEvent(oEncounter,EventUserDefined(991));
SetLocalInt(oOrga,"GROUPE",2);//Dit a l'orga que le groupe2 existe



}

}


Dernière édition par le Mar 27 Juin - 20:56, édité 4 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Parti arene   [DIVERS] Les combats d' arènes EmptyDim 18 Juin - 0:49

Voici les scripts liés à la salle d'attente
------------------------------------------------------

Onenter :

Citation :

/*Ce script est a mettre dans le OnEnter de la salle d'attente pour les combats
d'arenes entre PJ...
Il va procder un decompte d'une minute. Si au bout d'une minute le groupe 2 ne
s'est pas presenté. Alors les PJs seront renvoyés a SM nord.
Par Pascal le 08/06/2006*/
#include "arene_include"

void EnvoiMessage(object oPlayer, string sMsg)
{
if (GetTag (GetArea(oPlayer))=="salledattente")
{
object oMember4 = GetFirstFactionMember(oPlayer);
while (oMember4 !=OBJECT_INVALID)
{
SendMessageToPC(oMember4,sMsg); //Envoi le compte a rebours a chaque membres du groupe
}
}
}

void main()
{
object oPlayer=GetEnteringObject();

string sMsg;

object oOrga = GetObjectByTag("Organisateur");
location lorganisateur = GetLocation (oOrga);

if (GetIsPC(oPlayer)==TRUE)
{
sMsg = "Le combat commence des que le groupe 2 arrive, sinon apres 60s vous serez renvoye SM nord";
EnvoiMessage(oPlayer,sMsg);
DelayCommand(60.0,SignalEvent(GetArea(oPlayer),EventUserDefined(1000))); //retourne en ville

}
}

Onuserevent :

Citation :

//Si le groupe 2 ne s'est pas presente, un signal 1000 est envoye et le
//groupe retourne SM
#include"arene_include"
void main()
{
int nUser = GetUserDefinedEventNumber();
object oPlayer;
object oMember;
object oMember5;
object oOrga = GetObjectByTag("Organisateur");
string sArea = GetLocalString(oOrga,"AREA");
location lorganisateur = GetLocation(oOrga);

if (nUser == 1000)//si pas de groupe 2
{
oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,GetObjectByTag("WP_attente"));
oMember5 = GetFirstFactionMember(oPlayer);
if (GetLocalInt(oOrga,"GROUPE")==1)
{
while (oMember5 != OBJECT_INVALID)
{
SendMessageToPC(oMember5,"Le groupe 2 ne s'est pas presenté. Vous allez être renvoyé en ville");
AssignCommand(oMember5,JumpToLocation(lorganisateur));//renvoi pres de l'orga
ResetPC1(oMember5);
ResetOrga(oOrga);
oMember5 = GetNextFactionMember(oPlayer);
}
}

}
if (nUser == 990) //si il y a groupe 2
{
oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,GetObjectByTag("WP_attente"));
oMember = GetFirstFactionMember(oPlayer);
while (oMember != OBJECT_INVALID)
{

SendMessageToPC(oMember,"Le combat va commencer !");
location lWP1 =DetermineWP1(sArea);
AssignCommand(oMember,JumpToLocation(lWP1)); //renvoi pres de l'orga
oMember = GetNextFactionMember(oPlayer);
}
}

}

A l'entré d'une arène :

Citation :

/*Ce script va permettre de geler les PJs pour attendre que tous le monde soit
la avant de commencer le combat
Par Pascal le 12/06/06*/


void main()
{
object oPlayer = GetEnteringObject();

SendMessageToPC(oPlayer, "Le combat commence !");


}

Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: à la mort   [DIVERS] Les combats d' arènes EmptyDim 18 Juin - 0:51

Scripts liées à la mort d'un pj en arène
-----------------------------------------------------

Ondeath :
Citation :

//::///////////////////////////////////////////////
//:: Death Script
//:: NW_O0_DEATH.NSS
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script handles the default behavior
that occurs when a player dies.

BK: October 8 2002: Overriden for Expansion
*/
//:://////////////////////////////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:://////////////////////////////////////////////

#include "ff_include"

void Death(object oPlayer)
{
object oFaction;
int i;
object oOrga = GetObjectByTag("Organisateur");
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");

if(GetCurrentHitPoints(oPlayer)<=0)
{
ff_FlushData(oPlayer);

object oAlderman = GetLocalObject(oPlayer,"ALDERMAN");
if(GetIsObjectValid(oAlderman) == TRUE)
SignalEvent(oAlderman,EventUserDefined(999));
if (oPlayer == oLeader1)
SignalEvent(oOrga,EventUserDefined(996));
else if ((oPlayer == oLeader1)&&(GetLocalString(oOrga,"TYPE")!="VSPJ"))
SignalEvent(oOrga,EventUserDefined(994));
if (oPlayer == oLeader2)
SignalEvent(oOrga,EventUserDefined(1000));


Ondying :

Citation :

#include "functions"

void main()
{
/* AssignCommand(GetLastPlayerDying(), ClearAllActions());
AssignCommand(GetLastPlayerDying(),SpeakString( "I Dying"));
PopUpGUIPanel(GetLastPlayerDying(),GUI_PANEL_PLAYER_DEATH);
*/
// * April 14 2002: Hiding the death part from player
effect eDeath = EffectDeath(FALSE, FALSE);
object oPlayer = GetLastPlayerDying();
object oBattlefield;
object oOrga = GetObjectByTag("Organisateur");
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");

AssignCommand(GetLastPlayerDying(), ClearAllActions());
if(GetLocalInt(oPlayer,"WAR")==TRUE)
{
oBattlefield = GetObjectByTag("Battlefield");
SetLocalObject(oBattlefield ,"LOOSER",oPlayer);
SetLocalObject(oBattlefield ,"WINNER",GetLocalObject(oPlayer,"ENEMY"));
SignalEvent(oBattlefield,EventUserDefined(1000));
}
if (oPlayer == oLeader1)
SignalEvent(oOrga,EventUserDefined(996));
else if ((oPlayer == oLeader1)&&(GetLocalString(oOrga,"TYPE")!="VSPJ"))
SignalEvent(oOrga,EventUserDefined(994));
else if (oPlayer == oLeader2)
SignalEvent(oOrga,EventUserDefined(1000));


Dernière édition par le Mar 27 Juin - 20:45, édité 1 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Le final   [DIVERS] Les combats d' arènes EmptyDim 18 Juin - 0:52

Et voici le fichier "arene_include" qui contiens les fonctions principales...

Citation :

/*Script inclure dans les scripts d'arne, contenant les fonctions principale
utilises tous au long de l'criture sur les arnes, pour chaque evenement...
Par Pascal le 01/06/2006
---------------------------------------
Liste des principale fonctions :
---------------------------------------

1) DetermineArea() : Permet de mettre en variable "sArea" le tag d'une des
4 map d'arene de maniere aleatoire...
2) AssignEquip (oMember) : Permet d'assigner un groupe de joueur dans une
des deux equipe disponibles.
3)Teleportation : Envoi le groupe 1 dans l'arene aleatoire sur le WP1
4)DetermineWP : Determine le waypoint en fonction de l'arene.
5)Reset : Remet zero les variable locales
6)Compteur : fonction quicompte le nombre de PJ dans le groupe....pas utilisee
7)DetermineLevel: fonction qui va determiner le niveau de tous les pjs du groupe
8)DetermineMaison : Fonction qui dtermine la maison d'arene que le pj combat
9)DetermineRencontre : Determine quelle rencontre va etre activee en fonction de l'arene
10)DetermineMonstre : Determine quelle rencontre va etre activee en fonction de l'arene
*/////////////////////////////////////////////////////////////////////////////

//---------------------------------------------------
//Fonction qui determine une zone aleatoire de combat
//---------------------------------------------------
string DetermineArea ()
{
string sArea;
object oOrga = GetObjectByTag("Organisateur");
int i = Random(100); //Un chiffre entre 0 et 99
if ((i>=0)&&(i<25))
sArea = "arene1";
else if ((i>=25)&&(i<50))
sArea = "arene2";
else if ((i>=50)&&(i<75))
sArea = "arene3";
else if ((i>=75)&&(i<100))
sArea = "arene4";

SetLocalString(oOrga,"AREA",sArea);
return sArea;
}


//---------------------------------------------------------
//Fonction qui assigne une equipe aux membres de la faction
//---------------------------------------------------------

void AssignEquip(object oPlayer, object oOrga)
{
int f = GetLocalInt(oOrga,"GROUPE");
int j = 0;
object oMember = GetFirstFactionMember(oPlayer);
object oLeader = GetFactionLeader(oPlayer);


if (f ==0)
{
while (oMember != OBJECT_INVALID)
{
SetLocalInt (oMember,"EQUIPE",1); //Assigne la variable "EQUIP" de chaque membre du groupe la variable 1...
SendMessageToPC(oMember,"Vous faites partie de l'equipe 1");
oMember =GetNextFactionMember(oPlayer);

}
SetLocalInt(oOrga,"GROUPE",1);
SetLocalObject (oOrga,"CHEF_GROUPE1",oLeader);//Assign l'objet "chef du groupe1" a l'organisateur par la variable "CHEF_GOUPE1"

}
else if (f ==1)
{
while (oMember != OBJECT_INVALID)
{
SetLocalInt (oMember,"EQUIPE",2); //Assigne la variable "EQUIP" de chaque membre du groupe la variable 2...
SendMessageToPC(oMember,"Vous faites partie de l'equipe 2");
j++;
oMember = GetNextFactionMember(oPlayer);

}
SetLocalInt(oOrga,"GROUPE",2);
SetLocalObject (oOrga,"CHEF_GROUPE2",oLeader);//Assign l'objet "chef du groupe2" a l'organisateur par la variable "CHEF_GOUPE2"

}
else if (f==2)
{
AssignCommand(oOrga,ActionSpeakString ("Désolé mais il y a deja deux groupes qui s'affrontent...patientez un peu..."));

}

}
//----------------------------------------------------------------------
//Fonction qui definis le point de teleportation en fonction de la zone
//----------------------------------------------------------------------
location DetermineWP1(string sArea)//Determine le point d'arrive du groupe 1
{
object oWP1;
location lWP1;
object oOrga = GetObjectByTag("Organisateur");

if (sArea =="arene1")
{
lWP1 = GetLocation(GetObjectByTag("AR1_Player1"));
}
else if (sArea =="arene2")
{
lWP1 = GetLocation(GetObjectByTag("AR2_Player1"));

}
else if (sArea =="arene3")
{
lWP1 = GetLocation(GetObjectByTag("AR3_Player1"));

}
else if (sArea =="arene4")
{
lWP1 = GetLocation(GetObjectByTag("AR4_Player1"));

}
else if (sArea =="")
{
AssignCommand(oOrga,ActionSpeakString("Un probleme est survenu a l'asignement d'arene"));

}
return lWP1;

}

location DetermineWP2(string sArea) //Determine le point d'arrive du groupe 2
{
object oWP2;
location lWP2;
object oOrga = GetObjectByTag("Organisateur");

if (sArea =="arene1")
{

lWP2 = GetLocation(GetObjectByTag("AR1_Player2"));
}
else if (sArea =="arene2")
{

lWP2 = GetLocation(GetObjectByTag("AR2_Player2"));
}
else if (sArea =="arene3")
{

lWP2 = GetLocation(GetObjectByTag("AR3_Player2"));
}
else if (sArea =="arene4")
{

lWP2 = GetLocation(GetObjectByTag("AR4_Player2"));
}
else if (sArea =="")
{
AssignCommand(oOrga,ActionSpeakString("Un probleme est survenu a l'asignement d'arene"));

}

return lWP2;
}

//---------------------------------------------------------
//Fonction qui teleporte le groupe 1 dans la zone de combat
//----------------------------------------------------------
void Teleportation(location lWP1,object oWP0)
{

object oGroupe1 = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,oWP0);
object oMemberG = GetFirstFactionMember(oGroupe1);

while (oMemberG !=OBJECT_INVALID)
{
AssignCommand(oMemberG,ActionJumpToLocation(lWP1));
SetCommandable(FALSE,oMemberG);
DelayCommand(10.0,SetCommandable(TRUE,oMemberG));
SendMessageToPC(oMemberG,"Le combat commence dans 10 secondes");
oMemberG = GetNextFactionMember(oGroupe1);
}
}

//-----------------------------------------
//Fonction de reset joueur et orga
//-----------------------------------------
void ResetPC1 (object oMember1)
{
DeleteLocalInt(oMember1,"EQUIPE");

}
void ResetPC2 (object oMember2)
{
DeleteLocalInt(oMember2,"EQUIPE");

}

void ResetOrga (object oOrga)
{

DeleteLocalInt(oOrga,"GROUPE");
DeleteLocalObject(oOrga,"CHEF_GROUPE1");
DeleteLocalObject(oOrga,"CHEF_GROUPE2");
DeleteLocalString(oOrga,"AREA");
DeleteLocalString(oOrga,"MAISON");
DeleteLocalString(oOrga,"TYPE");

}

//---------------------------------------------------
//Fonction qui compte le nombre de PJs dans le groupe
//---------------------------------------------------

int Compteur (object oPlayer)
{
object oMember8 = GetFirstFactionMember(oPlayer);
int a = 0;

while (oMember8 !=OBJECT_INVALID)
{
a++;
oMember8 = GetNextFactionMember(oPlayer);
}
return a;
}

//-----------------------------------------------------------------------
//Fonction qui determine le niveau total de tous les membres du groupe 1
//-----------------------------------------------------------------------

int DetermineLevel (object oPlayer)
{
int iLevelTotal = 0;
int iLevel;
int iLevel1;
int iLevel2;
int iLevel3;
object oMember9 = GetFirstFactionMember(oPlayer);

while (oMember9 != OBJECT_INVALID)
{
iLevel1 = GetLevelByPosition(1,oMember9);
iLevel2 = GetLevelByPosition(2,oMember9);
iLevel3 = GetLevelByPosition(3,oMember9);
iLevel = iLevel1 + iLevel2 + iLevel3;
iLevelTotal += iLevel;
oMember9 = GetNextFactionMember(oPlayer);
}
return iLevelTotal;
}

//-------------------------------------------------------------------------
//Fonction qui determine aleatoirement une des maisons d'arene de SM
//-------------------------------------------------------------------------

string DetermineMaison ()
{
int b = Random(3)+1;
string sMaison;
if (b==1)
sMaison = "Cassius";
else if (b==2)
sMaison = "Belly";
else if (b==3)
sMaison = "Morden";
return sMaison;
}

//--------------------------------------------------------------------------
//Fonction qui va determiner la rencontre aleatoire des combattants d'arene
//--------------------------------------------------------------------------
object DetermineRencontre (string sArea)
{
object oEncounter; //Permet de savoir quel triguer de rencontre activer selon la map
if (sArea=="arene1")
oEncounter = GetObjectByTag("arene_maison1");
if (sArea=="arene2")
oEncounter = GetObjectByTag("arene_maison2");
if (sArea=="arene3")
oEncounter = GetObjectByTag("arene_maison3");
if (sArea=="arene4")
oEncounter = GetObjectByTag("arene_maison4");
return oEncounter;
}
//--------------------------------------------------------------------------
//Fonction qui va determiner la rencontre aleatoire des monstres d'arene
//--------------------------------------------------------------------------
object DetermineMonstre (string sArea)
{
object oEncounter; //Permet de savoir quel triguer de rencontre activer selon la map
if (sArea=="arene1")
oEncounter = GetObjectByTag("arene_monstre1");
if (sArea=="arene2")
oEncounter = GetObjectByTag("arene_monstre2");
if (sArea=="arene3")
oEncounter = GetObjectByTag("arene_monstre3");
if (sArea=="arene4")
oEncounter = GetObjectByTag("arene_monstre4");
return oEncounter;
}


Dernière édition par le Mar 27 Juin - 18:57, édité 1 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Explications :   [DIVERS] Les combats d' arènes EmptyDim 18 Juin - 0:52

Voici le Onuser_define de l'orga qui declenche l'après combat


Onuser event :

Citation :




//::///////////////////////////////////////////////
//:: Custom User Defined Event
//:: FileName
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*

*/
//:://////////////////////////////////////////////
//:: Created By:
//:: Created On:
//:://////////////////////////////////////////////
#include"functions"
#include"arene_include"
void main()
{

////////////////////////////////////////////////////
//Declaration de variables
///////////////////////////////////////////////////
int nUser = GetUserDefinedEventNumber();
int j;
object oOrga = OBJECT_SELF;
location lorga = GetLocation(GetObjectByTag("WP_Orga"));
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");
int Level2 = (GetLevelByPosition(1,oLeader2)+GetLevelByPosition(2,oLeader2)+GetLevelByPosition(3,oLeader2));
int Level1 = (GetLevelByPosition(1,oLeader1)+GetLevelByPosition(2,oLeader1)+GetLevelByPosition(3,oLeader1));
int g = (Level2-1)*50;
int h = (Level1-1)*50;
int f = (Level1-1)*25;
int iXP;
int iXP2;
int iXP3;
int iXP4;

///////////////////////////////////////////////////////////
//Fonctions
////////////////////////////////////////////////////////


//Equipe 1 a perdu
if(nUser == 996)
{
object oMember1 = GetFirstFactionMember(oLeader1);
object oMember2 = GetFirstFactionMember(oLeader2);

while (oMember1!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
DelayCommand(1.0,AssignCommand(oMember1,ActionJumpToLocation(lorga)));
ResetPC1(oMember1);
SendMessageToPC(oMember1,"Votre equipe a perdu ! Vous perdez 10 pts d'honneur !");
j = GetHonor(oMember1);
SetHonor(oMember1,j-10);
oMember1 =GetNextFactionMember(oLeader1);

}

while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember2,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember2);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember2);
DelayCommand(1.0,AssignCommand(oMember2,ActionJumpToLocation(lorga)));

j = GetHonor(oMember2);
if (Level2>Level1) //Si celui qui gagne etait plus haut niveau
{
SetHonor(oMember2,j+20); //donne 20 honneur
GiveGoldToCreature(oMember2,h); //donne argent en fct niv adv
SendMessageToPC(oMember2,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(h)+" pieces d'or !");
}
if (Level2<=Level1) //Si celui qui gagne etait moins haut niveau
{
SetHonor(oMember2,j+50); //donne 50 honneur
GiveGoldToCreature(oMember2,h);//donne argent en fct niv adv
SendMessageToPC(oMember2,"Votre equipe a gagne ! Vous gagnez 50 pts d'honneur ! Les paris vous rapportent "+IntToString(h)+" pieces d'or !");
}

ResetPC1(oMember2);
AssignCommand(oMember2,ClearAllActions(TRUE));
oMember2 =GetNextFactionMember(oLeader2);

}
ResetOrga(oOrga);

}

// equipe 2 a perdu contre equipe 1
else if(nUser == 1000)
{
object oMember1 = GetFirstFactionMember(oLeader1);
while (oMember1!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
DelayCommand(1.0,AssignCommand(oMember1,ActionJumpToLocation(lorga)));
ResetPC1(oMember1);

int j = GetHonor(oMember1);
if (Level1>Level2) //Si celui qui gagne etait plus haut niveau
{
SetHonor(oMember1,j+20); //donne 20 honneur
GiveGoldToCreature(oMember1,g); //donne argent en fct niv adv
SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(g)+" pieces d'or !");
}
if (Level1<=Level2) //Si celui qui gagne etait moins haut niveau
{
SetHonor(oMember1,j+50); //donne 50 honneur
GiveGoldToCreature(oMember1,g);//donne argent en fct niv adv
SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 50 pts d'honneur ! Les paris vous rapportent "+IntToString(g)+" pieces d'or !");
}

AssignCommand(oMember1,ClearAllActions(TRUE));
oMember1 = GetNextFactionMember(oLeader1);
}
object oMember2 = GetFirstFactionMember(oLeader2);
while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember2);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000),oMember2);
DelayCommand(1.0,AssignCommand(oMember2,ActionJumpToLocation(lorga)));
SendMessageToPC(oMember2,"Votre equipe a perdu ! Vous perdez 10 pts d'honneur !");
int j = GetHonor(oMember2);
SetHonor(oMember2,j-10);

ResetPC2(oMember2);
oMember2 = GetNextFactionMember(oLeader2);
}
ResetOrga(oOrga);
}


//Equipe 1 a gagne contre maison des arenes ou contre monstres...

else if(nUser == 992)
{
object oMember1 = GetFirstFactionMember(oLeader1);
while (oMember1!=OBJECT_INVALID)
{

ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
DelayCommand(1.0,AssignCommand(oMember1,ActionJumpToLocation(lorga)));

SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(f)+" pieces d'or !");
int j = GetHonor(oMember1);
SetHonor(oMember1,j+20);
int iXP = GetLocalInt(oMember1,"XP");
if (iXP !=0)
{
iXP2 = GetXP(oMember1);
iXP3 = ((iXP2-iXP)/5);
iXP4 = iXP + iXP3;
SetXP(oMember1,iXP4);
}
SendMessageToPC(oMember1,"Vous avez gagne "+IntToString(iXP3)+" XP !");
GiveGoldToCreature(oMember1,f);
ResetPC1(oMember1);
oMember1 = GetNextFactionMember(oLeader1);
}
ResetOrga(oOrga);
}

else if(nUser == 994)
{
object oMember1 = GetFirstFactionMember(oLeader1);
while (oMember1!=OBJECT_INVALID)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);

DelayCommand(1.0,AssignCommand(oMember1,ActionJumpToLocation(lorga)));
ResetPC1(oMember1);
SendMessageToPC(oMember1,"Votre equipe perdu ! Vous perdez 10 pts d'honneur !");
int j = GetHonor(oMember1);
SetHonor(oMember1,j-10);
oMember1 = GetNextFactionMember(oLeader1);
}
ResetOrga(oOrga);
}
}



Dernière édition par le Mar 27 Juin - 19:58, édité 1 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: suite script arene   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 12:05

Voici les scripts liés a l'activation des rencontres dans les arenes
------------------------------------------------------------------------------


Citation :

script OnExausted
-------------------

/*Lorsque toutes les creatures sont mortes, un signal est envoye a l'organisateur
Par Pascal le 22/06/06*/

void main()
{
object oOrga = GetObjectByTag("Organisateur");
SignalEvent(oOrga,EventUserDefined(992));
}


script Onused
----------------

/*Script qui est enclenché si les PJS sont envoyes dans cette arene. Le script
active la rencontre contre des combattant des arenes.
Par pascal le 22/06/06*/

void main()
{
int nUser = GetUserDefinedEventNumber();

if(nUser == 991) //signal de l'organisateur (993 pour les monstres)
{
SetEncounterActive(TRUE,OBJECT_SELF);
}
}


Dernière édition par le Mar 27 Juin - 20:50, édité 1 fois
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: EXPLICATION SUR LES COMBATS PJ VS PJ   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 12:15

EXPLICATION SUR LES COMBATS PJ VS PJ


Le PJ entame le dialogue avec l'organisateur de combat.

- Si un combat est dejà en cours dans une arene :
Citation :

//Verifie si il n'y a pas deja deux groupe en train de combattre...
//Par pascal le 02/06/06
#include"functions"

int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;

if (GetLocalInt(oOrga,"GROUPE")==2)
iResult = TRUE;
return iResult;
}
C'est à dire si l'organisateur à pour variable "GROUPE"=2, il repond "Un combat est déjà en cours"

- Si un premier groupe s'est déjà présenté et attend en salle d'attente



Citation :

//Verifie si il n'y a pas deja un groupe en attente...
//Par pascal le 02/06/06
#include"functions"

int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;

if (GetLocalInt(oOrga,"GROUPE")==1)
iResult = TRUE;
return iResult;
}

Dans ce cas, l'orga enclenche l'action "arene_vspj_2"

- Si le groupe 1 s'est présenté mais n'est PAS ENCORE dans la salle d'attente
Citation :

//Verifie qu'il y a quelqu'un en salle d'attente si le groupe 1 est deja actif
//Par pascal le 16/06/06


int StartingConditional()
{
int iResult;
object oOrga = OBJECT_SELF;
object oWP0 = GetObjectByTag("WP_attente");
object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,oWP0);

if ((oPlayer==OBJECT_INVALID)&&(GetLocalInt(oOrga,"GROUPE")==1))
iResult = TRUE;
else
iResult = FALSE;
return iResult;
}

Dans ce cas l'orga répond "Le groupe 1 n'est pas encore près revenez me voir dans quelques secondes"

- Si aucun groupe ne s'est présenté (par defaut)
Alors l'orga enclenche le script "arene_vspj_1"


arene_vspj_1


En premier lieu, on assigne le groupe de PJs à une equipe :
Citation :
AssignEquip(oPlayer,oOrga);
Cette fonction est détaillée dans le arene_include :
Citation :

void AssignEquip(object oPlayer, object oOrga)
{
int f = GetLocalInt(oOrga,"GROUPE");
int j = 0;
object oMember = GetFirstFactionMember(oPlayer);
object oLeader = GetFactionLeader(oPlayer);


if (f ==0)
{
while (oMember != OBJECT_INVALID)
{
SetLocalInt (oMember,"EQUIPE",1); //Assigne la variable "EQUIP" de chaque membre du groupe la variable 1...
SendMessageToPC(oMember,"Vous faites partie de l'equipe 1");
oMember =GetNextFactionMember(oPlayer);

}
SetLocalInt(oOrga,"GROUPE",1);
SetLocalObject (oOrga,"CHEF_GROUPE1",oLeader);//Assign l'objet "chef du groupe1" a l'organisateur par la variable "CHEF_GOUPE1"

}
else if (f ==1)
{
while (oMember != OBJECT_INVALID)
{
SetLocalInt (oMember,"EQUIPE",2); //Assigne la variable "EQUIP" de chaque membre du groupe la variable 2...
SendMessageToPC(oMember,"Vous faites partie de l'equipe 2");
j++;
oMember = GetNextFactionMember(oPlayer);

}
SetLocalInt(oOrga,"GROUPE",2);
SetLocalObject (oOrga,"CHEF_GROUPE2",oLeader);//Assign l'objet "chef du groupe2" a l'organisateur par la variable "CHEF_GOUPE2"

}
else if (f==2)
{
AssignCommand(oOrga,ActionSpeakString ("Désolé mais il y a deja deux groupes qui s'affrontent...patientez un peu..."));

}

}
S'il n'y a pas de GROUPE présent, l'equipe du joueur font partie du groupe 1. Le Leader du groupe est entré en variable objet "CHEF_GROUPE1" dans l'organisateur.
La variable de GROUPE est implémenté à 1.

Si le GROUPE 1 s'est déjà présenté, alors l'equipe du joueur fait partie du groupe 2 et le leader est entré en objet dans la variable "CHEF_GROUPE2" de l'orga...
La variable de GROUPE est implémenté à 2.

Si les 2 GROUPE se sont présentés alors pas d'autres groupe définis (deviens inutile avec les conditions du dialogue de l'orga....)

En deuxièmes action on envoi tous les membres du groupe en salle d'attente
Citation :

while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember2,ActionJumpToLocation(lWP0));
oMember2 = GetNextFactionMember(oPlayer);
}

Et si le Groupe 2 ne se présente pas ?


Le cas a été prévu et le script OnEnter de la salle d'attente envoi un signal au bout de 1 min sur le OnUserdefine de la même salle...:

Citation :

/*Ce script est a mettre dans le OnEnter de la salle d'attente pour les combats
d'arenes entre PJ...
Il va procder un decompte d'une minute. Si au bout d'une minute le groupe 2 ne
s'est pas presenté. Alors les PJs seront renvoyés a SM nord.
Par Pascal le 08/06/2006*/
#include "arene_include"

void EnvoiMessage(object oPlayer, string sMsg)
{
if (GetTag (GetArea(oPlayer))=="salledattente")
{
object oMember4 = GetFirstFactionMember(oPlayer);
while (oMember4 !=OBJECT_INVALID)
{
SendMessageToPC(oMember4,sMsg); //Envoi le compte a rebours a chaque membres du groupe
}
}
}

void main()
{
object oPlayer=GetEnteringObject();

string sMsg;

object oOrga = GetObjectByTag("Organisateur");
location lorganisateur = GetLocation (oOrga);

if (GetIsPC(oPlayer)==TRUE)
{
sMsg = "Le combat commence des que le groupe 2 arrive, sinon apres 60s vous serez renvoye SM nord";
EnvoiMessage(oPlayer,sMsg);
DelayCommand(60.0,SignalEvent(GetArea(oPlayer),EventUserDefined(1000))); //retourne en ville

}
}

Lorsque l'on entre dans la salle d'attente, un Event est envoyé au bout de 60s...

Et au bout de 60s :
Citation :

//Si le groupe 2 ne s'est pas presente, un signal 1000 est envoye et le
//groupe retourne SM
#include"arene_include"
void main()
{
int nUser = GetUserDefinedEventNumber();
object oPlayer;
object oMember;
object oMember5;
object oOrga = GetObjectByTag("Organisateur");
string sArea = GetLocalString(oOrga,"AREA");
location lorganisateur = GetLocation(oOrga);

if (nUser == 1000)//si pas de groupe 2
{
oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,GetObjectByTag("WP_attente"));
oMember5 = GetFirstFactionMember(oPlayer);
if (GetLocalInt(oOrga,"GROUPE")==1)
{
while (oMember5 != OBJECT_INVALID)
{
SendMessageToPC(oMember5,"Le groupe 2 ne s'est pas presenté. Vous allez être renvoyé en ville");
AssignCommand(oMember5,JumpToLocation(lorganisateur));//renvoi pres de l'orga
ResetPC1(oMember5);
ResetOrga(oOrga);
oMember5 = GetNextFactionMember(oPlayer);
}
}

}
if (nUser == 990) //si il y a groupe 2
{
oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,GetObjectByTag("WP_attente"));
oMember = GetFirstFactionMember(oPlayer);
while (oMember != OBJECT_INVALID)
{

SendMessageToPC(oMember,"Le combat va commencer !");
location lWP1 =DetermineWP1(sArea);
AssignCommand(oMember,JumpToLocation(lWP1)); //renvoi pres de l'orga
oMember = GetNextFactionMember(oPlayer);
}
}

}


Si le groupe 2 ne s'est pas presenté le groupe 1 retourne en ville, si le groupe 2 s'est présenté, le signal event 990 téléporte (même avant 60s) les pjs dans l'arene et le event 1000 ne fait rien car il n'y a pas de PC dans la piece !

arene_vspj_2


Lorsque le groupe 2 se présente, l'orga leur assigne un groupe (le 2 !)

Citation :
AssignEquip(oPlayer,oOrga);

Puis on [determine aleatoirement une arene[/b]
Citation :
sArea = DetermineArea();

On se rapporte au fichier "arene_include"
Citation :
string DetermineArea ()
{
string sArea;
object oOrga = GetObjectByTag("Organisateur");
int i = Random(100); //Un chiffre entre 0 et 99
if ((i>=0)&&(i<25))
sArea = "arene1";
else if ((i>=25)&&(i<50))
sArea = "arene2";
else if ((i>=50)&&(i<75))
sArea = "arene3";
else if ((i>=75)&&(i<100))
sArea = "arene4";

SetLocalString(oOrga,"AREA",sArea);
return sArea;
}
On récupère sArea qui est le Tag de la zone d'arene

Ensuite, on détermine le point d'arrivée du groupe 2 :
Citation :
lWP2 = DetermineWP2(sArea);
Dont le détail est dans le fichier "arene_include" :
Citation :

location DetermineWP2(string sArea) //Determine le point d'arrive du groupe 2
{
object oWP2;
location lWP2;
object oOrga = GetObjectByTag("Organisateur");

if (sArea =="arene1")
{

lWP2 = GetLocation(GetObjectByTag("AR1_Player2"));
}
else if (sArea =="arene2")
{

lWP2 = GetLocation(GetObjectByTag("AR2_Player2"));
}
else if (sArea =="arene3")
{

lWP2 = GetLocation(GetObjectByTag("AR3_Player2"));
}
else if (sArea =="arene4")
{

lWP2 = GetLocation(GetObjectByTag("AR4_Player2"));
}
else if (sArea =="")
{
AssignCommand(oOrga,ActionSpeakString("Un probleme est survenu a l'asignement d'arene"));

}

return lWP2;
}

Puis on envoi un signal a la salle d'attente pour qu'elle teleporte le groupe 1 au point de teleportation 1 de la même zone:
Citation :
SignalEvent(GetArea(oLeader1),EventUserDefined(990));

Puis le groupe 2 est envoyé dans l'arène :
Citation :
while (oMember3!=OBJECT_INVALID)
{

AssignCommand(oMember3,ActionJumpToLocation(lWP2));//le groupe 2 va au dpart du groupe 2 ds l'arene aleatoire
SendMessageToPC(oMember3,"Le combat commence dans 5 secondes");
oMember3 = GetNextFactionMember(oPlayer);
}

Le combat commence...

Lorsque l'un des Leader meurt le script du module OnDeath envoi un signal à l'organisateur :

Citation :
//::///////////////////////////////////////////////
//:: Death Script
//:: NW_O0_DEATH.NSS
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script handles the default behavior
that occurs when a player dies.

BK: October 8 2002: Overriden for Expansion
*/
//:://////////////////////////////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:://////////////////////////////////////////////

#include "ff_include"

void Death(object oPlayer)
{
object oFaction;
int i;
object oOrga = GetObjectByTag("Organisateur");
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");

if(GetCurrentHitPoints(oPlayer)<=0)
{
ff_FlushData(oPlayer);

object oAlderman = GetLocalObject(oPlayer,"ALDERMAN");
if(GetIsObjectValid(oAlderman) == TRUE)
SignalEvent(oAlderman,EventUserDefined(999));
if (oPlayer == oLeader1)
SignalEvent(oOrga,EventUserDefined(996));
if (oPlayer == oLeader2)
SignalEvent(oOrga,EventUserDefined(1000));
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: RESULTAT PJ VS PJ   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 13:10

Si le Leader du groupe 1 est mort alors on envoi un signal à l'orga pour dire que le groupe 1 a perdu et le groupe 2 a gagné :
Citation :

void main()
{
int nUser = GetUserDefinedEventNumber();
int j;
object oOrga = OBJECT_SELF;
location lorga = GetLocation(GetObjectByTag("WP_Orga"));
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");
int Level2 = (GetLevelByPosition(1,oLeader2)+GetLevelByPosition(2,oLeader2)+GetLevelByPosition(3,oLeader2));
int Level1 = (GetLevelByPosition(1,oLeader1)+GetLevelByPosition(2,oLeader1)+GetLevelByPosition(3,oLeader1));
int g = (Level2-1)*50;
int h = (Level1-1)*50;
int f = (Level1-1)*25;


if(nUser == 996) //Equipe 1 a perdu
{
object oMember1 = GetFirstFactionMember(oLeader1);
object oMember2 = GetFirstFactionMember(oLeader2);

while (oMember1!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
AssignCommand(oMember1,ActionWait(5.0));
ResetPC1(oMember1);
SendMessageToPC(oMember1,"Votre equipe a perdu ! Vous perdez 10 pts d'honneur !");
j = GetHonor(oMember1);
SetHonor(oMember1,j-10);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
AssignCommand(oMember1,ActionJumpToLocation(lorga));
AssignCommand(oMember1,ClearAllActions(TRUE));

oMember1 =GetNextFactionMember(oLeader1);

}

while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember2,ClearAllActions());
AssignCommand(oMember2,ActionWait(5.0));

j = GetHonor(oMember2);
if (Level2>Level1) //Si celui qui gagne etait plus haut niveau
{
SetHonor(oMember2,j+20); //donne 20 honneur
GiveGoldToCreature(oMember2,h); //donne argent en fct niv adv
SendMessageToPC(oMember2,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(h)+" pieces d'or !");
}
if (Level2<=Level1) //Si celui qui gagne etait moins haut niveau
{
SetHonor(oMember2,j+50); //donne 50 honneur
GiveGoldToCreature(oMember2,h);//donne argent en fct niv adv
SendMessageToPC(oMember2,"Votre equipe a gagne ! Vous gagnez 50 pts d'honneur ! Les paris vous rapportent "+IntToString(h)+" pieces d'or !");
}
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember2);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember2);
AssignCommand(oMember2,ActionJumpToLocation(lorga));
ResetPC1(oMember2);
AssignCommand(oMember2,ClearAllActions(TRUE));
oMember2 =GetNextFactionMember(oLeader2);

}
ResetOrga(oOrga);

}

Si c'est le groupe 2 qui a perdu :
Citation :

else if(nUser == 1000) // equipe 2 a perdu contre equipe 1
{
object oMember1 = GetFirstFactionMember(oLeader1);
while (oMember1!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
AssignCommand(oMember1,ActionWait(5.0));

int j = GetHonor(oMember1);
if (Level1>Level2) //Si celui qui gagne etait plus haut niveau
{
SetHonor(oMember1,j+20); //donne 20 honneur
GiveGoldToCreature(oMember1,g); //donne argent en fct niv adv
SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(g)+" pieces d'or !");
}
if (Level1<=Level2) //Si celui qui gagne etait moins haut niveau
{
SetHonor(oMember1,j+50); //donne 50 honneur
GiveGoldToCreature(oMember1,g);//donne argent en fct niv adv
SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 50 pts d'honneur ! Les paris vous rapportent "+IntToString(g)+" pieces d'or !");
}
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
AssignCommand(oMember1,ActionJumpToLocation(lorga));
ResetPC1(oMember1);
AssignCommand(oMember1,ClearAllActions(TRUE));
oMember1 = GetNextFactionMember(oLeader1);
}
object oMember2 = GetFirstFactionMember(oLeader2);
while (oMember2!=OBJECT_INVALID)
{
AssignCommand(oMember2,ClearAllActions());
AssignCommand(oMember2,ActionWait(5.0));

SendMessageToPC(oMember2,"Votre equipe a perdu ! Vous perdez 10 pts d'honneur !");
int j = GetHonor(oMember2);
SetHonor(oMember2,j-10);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember2);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000),oMember2);
AssignCommand(oMember2,ActionJumpToLocation(lorga));
ResetPC2(oMember2);
oMember2 = GetNextFactionMember(oLeader2);
}
ResetOrga(oOrga);
}

Dans tous les cas : Si le PJ qui a gagné était de niveau supérieur au niveau du Pj qui a perdu alors il gagne de l'argent en fonction de cu niveau de celui qui a perdu et 20 pts d'honneur. Si le PJ qui a gagné a un niveau inférieur au pj qui a perdu il touche de l'argent en fonction du pj qui a perdu et plus d'honneur !
S'il y avait des mort ils sont tour ressucité et ramené à SM devant l'orga...
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: EXPLICATION SUR LES COMBATS PJ VS COMBATTANT D'ARENE   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 13:26

EXPLICATION SUR LES COMBATS PJ VS COMBATTANT D'ARENE


Tout d'abord on engage la conversation avec l'organisateur

- Si un combat est déjà en cours, l'orga demande au PJ de revenir plus tard...

- Si non, il lance le script "arene_vspnj"


arene_vspnj


Tout d'abord on assigne une equipe au groupe :

Citation :
AssignEquip(oPlayer,oOrga); //Met en groupe 1 le groupe de PJs

Ensuite on détermine une arene aleatoire et le point de teleportation du groupe 1 dans l'arene :

Citation :
sArea = DetermineArea(); //Determine l'arene de combat
lWP1 = DetermineWP1(sArea);

Ensuite on determine le nom de la maison des arenes adverse:
Citation :

//Determine le nom de la maison d'arene combattu
sMaison = DetermineMaison();
SetLocalString(oOrga,"MAISON",sMaison);

Puis on téléporte le groupe dans l'arene :
Citation :
while (oMember2!=OBJECT_INVALID)
{ //Envoi les pjs dans l'arene
SendMessageToPC(oMember2,"Vous allez combattre la maison"+sMaison);
AssignCommand(oMember2,ActionJumpToLocation(lWP1));
oMember2 = GetNextFactionMember(oPlayer);
}

Puis, on détermine le Tag du trigger de rencontre dans l'arene :
Citation :
object oEncounter = DetermineRencontre(sArea);

Dont le detail est dans le fichier "arene_include" :
Citation :
object DetermineRencontre (string sArea)
{
object oEncounter; //Permet de savoir quel triguer de rencontre activer selon la map
if (sArea=="arene1")
oEncounter = GetObjectByTag("arene_maison1");
if (sArea=="arene2")
oEncounter = GetObjectByTag("arene_maison2");
if (sArea=="arene3")
oEncounter = GetObjectByTag("arene_maison3");
if (sArea=="arene4")
oEncounter = GetObjectByTag("arene_maison4");
return oEncounter;
}

On active la rencontre (qui est inactive sinon !)
Citation :

SignalEvent(oEncounter,EventUserDefined(991));

On dit à l'organisateur que le groupe 2 est là pour empecher d'autre pj d'utiliser les arenes...
Citation :

SetLocalInt(oOrga,"GROUPE",2);//Dit a l'orga que le groupe2 existe


Une fois le PJ dans l'arene, il est forcé de marcher sur le trigger de rencontre et à l'apparition des combattants d'arene (dans le onspawn) leur nom s'adapte au nom de la maison d'arene définis :

Citation :
object oOrga = GetObjectByTag("Organisateur");
string sMaison = GetLocalString(oOrga,"MAISON");
SetName(OBJECT_SELF,"Combattant de la maison de "+sMaison);

}

Pour demander au trigger de s'activer on a utiliser le Onuserdefine du triger :
Citation :

/*Script quiest enclench si les PJS sont envoyes dans cette arene. Le script
active la rencontre contre des combattant des arenes.
Par pascal le 22/06/06*/

void main()
{
int nUser = GetUserDefinedEventNumber();

if(nUser == 991) //signal de l'organisateur
{
SetEncounterActive(TRUE,OBJECT_SELF);
}
}

A la fin du combat :

si les combattants d'arenes sont vaincus

Le script OnExhausted envoi un signal à l'orga :

Citation :

/*Lorsque toutes les creatures sont mortes, un signal est envoye a l'organisateur
Par Pascal le 22/06/06*/

void main()
{
object oOrga = GetObjectByTag("Organisateur");
SignalEvent(oOrga,EventUserDefined(992));
}

Qui récompense le groupe de PJ :

Citation :

if(nUser == 992) //Equipe 1 a gagne contre maison des arenes ou contre monstres...
{
object oMember1 = GetFirstFactionMember(oLeader1);
while (oMember1!=OBJECT_INVALID)
{
AssignCommand(oMember1,ClearAllActions());
AssignCommand(oMember1,ActionWait(5.0));
SendMessageToPC(oMember1,"Votre equipe a gagne ! Vous gagnez 20 pts d'honneur ! Les paris vous rapportent "+IntToString(f)+" pieces d'or !");
int j = GetHonor(oMember1);
SetHonor(oMember1,j+20);
GiveGoldToCreature(oMember1,f);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectResurrection() ,oMember1);
ApplyEffectToObject(DURATION_TYPE_INSTANT ,EffectHeal(1000) ,oMember1);
AssignCommand(oMember1,ActionJumpToLocation(lorga));
AssignCommand(oMember1,ClearAllActions(TRUE));
ResetPC1(oMember1);

oMember1 = GetNextFactionMember(oLeader1);
}
ResetOrga(oOrga);
}


Si le leader du groupe de PJ meurt

Alors le script Ondeath du module le considère comme pour un combat de PJ vs PJ sauf que dans ce cas, seul les pénalités aux perdant sont appliqué car pas de Leader 2...
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: EXPLICATION SUR LES COMBATS PJ VS MONSTRE   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 13:29

EXPLICATION SUR LES COMBATS PJ VS MONSTRE


Meme chose que contre les combattants des arenes sauf que ce sont des trigger de monstres !

Elle est pas belle la vie ?
Revenir en haut Aller en bas
http://aidtarn.free.fr
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Ajout de fonctions MD et gold !   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 21:08

Deux nouveauté depuis ce matin :

Les XP gagné en arènes sont divisés par 2 !

Le MD a une fonction caché en parlant à l'orga

En effet en parlant à l'orga on peut : forcer un reset des variable (en cas où des PJs auraient été bloqué.

On peut aussi voir qui est en train de combattre !
Revenir en haut Aller en bas
http://aidtarn.free.fr
Astarode
Admin
Astarode


Nombre de messages : 374
Age : 53
Localisation : Elleslande
Date d'inscription : 16/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Re: [DIVERS] Les combats d' arènes   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 21:57

Beau boulot ! cheers

Et que de commentaires...
Je regarderai ça en détail après mon exam de samedi Wink
Revenir en haut Aller en bas
https://elleslande.1fr1.net
Colargol
Apprenti
Colargol


Nombre de messages : 76
Age : 51
Localisation : Treyvaux-les-patates (Suisse)
Date d'inscription : 08/02/2006

[DIVERS] Les combats d' arènes Empty
MessageSujet: Re: [DIVERS] Les combats d' arènes   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 22:02

J'ai trouvé ce qui va pas. Y a un GROS bug. En sortant de l'arène, le nombre de mes XP TOTAL a été divisé par 2!! lol Passé de lev 23 à lev 16! J'ai posté avec une image sur mon rapport de bug.
Revenir en haut Aller en bas
Astarode
Admin
Astarode


Nombre de messages : 374
Age : 53
Localisation : Elleslande
Date d'inscription : 16/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: Re: [DIVERS] Les combats d' arènes   [DIVERS] Les combats d' arènes EmptyJeu 22 Juin - 23:29

Astarode a écrit:
Beau boulot ! cheers

Et que de commentaires...
Je regarderai ça en détail après mon exam de samedi Wink
Revenir en haut Aller en bas
https://elleslande.1fr1.net
Silk
Faiseur d'Univers
Silk


Nombre de messages : 298
Age : 46
Localisation : Albi
Date d'inscription : 20/11/2005

[DIVERS] Les combats d' arènes Empty
MessageSujet: nouveaux script   [DIVERS] Les combats d' arènes EmptyMar 27 Juin - 19:11

script de reset d'arene pour MD
nom : "arene_reset"

Citation :
/*Fait un reset des variables d'arene*/
#include "arene_include"


void main()
{
object oOrga = GetObjectByTag("Organisateur");
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");
object oMember1 = GetFirstFactionMember(oLeader1);
object oMember2 = GetFirstFactionMember(oLeader2);

while (oMember1 !=OBJECT_INVALID)
{
ResetPC1(oMember1);
oMember1 = GetNextFactionMember(oLeader1);
}
while (oMember2 !=OBJECT_INVALID)
{
ResetPC2(oMember2);
oMember1 = GetNextFactionMember(oLeader2);
}
ResetOrga(oOrga);
}

script qui détermine et place en token les noms des leader et des membres du groupe
nom : "arene_nomequip"

Citation :

/*Dsigne au MD qui est en train de se battre*/


int StartingConditional()
{
int iResult;
int i = 0;
int j=0;
object oOrga = GetObjectByTag("Organisateur");
object oLeader1 = GetLocalObject(oOrga,"CHEF_GROUPE1");
object oLeader2 = GetLocalObject(oOrga,"CHEF_GROUPE2");
object oMember1 = GetFirstFactionMember(oLeader1);
object oMember2 = GetFirstFactionMember(oLeader2);

while (oMember1 !=OBJECT_INVALID)
{
if (oMember1 != oLeader1)
{
string sName = GetName(oMember1);
i++;
j = 1010+i;
SetCustomToken(j,sName);
}
if (oMember1 == oLeader1)
{
string sName = GetName(oMember1);
SetCustomToken(1000,sName);
}
oMember1 = GetNextFactionMember(oLeader1);
}
while (oMember2 !=OBJECT_INVALID)
{
if (oMember2 != oLeader2)
{
string sName = GetName(oMember2);
i++;
j = 1020+i;
SetCustomToken(j,sName);
}
if (oMember2 == oLeader2)
{
string sName = GetName(oMember2);
SetCustomToken(1001,sName);
}
oMember2 = GetNextFactionMember(oLeader2);
}


iResult = TRUE;
return iResult;
}
Revenir en haut Aller en bas
http://aidtarn.free.fr
Contenu sponsorisé





[DIVERS] Les combats d' arènes Empty
MessageSujet: Re: [DIVERS] Les combats d' arènes   [DIVERS] Les combats d' arènes Empty

Revenir en haut Aller en bas
 
[DIVERS] Les combats d' arènes
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Les combats d'arènes
» bug des arenes
» Arenes et combat contre l'adversaire qui n'existe pas.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Elleslande Module pour NWN :: Zone technique :: Aurora : Trucs et astuces pour l'éditeur de NWN-
Sauter vers: