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


 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Le Deal du moment : -20%
-20% sur le Lot de 2 écrans PC GIGABYTE ...
Voir le deal
429 €

 

 [Aide/Mod en développement] Système de vie collectif pour le mode coopération

Aller en bas 
3 participants
AuteurMessage
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 17:31

Bonjour.  Smile

J'essaye de développer un petit mod qui permet d'ajouter un système de vie collectif sous le language ACS pour le mode Survie de Zandronum.

Voici son code en son entiereté extrait depuis son fichier ACS :

Code:
#library "sharlive"
#include "zcommon.acs"

int maxLives=0;
int maxPlayers=0;

int currentLives[4]={0, 0, 0, 0};
world int 40: currentLivesSurvival;

#DEFINE SHARELIVES_OPEN 700
#DEFINE SHARELIVES_DEATH 701
#DEFINE SHARELIVES_PRINT 702
#DEFINE SHARELIVES_PRINT_RESPAWN 703
#DEFINE SHARELIVES_PRINT_SPECTATE 704

#DEFINE MODE_NULL 0
#DEFINE MODE_TLMS 1
#DEFINE MODE_SURV 2

script SHARELIVES_OPEN OPEN
{
Delay(1);

if(GetLivesMode()==MODE_NULL)
 {
 PrintBold(s:"TLMS or Survival must be enabled to use pooled lives.");
 terminate;
 }
maxLives = GetCVar("sv_maxlives");
if(maxLives<2)
 {
 PrintBold(s:"Set sv_maxlives larger than 1 to use pooled lives.");
 terminate;
 }

if(GetLivesMode()==MODE_SURV&&GetGameModeState()!=2)
 {
 currentLivesSurvival = maxLives;
 }

currentLives[0] = maxLives;
currentLives[1] = maxLives;
currentLives[2] = maxLives;
currentLives[3] = maxLives;

int roundReset = 0;

while(GetLivesMode()==MODE_SURV)
 {
 if(GetGameModeState()!=2)
 {
 if(roundReset==0)
 {
 currentLivesSurvival = maxLives;
 }
 }
 else
 {
 roundReset = 0;
 }
 Delay(1);
 }
}

script SHARELIVES_DEATH DEATH
{
int mode = GetLivesMode();
maxPlayers = GetCVar("sv_maxclients");
if(mode==MODE_NULL)terminate;

int pln = PlayerNumber();
int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);

if(mode==MODE_TLMS)
{
 if(currentLives[team]>0)currentLives[team] -= 1;
 SetTeamLivesLeft(team, currentLives[team]);
}

if(mode==MODE_SURV)
{
 if(GetGameModeState()==2)
 {
 if(currentLivesSurvival>0)currentLivesSurvival -= 1;
 SetAllLivesLeft(currentLivesSurvival);
 }
}

}

function int GetLivesMode(void)
{
if(GetCVar("Survival")>0)Return MODE_SURV;
if(GetCVar("TeamLMS")>0)Return MODE_TLMS;
Return MODE_NULL;
}

function void SetTeamLivesLeft(int team, int number)
{
for(int i=0; i<maxPlayers; i++)
 {
 if(GetPlayerInfo(i, PLAYERINFO_TEAM)==team)
 {
 SetPlayerLivesLeft(i, number);
 //PrintBold(s:"Setting player ", i:i, s:"'s lives to ", i:number);
 }
 }
}

function void SetAllLivesLeft(int number)
{
 for(int i=0; i<maxPlayers; i++) SetPlayerLivesLeft(i, number);
}

