Mode Territory

Parlez de tout ce qui est lié à Shootmania.

Moderator: French Moderator

Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

Sript mis a jours ! petit soucis de warmup sur la precedente version.
Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

Un serveur est en ligne avec cette version du script.
lolovainqueur
Posts: 46
Joined: 22 Aug 2012, 19:58

Re: Mode Territory

Post by lolovainqueur »

sur quel serveur ?
crado
Posts: 144
Joined: 14 Sep 2011, 22:32

Re: Mode Territory

Post by crado »

lolovainqueur wrote:sur quel serveur ?
+1
Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

Yop ! Alors c'est sur le serveur |ΔΪΞ| _ƬΞЯRiƬΘRY_

(dsl je capte pas encore trop le coup des manialink pour faire un lien vers un serveur, je m'occuperais de voir ça un peu plus tard)
lolovainqueur
Posts: 46
Joined: 22 Aug 2012, 19:58

Re: Mode Territory

Post by lolovainqueur »

OK il est localisé ou ?
Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

bretagne
Last edited by Bombaklak on 07 Nov 2012, 01:20, edited 1 time in total.
lolovainqueur
Posts: 46
Joined: 22 Aug 2012, 19:58

Re: Mode Territory

Post by lolovainqueur »

J'ai essayé mais j'ai du mal a comprendre --'
Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

Bon nous somme heureux de vous présenter notre Beta ! Jouable sur notre nouveau serveur
|ΔΪΞ| _ƬΞЯRiƬΘRY_Beta


Les liens on été mis a jours au début du sujet
Bombaklak
Posts: 68
Joined: 11 Oct 2012, 05:37

Re: Mode Territory

Post by Bombaklak »

Bon alors voici les dernière news, Nous avons trouver comment faire la selection d'arme a chaque respawn mais nous galérons a l'implémentée, dans le sens ou le serveur a besoin d'un "Sleep" (propre de préférence!) Pour avoir le temps d'implémenter les armes. ça crée une impossibilité de capturé le pole durant le temps de selection des armes. ou tout simplement un bon vieu "Run time error' qui relance le warmup....

Nous avonc odé cette fonction qui fonctionne mais nous ne trouvons pas la façon de l'implémenter !


Fonction weapon selection qui fonctionne elle fait bien apparaitre l'UI en fonction de l'id du joueur eliminé

Code: Select all

Void SelectWeaponsSpawn( Ident _TargetPlayerId )
{
	declare PreRoundEndTime = Now + 8000;
	
	declare UI <=> UIManager.GetUI(Players[_TargetPlayerId]);
	if (UI == Null) continue;
	declare netwrite Net_SelectionEndTime for UI = 0;
	Net_SelectionEndTime = PreRoundEndTime;
	
	if (Players[_TargetPlayerId].RequestedClan == G_CapturingClan) {
		if (C_ForceAtkWeapon) continue;
		declare LayerAttached = Layers::Attach("WeaponSelectionAttack", Players[_TargetPlayerId].Id);
	} else {
		if (C_ForceDefWeapon) continue;
		declare LayerAttached = Layers::Attach("WeaponSelectionDefend", Players[_TargetPlayerId].Id);
	}
	
	// Send the number of rocket, laser and nucleus in each clan
	while (PreRoundEndTime > Now) 
	{
		sleep(100);
		
		declare NbRocketAtk = 0;
		declare NbRocketDef = 0;
		declare NbLaserAtk = 0;
		declare NbLaserDef = 0;
		declare NbNucleusAtk = 0;
		declare NbNucleusDef = 0;
		
		foreach (Player in Players) 
		{
			declare UI <=> UIManager.GetUI(Player);
			if (UI == Null) continue;
			
			declare netread Net_NewDefWeapon for UI = 1;
			declare netread Net_NewAtkWeapon for UI = 1;
			
			if (Player.RequestedClan == G_CapturingClan && Net_NewAtkWeapon == 2) {
				NbLaserAtk += 1;
			} else if (Player.RequestedClan == G_CapturingClan) {
				NbRocketAtk += 1;
			} else if (Player.RequestedClan == G_CapturingClan && Net_NewAtkWeapon == 3) {
				NbNucleusAtk +=1;
			} else if (Player.RequestedClan == 3 - G_CapturingClan && Net_NewDefWeapon == 2) {
				NbLaserDef += 1;
			} else if (Player.RequestedClan == 3 - G_CapturingClan && Net_NewDefWeapon == 3) {
				NbNucleusDef += 1;
			} else {
				NbRocketDef += 1;
			}
		}
		
		foreach (Player in Players) {
			declare UI <=> UIManager.GetUI(Player);
			if (UI == Null) continue;
			
			declare netwrite Net_NbRocket for UI = 0;
			declare netwrite Net_NbLaser for UI = 0;
			declare netwrite Net_NbNucleus for UI = 0;
			
			if (Player.RequestedClan == G_CapturingClan) {
				Net_NbRocket = NbRocketAtk;
				Net_NbLaser = NbLaserAtk;
				Net_NbNucleus = NbNucleusAtk;
			} else {
				Net_NbRocket = NbRocketDef;
				Net_NbLaser = NbLaserDef;
				Net_NbNucleus = NbNucleusDef;
			}
		}
	}
	
	foreach (Player in Players) {
		if (!C_ForceAtkWeapon) { declare LayerDetached = Layers::Detach("WeaponSelectionAttack", Player.Id); }
		if (!C_ForceDefWeapon) { declare LayerDetached = Layers::Detach("WeaponSelectionDefend", Player.Id); }
	}
	foreach (Spectator in Spectators) {
		if (!C_ForceAtkWeapon) { declare LayerDetached = Layers::Detach("WeaponSelectionAttack", Spectator.Id); }
		if (!C_ForceDefWeapon) { declare LayerDetached = Layers::Detach("WeaponSelectionDefend", Spectator.Id); }
	}
	
	// Sleep a little to let the server receive all the selected weapon
	sleep(1000);
}
Boolean délaré en début de script pour éviter que le premier spawn soit mal ou pas prit en compte. si on rajoute le script a la respawn queue, mais même avec ça si on rajoute la fonction a la respawn queue bha la map reste figée en spec ...

Code: Select all

declare Boolean				G_IsFirstRespawnDef = True;		///< Convenience Bool to avoid lock at first respawn
declare Boolean				G_IsFirstRespawnAtk = True;		///< Convenience Bool to avoid lock at first respawn
Voici le code que nous utilisons pour tenter de rajouter ça a la respawn queue en utilisant les boolean cité au dessus déclarés en debut de scipt.

Code: Select all

/* -------------------------------------- */
/// Update the defenders respawn queue
Void UpdateDefRespawnQueue() {
	declare I = 1;
	declare ToRemove = Ident[];
	declare DefSpawned = False;
	
	
	foreach (PlayerId in G_DefRespawnQueue) {
		if (!Players.existskey(PlayerId) 
			|| (Players.existskey(PlayerId) && Players[PlayerId].SpawnStatus != CSmPlayer::ESpawnStatus::NotSpawned)) 
		{
			ToRemove.add(PlayerId);
			continue;
		}
		
		declare Player <=> Players[PlayerId];
		declare EntranceInQueue for Player = Now;
		
		if (EntranceInQueue + C_RespawnDelay < Now) {                       // Rajout de condition pour le respawn code du choix d'armes 
			declare OldArmor for Player = 0;
			OldArmor = C_StartingArmor * 100;
			
			declare SpawnDef <=> SM::GetSpawn("SpawnDefense"^G_GoalToCaptureIndex, 0);
			if (SpawnDef != Null)  
			{
				SM::SpawnPlayer(Player, Player.RequestedClan, OldArmor, SpawnDef, -1);
			}
			DefSpawned = True;
			ToRemove.add(PlayerId);
			
			// Relaunch weapon selection at respawn
			if( G_IsFirstRespawnDef == False )
				SelectWeaponsSpawn( Player.id );
		}
	}
	foreach (RemoveId in ToRemove) {
		declare Tmp = G_DefRespawnQueue.remove(RemoveId);
	}
	if (DefSpawned) { declare Tmp = Layers::Update("Respawn", UpdateLayerRespawn()); }
	
	// Convenience Bool to avoid respawn lock at weapons selection
	G_IsFirstRespawnDef = False;
}

/* -------------------------------------- */
/// Update the attackers respawn queue
Void UpdateAtkRespawnQueue() {
	declare I = 1;
	declare ToRemove = Ident[];
	declare AtkSpawned = False;
	
	foreach (PlayerId in G_AtkRespawnQueue) {
		if (!Players.existskey(PlayerId) 
			|| (Players.existskey(PlayerId) && Players[PlayerId].SpawnStatus != CSmPlayer::ESpawnStatus::NotSpawned)) 
		{
			ToRemove.add(PlayerId);
			continue;
		}
		
		declare Player <=> Players[PlayerId];
		declare EntranceInQueue for Player = Now;
		if (EntranceInQueue + C_RespawnDelay < Now) {
			declare OldArmor for Player = 0;
			OldArmor = C_StartingArmor * 100;
			
			declare SpawnAtk <=> SM::GetSpawn(("SpawnAttack"^G_GoalToCaptureIndex), 0);
			if (SpawnAtk != Null)  
			{
				SM::SpawnPlayer(Player, Player.RequestedClan, OldArmor, SpawnAtk, -1);
			}
			AtkSpawned = True;
			ToRemove.add(PlayerId);
			
			// Relaunch weapon selection at respawn
			if( G_IsFirstRespawnAtk == False )
				SelectWeaponsSpawn( Player.id );
		}
	}
	foreach (RemoveId in ToRemove) {
		declare Tmp = G_AtkRespawnQueue.remove(RemoveId);
	}
	if (AtkSpawned) { declare Tmp = Layers::Update("Respawn", UpdateLayerRespawn()); }
	
	// Convenience Bool to avoid respawn lock at weapons selection
	G_IsFirstRespawnAtk = False;
}
Alors que si on rajoute ça a l'event Armor Empty ça fonctionne mais ça crée pas mal de problèmes. Ou ça relance la partie du a un runtime error lié au "pass on" suite a la première sélection d'arme aprés un respawn (l'UI d'affiche bien le choix est possible) , ou ça bloque la capture du pole durant le temps de selection des armes, sachant que pas mal de joueurs vont surement l'utiliser ça peu pas fonctionner dans l’état.

Code: Select all

Armor empty event : 
/* -------------------------------------- */
// Managing events
foreach (Event in PendingEvents) {
	/* -------------------------------------- */
	// Armor empty


	if (Event.Type == CSmModeEvent::EType::OnArmorEmpty && Event.Victim != Null) {
		declare OldArmor for Event.Victim = 0;
		OldArmor = 0;


		if (Event.Victim.CurrentClan == G_CapturingClan) ArmorsLost += 1;

		

		if (Event.Victim.CurrentClan == 3 - G_CapturingClan) {

			// Add victim to the respawn queue


			if (C_UseDefRespawnQueue) {
				declare EntranceInQueue for Event.Victim = Now;
				EntranceInQueue = Now;
				G_DefRespawnQueue.add(Event.Victim.Id);
				LayerUpdated = Layers::Update("Respawn", UpdateLayerRespawn());
			}


		} else if (Event.Victim.CurrentClan == G_CapturingClan) {

			// Add victim to the respawn queue


			if (C_UseAtkRespawnQueue) {
				declare EntranceInQueue for Event.Victim = Now;
				EntranceInQueue = Now;
				G_AtkRespawnQueue.add(Event.Victim.Id);
				LayerUpdated = Layers::Update("Respawn", UpdateLayerRespawn());
			}
		}
		

		SelectWeaponsSpawn(Event.Victim.PlayerId)
		

		LayerUpdated = Layers::Update("ScoresTable", UpdateLayerScoresTable());
		PassOn(Event);
		
		
	}

Nous avons également des soucis pour implémenter la neutralisation d'un pôle par les défenseurs, si nous arrivons a faire ces 2 ajout ça rajouterais de la profondeur au gameplay. Meme si le mode fonctionne déjà pas trop mal. nous avons fait quelques bonne parties. nous cherchons a amélioré tout ça.

Je tourne en rond, ça vient doucement mais clairement un peu d'aide serait le bienvenue, j'ai un peu l'impression de faire un monologue.
Post Reply

Return to “Shootmania”

Who is online

Users browsing this forum: No registered users and 1 guest