How to add custom custom weapon on server ?
Moderator: English Moderator
How to add custom custom weapon on server ?
Well, all is in title, how to put custom weapon in a mode , please ?
Re: How to add custom custom weapon on server ?
There is a quick introduction to custom weapons in the documentation.
Re: How to add custom custom weapon on server ?
Ok thanks, I will watch itEole wrote:There is a quick introduction to custom weapons in the documentation.
Re: How to add custom custom weapon on server ?
Ok the server start, but action won't work, it's stay on fireballGuerro323 wrote:Ok thanks, I will watch itEole wrote:There is a quick introduction to custom weapons in the documentation.
Code: Select all
/**
* Mode melee
*/
#Extends "Modes/ShootMania/ModeBase.Script.txt"
#Const CompatibleMapTypes "MeleeArena"
#Const Version "2014-07-25"
#Const ScriptName "Melee.Script.txt"
#Include "MathLib" as MathLib
#Include "TextLib" as TextLib
#Include "Libs/Nadeo/Message.Script.txt" as Message
#Include "Libs/Nadeo/Interface.Script.txt" as Interface
#Include "Libs/Nadeo/ShootMania/SM.Script.txt" as SM
#Include "Libs/Nadeo/ShootMania/Score.Script.txt" as Score
#Include "Libs/Nadeo/ShootMania/SpawnScreen.Script.txt" as SpawnScreen
// ---------------------------------- //
// Settings
// ---------------------------------- //
#Setting S_TimeLimit 600 as _("Time limit") ///< Time limit on a map
#Setting S_PointLimit 25 as _("Points limit") ///< Points limit on a map
#Const C_NbBots 0 ///< Number of bots
#Const Description _("TYPE: Free for all\nOBJECTIVE: Hit your opponents to score points. The first player to reach the points limit or the player with the highest score at the end of the time limit wins the map.")
// ---------------------------------- //
// Globales variables
// ---------------------------------- //
declare Ident[] G_SpawnsList; ///< Id of all the landmarks with a player spawn of the map
declare Ident G_LatestSpawnId; ///< Id of the last landmark used
// ---------------------------------- //
// Extend
// ---------------------------------- //
***LogVersion***
***
MB_LogVersion(ScriptName, Version);
MB_LogVersion(SM::GetScriptName(), SM::GetScriptVersion());
MB_LogVersion(Score::GetScriptName(), Score::GetScriptVersion());
MB_LogVersion(Message::GetScriptName(), Message::GetScriptVersion());
MB_LogVersion(Interface::GetScriptName(), Interface::GetScriptVersion());
MB_LogVersion(SpawnScreen::GetScriptName(), SpawnScreen::GetScriptVersion());
***
// ---------------------------------- //
// Set rules
// ---------------------------------- //
***Rules***
***
declare ModeName = "Melee";
declare ModeRules = TextLib::Compose(_("$<%11. $>Hit your opponents to score points.\n$<%12. $>The first player to reach the points limit or the player with the highest score at the end of the time limit wins the map."), "$"^SpawnScreen::GetModeColor());
SpawnScreen::ResetRulesSection();
SpawnScreen::AddSubsection(_("Type"), _("Free for all"), 0.);
SpawnScreen::AddSubsection(_("Objectives"), ModeRules, 20.);
SpawnScreen::CreatePrettyRules(ModeName);
ModeStatusMessage = _("TYPE: Free for all\nOBJECTIVE: Hit a maximum of players to win the game.");
***
// ---------------------------------- //
// Server start
// ---------------------------------- //
***StartServer***
***
declare Ident G_ADN;
declare Ident G_TRILAZER;
declare Ident G_NUC_EVO;
declare Ident G_LAS_EVO;
declare Ident G_SHOTGUN;
declare Ident G_ADN_FORC;
ActionList_Begin();
G_ADN = ActionList_Add("ADN.Action.Gbx");
G_TRILAZER = ActionList_Add("Trilazer.Action.Gbx");
G_NUC_EVO = ActionList_Add("Nucleus_Evolved.Action.Gbx");
G_LAS_EVO = ActionList_Add("Laser_Evolved.Action.Gbx");
G_SHOTGUN = ActionList_Add("Shotgun.Action.Gbx");
G_ADN_FORC = ActionList_Add("ADN_ForceField.Action.Gbx");
// ---------------------------------- //
// Set mode options
UseClans = False;
// ---------------------------------- //
// Create the rules
---Rules---
// ---------------------------------- //
// Initialize UI
SpawnScreen::CreateScores("Score.RoundPoints");
SpawnScreen::CreateMapInfo();
Interface::CreateRank();
// ---------------------------------- //
// Create the scores table
ST2::SetStyle("LibST_SMBaseSolo");
ST2::SetStyle("LibST_SMBasePoints");
MB_SetScoresTableStyleFromXml(S_ScoresTableStylePath);
ST2::Build("SM");
***
***InitMap***
***
declare PrevPointsLimit = -1;
***
// ---------------------------------- //
// Map start
// ---------------------------------- //
***StartMap***
***
Users_SetNbFakeUsers(C_NbBots, 0);
G_SpawnsList.clear();
G_LatestSpawnId = NullId;
Score::MatchBegin();
Score::RoundBegin();
SM::SetupDefaultVisibility();
// ---------------------------------- //
// Init bases
foreach (Base in MapBases) {
Base.Clan = 0;
Base.IsActive = True;
}
// ---------------------------------- //
// Init scores
MB_Sleep(1); ///< Allow the scores array to be sorted
foreach (Score in Scores) {
declare Integer LastPoint for Score;
LastPoint = 0;
}
declare LeadId = NullId;
if (Scores.existskey(0)) LeadId = Scores[0].User.Id;
// ---------------------------------- //
// New map sound
UIManager.UIAll.SendNotice("", CUIConfig::ENoticeLevel::MatchInfo, Null, CUIConfig::EAvatarVariant::Default, CUIConfig::EUISound::StartRound, 0);
StartTime = Now;
if (S_TimeLimit > 0) EndTime = StartTime + (S_TimeLimit * 1000);
else EndTime = -1;
UIManager.UIAll.UISequence = CUIConfig::EUISequence::Playing;
declare CurrentTimeLimit = S_TimeLimit;
***
// ---------------------------------- //
// Play loop
// ---------------------------------- //
***PlayLoop***
***
foreach (Event, PendingEvents) {
// ---------------------------------- //
// On armor empty
if (Event.Type == CSmModeEvent::EType::OnArmorEmpty) {
if (Event.Shooter == Event.Victim || Event.Shooter == Null) {
Score::RemovePoints(Event.Victim, 1);
}
XmlRpc::OnArmorEmpty(Event);
PassOn(Event);
}
// ---------------------------------- //
// On hit
else if (Event.Type == CSmModeEvent::EType::OnHit) {
if (Event.Victim == Null || Event.Shooter == Event.Victim) {
Discard(Event);
} else {
declare Points = Event.Damage / 100;
Score::AddPoints(Event.Shooter, Points);
Event.ShooterPoints = Points;
// ---------------------------------- //
// Play sound and notice if someone is close to win
if (Event.Shooter != Null && Event.Shooter.Score != Null) {
declare LastPoint for Event.Shooter.Score = 0;
declare Gap = S_PointLimit - Event.Shooter.Score.RoundPoints;
if (Gap > 0 && Gap <= 3) {
declare Variant = 3 - Gap;
declare Msg = "";
if (Gap > 1) Msg = TextLib::Compose(_("$<%1$> is %2 points from victory!"), Event.Shooter.Name, TextLib::ToText(Gap));
else Msg = TextLib::Compose(_("$<%1$> is 1 point from victory!"), Event.Shooter.Name);
Message::SendBigMessage(Msg, 3000, 2, CUIConfig::EUISound::TieBreakPoint, Variant);
} else if (Gap <= 0) {
Message::SendBigMessage(
TextLib::Compose(_("$<%1$> gets the final hit!"), Event.Shooter.Name),
3000, 3, CUIConfig::EUISound::VictoryPoint, 0
);
} else {
declare SoundGap = S_PointLimit / 5;
if (SoundGap < 5) SoundGap = 5;
if (Event.Shooter.Score.RoundPoints / SoundGap > LastPoint) {
LastPoint = Event.Shooter.Score.RoundPoints / SoundGap;
declare Msg = TextLib::Compose(
"$666%1 : $fff%2 / %3", _("Score"), TextLib::ToText(Event.Shooter.Score.RoundPoints), TextLib::ToText(S_PointLimit)
);
declare Variant = ((Event.Shooter.Score.RoundPoints / SoundGap) - 1);
Message::SendBigMessage(Event.Shooter, Msg, 3000, 0, CUIConfig::EUISound::ScoreProgress, Variant);
}
}
}
XmlRpc::OnHit(Event);
PassOn(Event);
}
}
// ---------------------------------- //
// On player request respawn
else if (Event.Type == CSmModeEvent::EType::OnPlayerRequestRespawn) {
Score::RemovePoints(Event.Player, 1);
XmlRpc::OnPlayerRequestRespawn(Event);
PassOn(Event);
}
// ---------------------------------- //
// Others
else {
PassOn(Event);
}
}
// ---------------------------------- //
// Spawn players
foreach (Player in Players) {
if (Player.SpawnStatus == CSmPlayer::ESpawnStatus::NotSpawned && !Player.RequestsSpectate) {
MeleeSpawnPlayer(Player);
}
}
// ---------------------------------- //
// Play sound and notice if someone is taking the lead
if (Scores.existskey(0) && Scores[0].User.Id != LeadId) {
LeadId = Scores[0].User.Id;
Message::SendBigMessage(TextLib::Compose(_("$<%1$> takes the lead!"), Scores[0].User.Name), 3000, 1, CUIConfig::EUISound::PhaseChange, 1);
}
// ---------------------------------- //
// Server info change
if (PrevPointsLimit != S_PointLimit) {
PrevPointsLimit = S_PointLimit;
ST2::SetFooterText(TextLib::Compose("%1 "^S_PointLimit, _("Points limit : ")));
}
// ---------------------------------- //
// Update time limit
if (CurrentTimeLimit != S_TimeLimit) {
CurrentTimeLimit = S_TimeLimit;
if (S_TimeLimit > 0) EndTime = StartTime + (S_TimeLimit * 1000);
else EndTime = -1;
}
Message::Loop();
// ---------------------------------- //
// victory conditions
declare IsMatchOver = False;
if (S_TimeLimit > 0 && Now > EndTime) IsMatchOver = True;
if (S_PointLimit > 0) {
foreach (Player in Players) {
if (Player.Score != Null && Player.Score.RoundPoints >= S_PointLimit) IsMatchOver = True;
}
}
if (IsMatchOver) MB_StopMap = True;
***
// ---------------------------------- //
// Map end
// ---------------------------------- //
***EndMap***
***
EndTime = -1;
Score::RoundEnd();
Score::MatchEnd(True);
// ---------------------------------- //
// End match sequence
declare CUser Winner <=> Null;
declare MaxPoints = 0;
foreach (Score in Scores) {
if (Score.Points > MaxPoints) {
MaxPoints = Score.Points;
Winner <=> Score.User;
} else if (Score.Points == MaxPoints) {
Winner <=> Null;
}
}
foreach (Player in Players) {
if (Player.User != Winner) UnspawnPlayer(Player);
}
MB_Sleep(1000);
Message::CleanBigMessages();
UIManager.UIAll.BigMessageSound = CUIConfig::EUISound::EndRound;
UIManager.UIAll.BigMessageSoundVariant = 0;
if (Winner != Null) {
UIManager.UIAll.BigMessage = TextLib::Compose(_("$<%1$> wins the match!"), Winner.Name);
} else {
UIManager.UIAll.BigMessage = _("|Match|Draw");
}
MB_Sleep(2000);
UIManager.UIAll.UISequence = CUIConfig::EUISequence::EndRound;
UIManager.UIAll.ScoreTableVisibility = CUIConfig::EVisibility::ForcedVisible;
MB_Sleep(5000);
UIManager.UIAll.UISequence = CUIConfig::EUISequence::Podium;
while(!UIManager.UIAll.UISequenceIsCompleted) {
MB_Yield();
}
UIManager.UIAll.ScoreTableVisibility = CUIConfig::EVisibility::Normal;
UIManager.UIAll.BigMessage = "";
***
// ---------------------------------- //
// Server end
// ---------------------------------- //
***EndServer***
***
Interface::DestroyRank();
SpawnScreen::DestroyRules();
SpawnScreen::DestroyScores();
SpawnScreen::DestroyMapInfo();
***
// ---------------------------------- //
// Functions
// ---------------------------------- //
/* ------------------------------------- */
/** Spawn a player
*
* @param _Player The player to spawn
*/
Void MeleeSpawnPlayer(CSmPlayer _Player) {
if (G_SpawnsList.count == 0) {
foreach (MapLandmark in MapLandmarks_PlayerSpawn) G_SpawnsList.add(MapLandmark.Id);
}
declare SpawnId = NullId;
while (True) {
SpawnId = G_SpawnsList[MathLib::Rand(0, G_SpawnsList.count - 1)];
if (SpawnId != G_LatestSpawnId) break;
if (G_SpawnsList.count == 1) break;
}
G_LatestSpawnId = SpawnId;
SM::SpawnPlayer(_Player, 0, MapLandmarks_PlayerSpawn[SpawnId].PlayerSpawn);
declare Removed = G_SpawnsList.remove(SpawnId);
}
Re: How to add custom custom weapon on server ?
Do you have an error displayed in the log? What's happening exactly? I can't test on my side because I don't have the custom actions you created, so I need more informations.
Re: How to add custom custom weapon on server ?
I got these errors :
Code: Select all
[2015/02/27 17:55:30] Script compilation failed: ERROR[124, 19] The member or variable Player does not exist.
ERROR[124, 12] Incorrect arguments to call the function ActionLoad
ERROR[125, 18] The member or variable Player does not exist.
ERROR[125, 11] Incorrect arguments to call the function ActionBind
ERROR[126, 18] The member or variable Player does not exist.
ERROR[126, 11] Incorrect arguments to call the function ActionLoad
ERROR[127, 18] The member or variable Player does not exist.
ERROR[127, 11] Incorrect arguments to call the function ActionBind
ERROR[128, 18] The member or variable Player does not exist.
ERROR[128, 11] Incorrect arguments to call the function ActionLoad
ERROR[129, 18] The member or variable Player does not exist.
ERROR[129, 11] Incorrect arguments to call the function ActionBind
ERROR[130, 18] The member or variable Player does not exist.
ERROR[130, 11] Incorrect arguments to call the function ActionLoad
ERROR[131, 18] The member or variable Player does not exist.
ERROR[131, 11] Incorrect arguments to call the function ActionBind
ERROR[132, 18] The member or variable Player does not exist.
ERROR[132, 11] Incorrect arguments to call the function ActionLoad
ERROR[133, 18] The member or variable Player does not exist.
ERROR[133, 11] Incorrect arguments to call the function ActionBind
ERROR[134, 18] The member or variable Player does not exist.
ERROR[134, 11] Incorrect arguments to call the function ActionLoad
ERROR[135, 18] The member or variable Player does not exist.
ERROR[135, 11] Incorrect arguments to call the function ActionBind
Script compilation failed.
Re: How to add custom custom weapon on server ?
The script you copy/pasted a few posts above isn't the one that produce the errors or you didn't paste the right version. The log says that the error comes from the ActionLoad() and ActionBind() functions, but there's no such functions in the code you gave. You're trying to pass the Player variable as an argument to the functions but Player doesn't exists in the context.
Re: How to add custom custom weapon on server ?
I just removed a "***" in the start.
Code: Select all
/**
* Mode melee
*/
#Extends "Modes/ShootMania/ModeBase.Script.txt"
#Const CompatibleMapTypes "MeleeArena"
#Const Version "2014-07-25"
#Const ScriptName "Melee.Script.txt"
#Include "MathLib" as MathLib
#Include "TextLib" as TextLib
#Include "Libs/Nadeo/Message.Script.txt" as Message
#Include "Libs/Nadeo/Interface.Script.txt" as Interface
#Include "Libs/Nadeo/ShootMania/SM.Script.txt" as SM
#Include "Libs/Nadeo/ShootMania/Score.Script.txt" as Score
#Include "Libs/Nadeo/ShootMania/SpawnScreen.Script.txt" as SpawnScreen
// ---------------------------------- //
// Settings
// ---------------------------------- //
#Setting S_TimeLimit 600 as _("Time limit") ///< Time limit on a map
#Setting S_PointLimit 25 as _("Points limit") ///< Points limit on a map
#Const C_NbBots 0 ///< Number of bots
#Const Description _("TYPE: Free for all\nOBJECTIVE: Hit your opponents to score points. The first player to reach the points limit or the player with the highest score at the end of the time limit wins the map.")
// ---------------------------------- //
// Globales variables
// ---------------------------------- //
declare Ident[] G_SpawnsList; ///< Id of all the landmarks with a player spawn of the map
declare Ident G_LatestSpawnId; ///< Id of the last landmark used
// ---------------------------------- //
// Extend
// ---------------------------------- //
***LogVersion***
***
MB_LogVersion(ScriptName, Version);
MB_LogVersion(SM::GetScriptName(), SM::GetScriptVersion());
MB_LogVersion(Score::GetScriptName(), Score::GetScriptVersion());
MB_LogVersion(Message::GetScriptName(), Message::GetScriptVersion());
MB_LogVersion(Interface::GetScriptName(), Interface::GetScriptVersion());
MB_LogVersion(SpawnScreen::GetScriptName(), SpawnScreen::GetScriptVersion());
***
// ---------------------------------- //
// Set rules
// ---------------------------------- //
***Rules***
***
declare ModeName = "Melee";
declare ModeRules = TextLib::Compose(_("$<%11. $>Hit your opponents to score points.\n$<%12. $>The first player to reach the points limit or the player with the highest score at the end of the time limit wins the map."), "$"^SpawnScreen::GetModeColor());
SpawnScreen::ResetRulesSection();
SpawnScreen::AddSubsection(_("Type"), _("Free for all"), 0.);
SpawnScreen::AddSubsection(_("Objectives"), ModeRules, 20.);
SpawnScreen::CreatePrettyRules(ModeName);
ModeStatusMessage = _("TYPE: Free for all\nOBJECTIVE: Hit a maximum of players to win the game.");
***
// ---------------------------------- //
// Server start
// ---------------------------------- //
***StartServer***
***
declare Ident G_ADN;
declare Ident G_TRILAZER;
declare Ident G_NUC_EVO;
declare Ident G_LAS_EVO;
declare Ident G_SHOTGUN;
declare Ident G_ADN_FORC;
ActionList_Begin();
G_ADN = ActionList_Add("ADN.Action.Gbx");
G_TRILAZER = ActionList_Add("Trilazer.Action.Gbx");
G_NUC_EVO = ActionList_Add("Nucleus_Evolved.Action.Gbx");
G_LAS_EVO = ActionList_Add("Laser_Evolved.Action.Gbx");
G_SHOTGUN = ActionList_Add("Shotgun.Action.Gbx");
G_ADN_FORC = ActionList_Add("ADN_ForceField.Action.Gbx");
// ---------------------------------- //
// Set mode options
UseClans = False;
// ---------------------------------- //
// Create the rules
---Rules---
// ---------------------------------- //
// Initialize UI
SpawnScreen::CreateScores("Score.RoundPoints");
SpawnScreen::CreateMapInfo();
Interface::CreateRank();
// ---------------------------------- //
// Create the scores table
ST2::SetStyle("LibST_SMBaseSolo");
ST2::SetStyle("LibST_SMBasePoints");
MB_SetScoresTableStyleFromXml(S_ScoresTableStylePath);
ST2::Build("SM");
***
***InitMap***
***
declare PrevPointsLimit = -1;
***
// ---------------------------------- //
// Map start
// ---------------------------------- //
***StartMap***
***
Users_SetNbFakeUsers(C_NbBots, 0);
G_SpawnsList.clear();
G_LatestSpawnId = NullId;
Score::MatchBegin();
Score::RoundBegin();
SM::SetupDefaultVisibility();
// ---------------------------------- //
// Init bases
foreach (Base in MapBases) {
Base.Clan = 0;
Base.IsActive = True;
}
// ---------------------------------- //
// Init scores
MB_Sleep(1); ///< Allow the scores array to be sorted
foreach (Score in Scores) {
declare Integer LastPoint for Score;
LastPoint = 0;
}
declare LeadId = NullId;
if (Scores.existskey(0)) LeadId = Scores[0].User.Id;
// ---------------------------------- //
// New map sound
UIManager.UIAll.SendNotice("", CUIConfig::ENoticeLevel::MatchInfo, Null, CUIConfig::EAvatarVariant::Default, CUIConfig::EUISound::StartRound, 0);
StartTime = Now;
if (S_TimeLimit > 0) EndTime = StartTime + (S_TimeLimit * 1000);
else EndTime = -1;
UIManager.UIAll.UISequence = CUIConfig::EUISequence::Playing;
declare CurrentTimeLimit = S_TimeLimit;
***
// ---------------------------------- //
// Play loop
// ---------------------------------- //
***PlayLoop***
***
foreach (Event, PendingEvents) {
// ---------------------------------- //
// On armor empty
if (Event.Type == CSmModeEvent::EType::OnArmorEmpty) {
if (Event.Shooter == Event.Victim || Event.Shooter == Null) {
Score::RemovePoints(Event.Victim, 1);
}
XmlRpc::OnArmorEmpty(Event);
PassOn(Event);
}
// ---------------------------------- //
// On hit
else if (Event.Type == CSmModeEvent::EType::OnHit) {
if (Event.Victim == Null || Event.Shooter == Event.Victim) {
Discard(Event);
} else {
declare Points = Event.Damage / 100;
Score::AddPoints(Event.Shooter, Points);
Event.ShooterPoints = Points;
// ---------------------------------- //
// Play sound and notice if someone is close to win
if (Event.Shooter != Null && Event.Shooter.Score != Null) {
declare LastPoint for Event.Shooter.Score = 0;
declare Gap = S_PointLimit - Event.Shooter.Score.RoundPoints;
if (Gap > 0 && Gap <= 3) {
declare Variant = 3 - Gap;
declare Msg = "";
if (Gap > 1) Msg = TextLib::Compose(_("$<%1$> is %2 points from victory!"), Event.Shooter.Name, TextLib::ToText(Gap));
else Msg = TextLib::Compose(_("$<%1$> is 1 point from victory!"), Event.Shooter.Name);
Message::SendBigMessage(Msg, 3000, 2, CUIConfig::EUISound::TieBreakPoint, Variant);
} else if (Gap <= 0) {
Message::SendBigMessage(
TextLib::Compose(_("$<%1$> gets the final hit!"), Event.Shooter.Name),
3000, 3, CUIConfig::EUISound::VictoryPoint, 0
);
} else {
declare SoundGap = S_PointLimit / 5;
if (SoundGap < 5) SoundGap = 5;
if (Event.Shooter.Score.RoundPoints / SoundGap > LastPoint) {
LastPoint = Event.Shooter.Score.RoundPoints / SoundGap;
declare Msg = TextLib::Compose(
"$666%1 : $fff%2 / %3", _("Score"), TextLib::ToText(Event.Shooter.Score.RoundPoints), TextLib::ToText(S_PointLimit)
);
declare Variant = ((Event.Shooter.Score.RoundPoints / SoundGap) - 1);
Message::SendBigMessage(Event.Shooter, Msg, 3000, 0, CUIConfig::EUISound::ScoreProgress, Variant);
}
}
}
XmlRpc::OnHit(Event);
PassOn(Event);
}
}
// ---------------------------------- //
// On player request respawn
else if (Event.Type == CSmModeEvent::EType::OnPlayerRequestRespawn) {
Score::RemovePoints(Event.Player, 1);
XmlRpc::OnPlayerRequestRespawn(Event);
PassOn(Event);
}
// ---------------------------------- //
// Others
else {
PassOn(Event);
}
}
// ---------------------------------- //
// Spawn players
foreach (Player in Players) {
if (Player.SpawnStatus == CSmPlayer::ESpawnStatus::NotSpawned && !Player.RequestsSpectate) {
MeleeSpawnPlayer(Player);
}
}
ActionLoad(Player, CSmMode::EActionSlot::Slot_A, G_ADN);
ActionBind(Player, CSmMode::EActionSlot::Slot_A, CSmMode::EActionInput::Weapon);
// ---------------------------------- //
// Play sound and notice if someone is taking the lead
if (Scores.existskey(0) && Scores[0].User.Id != LeadId) {
LeadId = Scores[0].User.Id;
Message::SendBigMessage(TextLib::Compose(_("$<%1$> takes the lead!"), Scores[0].User.Name), 3000, 1, CUIConfig::EUISound::PhaseChange, 1);
}
// ---------------------------------- //
// Server info change
if (PrevPointsLimit != S_PointLimit) {
PrevPointsLimit = S_PointLimit;
ST2::SetFooterText(TextLib::Compose("%1 "^S_PointLimit, _("Points limit : ")));
}
// ---------------------------------- //
// Update time limit
if (CurrentTimeLimit != S_TimeLimit) {
CurrentTimeLimit = S_TimeLimit;
if (S_TimeLimit > 0) EndTime = StartTime + (S_TimeLimit * 1000);
else EndTime = -1;
}
Message::Loop();
// ---------------------------------- //
// victory conditions
declare IsMatchOver = False;
if (S_TimeLimit > 0 && Now > EndTime) IsMatchOver = True;
if (S_PointLimit > 0) {
foreach (Player in Players) {
if (Player.Score != Null && Player.Score.RoundPoints >= S_PointLimit) IsMatchOver = True;
}
}
if (IsMatchOver) MB_StopMap = True;
***
// ---------------------------------- //
// Map end
// ---------------------------------- //
***EndMap***
***
EndTime = -1;
Score::RoundEnd();
Score::MatchEnd(True);
// ---------------------------------- //
// End match sequence
declare CUser Winner <=> Null;
declare MaxPoints = 0;
foreach (Score in Scores) {
if (Score.Points > MaxPoints) {
MaxPoints = Score.Points;
Winner <=> Score.User;
} else if (Score.Points == MaxPoints) {
Winner <=> Null;
}
}
foreach (Player in Players) {
if (Player.User != Winner) UnspawnPlayer(Player);
}
MB_Sleep(1000);
Message::CleanBigMessages();
UIManager.UIAll.BigMessageSound = CUIConfig::EUISound::EndRound;
UIManager.UIAll.BigMessageSoundVariant = 0;
if (Winner != Null) {
UIManager.UIAll.BigMessage = TextLib::Compose(_("$<%1$> wins the match!"), Winner.Name);
} else {
UIManager.UIAll.BigMessage = _("|Match|Draw");
}
MB_Sleep(2000);
UIManager.UIAll.UISequence = CUIConfig::EUISequence::EndRound;
UIManager.UIAll.ScoreTableVisibility = CUIConfig::EVisibility::ForcedVisible;
MB_Sleep(5000);
UIManager.UIAll.UISequence = CUIConfig::EUISequence::Podium;
while(!UIManager.UIAll.UISequenceIsCompleted) {
MB_Yield();
}
UIManager.UIAll.ScoreTableVisibility = CUIConfig::EVisibility::Normal;
UIManager.UIAll.BigMessage = "";
***
// ---------------------------------- //
// Server end
// ---------------------------------- //
***EndServer***
***
Interface::DestroyRank();
SpawnScreen::DestroyRules();
SpawnScreen::DestroyScores();
SpawnScreen::DestroyMapInfo();
***
// ---------------------------------- //
// Functions
// ---------------------------------- //
/* ------------------------------------- */
/** Spawn a player
*
* @param _Player The player to spawn
*/
Void MeleeSpawnPlayer(CSmPlayer _Player) {
if (G_SpawnsList.count == 0) {
foreach (MapLandmark in MapLandmarks_PlayerSpawn) G_SpawnsList.add(MapLandmark.Id);
}
declare SpawnId = NullId;
while (True) {
SpawnId = G_SpawnsList[MathLib::Rand(0, G_SpawnsList.count - 1)];
if (SpawnId != G_LatestSpawnId) break;
if (G_SpawnsList.count == 1) break;
}
G_LatestSpawnId = SpawnId;
SM::SpawnPlayer(_Player, 0, MapLandmarks_PlayerSpawn[SpawnId].PlayerSpawn);
declare Removed = G_SpawnsList.remove(SpawnId);
}
Re: How to add custom custom weapon on server ?
Line 235 you call ActionLoad() and line 236 ActionBind(), both with Player as parameter. But Player doesn't exists at this point of your code. You should try to load and bind the action to the player inside the MeleeSpawnPlayer() function by example.
Re: How to add custom custom weapon on server ?
Please help how to put custom weapon. please show some image or link.
Who is online
Users browsing this forum: No registered users and 1 guest