script SHARELIVES_PRINT ENTER
{
 if(GetLivesMode()==MODE_NULL)terminate;

 Delay(5);

 int pln = PlayerNumber();
 int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);
 int diff = 0;
 int mode = GetLivesMode();

 Thing_ChangeTID(0, pln+1000);

 int printLives;

 bool stopUpdates = false;

 str numcolor = "\c-";

 SetHudSize(600,380,0);
 if(printLives <= 0)numcolor = "\cg";
 else numcolor = "\c-";

 if(mode == MODE_TLMS)
 {
 printLives = currentLives[team]-1;
 if(printLives<0)printLives=0;
 
 HudMessage(s:"\caRappels: ", s:numcolor, i:printlives, s:" / ", i:maxLives-1; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);

 while(GetActorProperty(0, APROP_HEALTH)>0)
 {
 if(printLives!=currentLives[team]-1 && !stopUpdates)
 {
 diff = printLives-(currentLives[team]-1);
 
 printLives = currentLives[team]-1;
 if(printLives<0){printLives=0; stopUpdates=true;}
 
 if(printLives <= 0)numcolor = "\cg";
 else numcolor = "\c-";
 HudMessage(s:"\caRappels: ", s:numcolor, i:printlives, s:" / ", i:maxLives-1; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);
 if(diff>0)HudMessage(s:"\cg-", i:diff; HUDMSG_FADEOUT, 46, CR_GREEN, 150.0, 315.0, 1.0, 1.0);
 }
 Delay(1);
 }
 HudMessage(s:""; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);
 }


 else if(mode == MODE_SURV)
 {
 printLives = currentLivesSurvival-1;
 if(printLives<0)printLives=0;
 
 HudMessage(s:"\caRappels: ", s:numcolor, i:printlives, s:" / ", i:maxLives-1; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);

 while(GetActorProperty(0, APROP_HEALTH)>0)
 {
 if(printLives!=currentLivesSurvival-1 && !stopUpdates)
 {
 diff = printLives-(currentLivesSurvival-1);
 
 printLives = currentLivesSurvival-1;
 if(printLives<0){printLives=0; stopUpdates=true;}
 
 if(printLives <= 0)numcolor = "\cg";
 else numcolor = "\c-";
 HudMessage(s:"\caRappels: ", s:numcolor, i:printlives, s:" / ", i:maxLives-1; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);
 if(diff>0)HudMessage(s:"\cg-", i:diff; HUDMSG_FADEOUT, 46, CR_GREEN, 150.0, 315.0, 1.0, 1.0);
 }
 Delay(1);
 }
 HudMessage(s:""; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);
 }
}

script SHARELIVES_PRINT_RESPAWN RESPAWN
{
 ACS_ExecuteAlways(SHARELIVES_PRINT, 0);
}

script SHARELIVES_PRINT_SPECTATE (int who) DISCONNECT
{
 SetActivator(0);
 HudMessage(s:""; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 0);
}

Script 721 (void) { SetAllLivesLeft(++currentLivesSurvival); }

Le mod fonctionne bien ! Toutefois, j'aurais aimé intégrer une fonction qui permet à ce qu'un game over apparaisse dès qu'un joueur a épuisé la réserve de vie (Ce qui inclut le redémarrage de la map). Et ce même s'il reste encore des joueurs en vie !

Car pour le moment, le game over ne se présente que si tous les joueurs sont morts... Chose que je voudrais y remédier.


Si quelqu'un pouvait m'indiquer la commande nécessaire pour cela... Je serai vraiment honorer car je vous avoue que je n'ai pas beaucoup de connaissance à ce sujet ! Merci bien.

Lien du mod (Si jamais vous souhaitez vois ça par vous même) : https://gofile.io/?c=5UMrij
Bonne soirée. Smile
Revenir en haut Aller en bas
[WH]-Wilou84
Rêveur perpétuel
[WH]-Wilou84


Nombre de messages : 30876
Age : 39
Localisation : Paris, France

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 20:16

Hello ! Cool

Bon, pour ma part, je ne me suis jamais vraiment intéressé à l'ACS, mais je connais des mods GZDoom qui pourraient contenir du code intéressant dans ton exemple.

