Mode Territory
Moderator: French Moderator
Re: Mode Territory
Sript mis a jours ! petit soucis de warmup sur la precedente version.
Re: Mode Territory
Un serveur est en ligne avec cette version du script.
Re: Mode Territory
+1lolovainqueur wrote:sur quel serveur ?
Re: Mode Territory
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)
(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)
-
- Posts: 46
- Joined: 22 Aug 2012, 19:58
Re: Mode Territory
J'ai essayé mais j'ai du mal a comprendre --'
Re: Mode Territory
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
|ΔΪΞ| _ƬΞЯRiƬΘRY_Beta
Les liens on été mis a jours au début du sujet
Re: Mode Territory
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é
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 ...
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.
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.
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.
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);
}
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
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;
}
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.
Who is online
Users browsing this forum: No registered users and 1 guest