Stronghold contient, si ma mémoire est bonne, une fonctionnalité qui place les joueurs à court de vies dans une sorte de prison. Peut-être y'a-t'il de quoi s'inspirer... ?
(Remplacer la fonctionnalité de déplacement dans la prison par l'affichage du "Game Over")
Lien : http://stronghold.drdteam.org/

Et sinon, pour bien comprendre ton idée de mod : la réserve de vies est partagée par tous les joueurs, et à chaque fois qu'un joueur meurt, il consomme une vie dans la réserve. Si la réserve de vies est à 1, ça veut dire qu'il n'y a plus qu'un joueur en vie et les autres ne peuvent plus respawner.
Du coup, j'ai du mal à voir dans quel(s) cas la réserve pourrait être épuisée alors qu'il y aurait encore des joueurs en vie.

Je déplace ton topic dans "Projets en cours" Smile

_________________
Un peuple qui élit des corrompus, des renégats, des imposteurs, des voleurs et des traîtres n'est pas victime !
Il est complice.

George Orwell
Revenir en haut Aller en bas
https://dsdarchive.com/players/william_huber
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 20:49

[WH]-Wilou84 a écrit:
Hello ! Cool

Bon, pour ma part, je ne me suis jamais vraiment intéressé à l'ACS, mais je connais des mods GZDoom qui pourraient contenir du code intéressant dans ton exemple.

Stronghold contient, si ma mémoire est bonne, une fonctionnalité qui place les joueurs à court de vies dans une sorte de prison. Peut-être y'a-t'il de quoi s'inspirer... ?
(Remplacer la fonctionnalité de déplacement dans la prison par l'affichage du "Game Over")
Lien : http://stronghold.drdteam.org/

Et sinon, pour bien comprendre ton idée de mod : la réserve de vies est partagée par tous les joueurs, et à chaque fois qu'un joueur meurt, il consomme une vie dans la réserve. Si la réserve de vies est à 1, ça veut dire qu'il n'y a plus qu'un joueur en vie et les autres ne peuvent plus respawner.
Du coup, j'ai du mal à voir dans quel(s) cas la réserve pourrait être épuisée alors qu'il y aurait encore des joueurs en vie.

Je déplace ton topic dans "Projets en cours" Smile


Bonsoir à toi ! Et merci de ta réponse !

Alors pour bien t'expliquer le principe du mod et de ce que je voudrais faire  : Le concept consiste à mettre en place un système de vie collectif pour toute l'équipe de joueurs, partons de cet exemple : Deux joueurs jouent en coop, la réserve de vie est de 2. Le joueur A perd les 2 vies... La réserve est donc à 0. A partir de ce moment là, si l'un des deux joueurs meurent à nouveau... Je voudrais que ça soit la fin de la partie. (Cela permet aux joueurs de les obliger à faire attention à la réserve de vie de l'équipe, de manière à si quelqu'un dépense toute la réserve... Il pénalisera toute l'équipe entière... et provoquera sa défaite.  Il faut donc bien conserver ces vies.. Voilà l'idée :p)

Actuellement, le problème est que si le joueur A dépense toute les vies (donc 2-1-0) et qu'il meurt à ce moment là... Hé bien il est en spectateur mais le joueur B, lui... Peut continuer la partie tranquillement tant qu'il est en vie... Et c'est justement ce que je ne veux pas  Mad


J'espère être assez explicite quant à mon idée. Smile

Je vais consulter ton lien, merci à toi de me donner quelques pistes  !

(Désolé si mon sujet était au mauvais endroit... La boulette   Laughing  )

PS: Mais dit-donc il a l'air d'être excellent ton mod ! Comment j'ai pu passer à côté de ça ah ah... Je vais peut-être me le faire tiens :p
Revenir en haut Aller en bas
[WH]-Wilou84
Rêveur perpétuel
[WH]-Wilou84


Nombre de messages : 30876
Age : 39
Localisation : Paris, France

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 21:05

Ok, merci pour l'explication Smile

Alors, voyons voir...

Serze a écrit:
Actuellement, le problème est que si le joueur A dépense toute les vies (donc 2-1-0) et qu'il meurt à ce moment là... Hé bien il est en spectateur mais le joueur B, lui... Peut continuer la partie tranquillement tant qu'il est en vie... Et c'est justement ce que je ne veux pas  Mad
Tu as essayé de rajouter du contenu dans le script "script SHARELIVES_DEATH DEATH", du genre "afficher un message si le compte de vies (currentLives[team]) est inférieur ou égal à 0" ?

Edit : ouais il est excellent Stronghold, ça a été un méga-hit en 2010 Smile

_________________
Un peuple qui élit des corrompus, des renégats, des imposteurs, des voleurs et des traîtres n'est pas victime !
Il est complice.

George Orwell
Revenir en haut Aller en bas
https://dsdarchive.com/players/william_huber
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 21:34

[WH]-Wilou94 a écrit:
Tu as essayé de rajouter du contenu dans le script "script SHARELIVES_DEATH DEATH", du genre "afficher un message si le compte de vies (currentLives[team]) est inférieur ou égal à 0" ?


Tu veux dire un truc du genre :

if (currentLives[team]<0)
game_over = 1;
Restartmap();

J'ai essayé plusieurs fois, mais je pense que ma façon de faire n'est pas la bonne...

Tu sais, c'est le genre de chose qui peut prendre deux minutes à une personne adepte... Comme ça peut prendre des jours pour un simple amateur comme moi... C'est te dire l'ampleur du désastre :p

J'édite le fichier avec Slade 3, ensuite je modifie l'ACS avec... Le problème est qu'il m'arrive de ne pas pouvoir compiler le fichier ACS après mes tentatives de modifications (erreurs de scripts, je t'épargne les détails). Du coup j'essaye d'enregistrer directement sous format WAD et je le teste... Sans succès.

Je ne sais pas si l'étape de la compilation du fichier ACS est obligatoire ou non... Je t'avoue ne plus trop savoir... C'est un peu casse-tête ce machin tout de même. Smile

Une fois que j'aurais plus de temps, je vais essayer de décortiquer les fichiers de ton mod pour m'en inspirer. Affaire à suivre :p

Revenir en haut Aller en bas
[WH]-Wilou84
Rêveur perpétuel
[WH]-Wilou84


Nombre de messages : 30876
Age : 39
Localisation : Paris, France

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMar 28 Jan 2020, 21:57

Serze a écrit:
Tu veux dire un truc du genre :

if (currentLives[team]<0)
game_over = 1;
Restartmap();

J'ai essayé plusieurs fois, mais je pense que ma façon de faire n'est pas la bonne...
Oui, un truc du genre Smile

En cherchant sur les forums ZDoom, voici un autre mod qui pourrait te donner une solution, c'est aussi un système de vies partagées :
Death Coin : https://forum.zdoom.org/viewtopic.php?f=43&t=60987

De ce que je lis, oui, il faut effectivement compiler le code ACS pour que ça fonctionne.
Voici un guide basique qui pourra t'aider : https://zdoom.org/wiki/A_quick_beginner%27s_guide_to_ACS

De manière générale, le wiki ZDoom est certainement un bon endroit pour démarrer !
Bon courage Smile

_________________
Un peuple qui élit des corrompus, des renégats, des imposteurs, des voleurs et des traîtres n'est pas victime !
Il est complice.

George Orwell
Revenir en haut Aller en bas
https://dsdarchive.com/players/william_huber
JC
Membre banni
JC


Nombre de messages : 2910
Age : 30

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 01:16

-


Dernière édition par JC le Jeu 21 Mai 2020, 13:41, édité 1 fois
Revenir en haut Aller en bas
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 02:17

[WH]-Wilou84 a écrit:

Serze a écrit:
Tu veux dire un truc du genre :

if (currentLives[team]<0)
game_over = 1;
Restartmap();

J'ai essayé plusieurs fois, mais je pense que ma façon de faire n'est pas la bonne...
Oui, un truc du genre Smile

En cherchant sur les forums ZDoom, voici un autre mod qui pourrait te donner une solution, c'est aussi un système de vies partagées :
Death Coin : https://forum.zdoom.org/viewtopic.php?f=43&t=60987

De ce que je lis, oui, il faut effectivement compiler le code ACS pour que ça fonctionne.
Voici un guide basique qui pourra t'aider : https://zdoom.org/wiki/A_quick_beginner%27s_guide_to_ACS

De manière générale, le wiki ZDoom est certainement un bon endroit pour démarrer !
Bon courage Smile

Merci beaucoup pour ton aide. Je vais regarder tout ça. Smile

Je connais le mod DeathCoin. Et c'est effectivement une variante assez intéressante ! Mais je pense qu'il dépend du nombre de monstres sur la map actuelle... A voir si ce n'est pas le genre de mod qui rendrait le jeu trop facile par rapport à la vitesse du remplissage de la barre... Wink


JC a écrit:
Bonsoir,
Je passe un peu en coup de vent. l'ACS je connais pas mal je pense pouvoir aider :p

je suis pas dans le mapping / modding de zandronum, mais de ce que je comprends de ton mod, c'est qu'il se passe des choses que quand un joueur meurt, non ?

Donc il devrait y avoir seulement des scripts ENTER (pour le tid à la rigueur), DEATH (pour diminuer le nombre de vie), DISCONNECT (pour le passage en spectateur) et OPEN (pour les variables globale).

J'ai lu vite fait le code, c'est un peu difficile de comprendre ce que tu veux faire, ton code à l'air vachement difficile pour juste un partage de vies ...

Quel est le mode TLMS ? et SURV ?
Pourquoi tu as un tableau de 4 (currentLives[4]) ?

Je vais essayer de regarder ton code en detail, et voir ce qu'on pourrait modifier pour que ça fonctionne comme tu l'entends, je reviendrais plus tard Smile

Bonsoir ! Ah bah si tu t'y connais en ACS, tu risques (peut-être) d'être mon sauveur :p

Citation :
je suis pas dans le mapping / modding de zandronum, mais de ce que je comprends de ton mod, c'est qu'il se passe des choses que quand un joueur meurt, non ?

Voilà exactement. Le principe du mod est d'intégrer au jeu un système de vie collectif. (Une espèce de réserve de vie.. Livepool en anglais) Et cette réserve diminue pour chaque mort.

Citation :
J'ai lu vite fait le code, c'est un peu difficile de comprendre ce que tu veux faire, ton code à l'air vachement difficile pour juste un partage de vies ...

Quel est le mode TLMS ? et SURV ?
Pourquoi tu as un tableau de 4 (currentLives[4]) ?


Alors TLMS correspond au mode The Last Man Standing.
SURV correspond au mode survie de Zandronum en coop.

Donc il est essentiellement conçu de base pour le Multijoueur. Cela signifie que le mod ne peut être activé uniquement si le joueur est dans l'un des modes ci-dessus donc.

Et concernant le fameux tableau... Je n'ai pas encore réussi à savoir son utilité... (Je ne suis pas à l'origine de ce mod, je cherche simplement à le modifier à ma façon Smile )


Citation :
Je vais essayer de regarder ton code en detail, et voir ce qu'on pourrait modifier pour que ça fonctionne comme tu l'entends, je reviendrais plus tard Smile

Merci à toi c'est très généreux !

Si tu pouvais m'indiquer une fonction ou quelque chose qui pourrait me servir, ça serait une grande aide car effectivement ce n'est pas facile pour moi de déterminer quelle fonction permet telle ou telle action dans le jeu.

Bonne soirée !
Revenir en haut Aller en bas
JC
Membre banni
JC


Nombre de messages : 2910
Age : 30

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 11:36

-


Dernière édition par JC le Jeu 21 Mai 2020, 13:40, édité 1 fois
Revenir en haut Aller en bas
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 12:46

JC a écrit:
Bon, j'ai passé un peu le code en detail.
Je pensais que c'etait le tiens ...

Par rapport à ce que tu veux faire, disons qu'il y a pleins de trucs qui servent à rien ...
très très chelou comme code, mais bon c'est zandronum je vais pas epiloguer.

J'ai fais quelques changement, dis moi si ça fonctionne :

Code:
#library "sharlive"

#include "zcommon.acs"

int maxLives;
int maxPlayers;

int currentLives[4];

#define SHARELIVES_OPEN 700
#define SHARELIVES_DEATH 701
#define SHARELIVES_PRINT 702
#define SHARELIVES_PRINT_RESPAWN 703

#define MODE_NULL 0
#define MODE_TLMS 1
#define MODE_SURV 2

script SHARELIVES_OPEN OPEN
{
 maxPlayers = GetCVar("sv_maxclients");
 maxLives = GetCVar("sv_maxlives");

 if (GetLivesMode() == MODE_NULL)
 {
 PrintBold(s:"TLMS or Survival must be enabled to use pooled lives.");
 terminate;
 }

 if (maxLives < 2)
 {
 PrintBold(s:"Set sv_maxlives larger than 1 to use pooled lives.");
 terminate;
 }

 if (GetLivesMode() == MODE_SURV && GetGameModeState() != 2)
 currentLives[0] = maxLives;
 else
 {
 currentLives[0] = maxLives;
 currentLives[1] = maxLives;
 currentLives[2] = maxLives;
 currentLives[3] = maxLives;
 }
}

script SHARELIVES_DEATH DEATH
{
 int mode = GetLivesMode();
 int pln = PlayerNumber();
 int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);

 switch (mode)
 {
 case MODE_TLMS :
 if (currentLives[team] > 0)
 currentLives[team] -= 1;

 SetTeamLivesLeft(team, currentLives[team]);

 if (currentLives[0] < 0 || currentLives[1] < 0 || currentLives[2] < 0 || currentLives[3] < 0)
 {
 PrintBold(s: "One team has no more lives. restarting map");
     Delay(90);
 ResetMap ();
 }
 break;

 case MODE_SURV :
 if (GetGameModeState() == 2)
 {
 if (currentLives[0] > 0)
 currentLives[0] -= 1;

 SetTeamLivesLeft(0, currentLives[0]);

 if (currentLives[0] < 0)
 {
 PrintBold(s: "No more lives. restarting map");
     Delay(90);
 ResetMap ();
 }
 }
 break;

 default : terminate; break;
 }
}

function int GetLivesMode (void)
{
 if (GetCVar("Survival") > 0) return MODE_SURV;
 if (GetCVar("TeamLMS") > 0) return MODE_TLMS;
 return MODE_NULL;
}

function void SetTeamLivesLeft (int team, int number)
{
 for (int i = 0; i < maxPlayers; i++)
 if (GetPlayerInfo (i, PLAYERINFO_TEAM) == team)
 SetPlayerLivesLeft (i, number);
}

script SHARELIVES_PRINT ENTER
{
 int mode = GetLivesMode();

 if (mode == MODE_NULL)
 terminate;

 int pln = PlayerNumber();
 int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);

 if (mode == MODE_SURV)
 team = 0;

 Thing_ChangeTID(0, pln+1000);

 int printLives;
 str numcolor = "\cg";

 SetHudSize(600,380,0);

 printLives = currentLives[team]-1;

 if (printLives < 0)
 printLives = 0;

 while (GetActorProperty(0, APROP_HEALTH) > 0 && printLives > -1)
 {
 HudMessage(s:"\caRappels: ", s:numcolor, i:printlives, s:" / ", i:maxLives-1; HUDMSG_PLAIN, 45, CR_GREEN, 90.0, 315.0, 1.0);
 Delay(10);
 }
}

script SHARELIVES_PRINT_RESPAWN RESPAWN
{
 ACS_ExecuteAlways(SHARELIVES_PRINT, 0);
}

J'ai essayé de garder le core fonctionnel, mais c'est peut-etre pas ce que tu recherche.
Le code est assez foireux, il y a 10 milles variables identiques, c'est le bordel haha

Sinon, si tu veux garder le premier bout de code, je peux te guider vers cette page : https://wiki.zandronum.com/ACS
Il y a surement ce que tu recherche, comme par exemple : https://wiki.zandronum.com/ResetMap

Tiens moi au courant Smile

Salut JC, alors déjà merci beaucoup pour ton aide. Smile

J'ai testé ton code, et il ne fonctionne malheureusement pas vraiment. :p

En faite, pour une raison que j'ignore, une vie s'enlève toute seule lors du spawn dans le mode survie..
La réserve passe donc de 1 vie à 0 vie sans que je sache réellement pourquoi.

Je l'ai testé avec un bot, et il se trouve que le message que tu as ajouté dans le script death ""One team has no more lives. restarting map" n’apparaît pas lorsque la réserve de vie est épuisée. Je n'ai que le "MISSION FAILED" classique quand tout le monde est mort :p

Je ne pensais pas que cela serait si compliqué, j'en suis désolé. C'est bête car ce mod fonctionne bien mais pas de la façon dont je préfère.... Je vais devoir le mettre de côté pour le moment. Mad


Toutefois, (Et je suis plutôt content !)  Par le passé, je me souviens avoir trouvé un mod similaire à celui que je recherche. Celui-ci (Contrairement à livespool) ne fonctionne pas en mode survie mais en mode coopérative ! Et j'ai réussi à remettre la main dessus ! Smile

Il s'agit de sharedlivesv1.pk3 : https://gofile.io/?c=IEoYCi

Voici son code :

Code:
#library "sharedlives"
#include "zcommon.acs"

int enable_mod;

str current_map;
int lives_lost;
int game_over;

function void ChangeMap(str mapname, int reset, int intermission)
{
    // Just in case
    reset = reset != 0;
    intermission = intermission != 0;
    
    ChangeLevel(mapname, 0, (reset * (CHANGELEVEL_RESETHEALTH | CHANGELEVEL_RESETINVENTORY)) | CHANGELEVEL_PRERAISEWEAPON | (!intermission * CHANGELEVEL_NOINTERMISSION), -1);
}

function void RestartMap(void)
{
    ChangeMap(current_map, TRUE, TRUE);
}

function int MaxLives(void)
{
    return GetCVar("sv_maxlives");
}

function int LivesLeft(void)
{
    return MaxLives() - lives_lost;
}

script 101 OPEN
{
    current_map = StrParam(n:PRINTNAME_LEVEL);
    game_over = 0;
    lives_lost = 0;
    
    if((GameType() == GAME_NET_COOPERATIVE || GameType() == GAME_SINGLE_PLAYER) && MaxLives() > 0)
        enable_mod = 1;
    else
        enable_mod = 0;
    
    if(!enable_mod && MaxLives() > 0)
    {
        Log(s:"Warning: Game mode is not Cooperative and sv_maxlives is set to a value greater than zero. sharedlives mod only works in Cooperative.");
    }
}

script 102 DEATH
{
    if(!enable_mod) terminate;
    
    if(++lives_lost >= MaxLives())
    {
        game_over = 1;
        SetHudSize(240, 150, FALSE);
        SetFont("BIGFONT");
        HudMessageBold (s:"MISSION FAILED!";
        HUDMSG_FADEOUT, 0, CR_RED, 120.0, 75.0, 4.0, 1.0);
        HudMessageBold(s:""; HUDMSG_PLAIN, 1, CR_WHITE, 0.0, 0.0, 1.0);
        delay(5*35);
        RestartMap();
    }
}

script 103 ENTER
{
    if(!enable_mod) terminate;
    
    while(!game_over)
    {
        str lives_left_color = "\cd";
        if((MaxLives() > 1) && (LivesLeft() == 1))
            lives_left_color = "\cg";
        
        SetHudSize(640, 400, FALSE);
        SetFont("SMALLFONT");
        HudMessage(s:"Lives left: ", s:lives_left_color, d:LivesLeft()
                    HUDMSG_FADEOUT, 1, CR_WHITE, 640.2, 380.2, 3.0, 1.0);
        
        delay(35);
    }
}
Script 721 (void) { LivesLeft(++MaxLives); }



Je pense que son code est beaucoup plus simple et basique. Et la bonne nouvelle c'est qu'il fonctionne bel et comme je le voudrais. (Le fameux game over dès qu'un joueur épuise la réserve de vie)

La seule chose dont j'ai besoin (Et c'est pour cela que j'ai besoin de tes talents mon cher JC) c'est d'une commande qui pourrait me permettre d'ajouter une vie à la réserve de l'équipe... (Autre que sv_maxlives) Et qui nécessiterait pas le reset de la map en cours !  Et je me souviens n'être pas parvenu à trouver ça à l'époque.

J'ai fait une tentative avec le script : Script 721 (void) { LivesLeft(++MaxLives); } mais il ne fonctionne pas et ACS refuse de me compiler le script. Je ne trouve pas la source de l'erreur en question.

L'idée serait de pouvoir exécuter cette commande en jeu via la console en tapant : puke [script]
et qu'une vie s'ajoute à la réserve de vie de l'équipe Smile

La seule chose qui me manque c'est cette commande, et cela sera parfait ! Merci encore JC pour ton investissement et ton aide précieuse !

Tiens-moi au jus ! Je vais essayer de voir de mon côté pour ce mod que j'ai retrouvé des oubliettes Wink
Revenir en haut Aller en bas
JC
Membre banni
JC


Nombre de messages : 2910
Age : 30

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 17:43

-


Dernière édition par JC le Jeu 21 Mai 2020, 13:40, édité 1 fois
Revenir en haut Aller en bas
Serze
Newbie



Nombre de messages : 6
Clan(s) : (Aucun)

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 18:00

JC a écrit:
hehe, pour être franc, j'ai passé 15 minutes dessus ce matin. Le truc c'est que j'ai rien pour tester à part le script ... et j'ai ce qu'on appelle une flemme monumentale de faire un wad pour ça x)
Du coup j'ai juste vérifié si le script compilait, j'ai pas du tout testé haha

Cependant, le second code que tu viens de poster me parait déja beaucoup mieux que le précédant Smile
Il est plus simple et fait directement ce que tu voulais. c'est en coop mais pourquoi pas !

le script 721 devrait plutot être :
Code:
Script 721 (void)
{
    lives_lost--;

    if (lives_lost < 0)
        lives_lost = 0;
}

ce code rajoute une vie à chaque fois que tu l'execute (jusqu'à la valeur de sv_maxlives evidemment)

J'ai pas testé encore, donc n'hésite pas s'il y a le moindre probleme Smile

Ah bah c'est super ça ! Merci beaucoup ! Bon bah voilà. J'ai tout en ma possession pour m'amuser maintenant. Comme quoi, on y est arrivé ! :p

Merci à tous. et bonne soirée au forum ! Wink
Revenir en haut Aller en bas
[WH]-Wilou84
Rêveur perpétuel
[WH]-Wilou84


Nombre de messages : 30876
Age : 39
Localisation : Paris, France

[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération EmptyMer 29 Jan 2020, 21:33

Super, merci pour ton aide JC ! Wink

_________________
Un peuple qui élit des corrompus, des renégats, des imposteurs, des voleurs et des traîtres n'est pas victime !
Il est complice.

George Orwell
Revenir en haut Aller en bas
https://dsdarchive.com/players/william_huber
Contenu sponsorisé





[Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty
MessageSujet: Re: [Aide/Mod en développement] Système de vie collectif pour le mode coopération   [Aide/Mod en développement] Système de vie collectif pour le mode coopération Empty

Revenir en haut Aller en bas
 
[Aide/Mod en développement] Système de vie collectif pour le mode coopération
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
 :: ::: Autour du jeu ::: :: ::: Vos wads ::: :: ::: Projets en cours :::-
Sauter vers: