# HG changeset patch # User unc0rr # Date 1377259328 -14400 # Node ID 860f959f92c9b3cd15b6f5ad57b96f6a8ea63c71 # Parent efc5409a141d9ca846c8983e3b8f7d006995a9e7 Engine loads team binds from team config. Frontend still sends default binds commands, and default binds in team config aren't processed. diff -r efc5409a141d -r 860f959f92c9 QTfrontend/team.cpp --- a/QTfrontend/team.cpp Tue Aug 20 14:40:27 2013 +0400 +++ b/QTfrontend/team.cpp Fri Aug 23 16:02:08 2013 +0400 @@ -276,17 +276,6 @@ sl.push_back(QString("evoicepack " + m_voicepack)); sl.push_back(QString("eflag " + m_flag)); - if (!m_isNetTeam) - { - for(int i = 0; i < BINDS_NUMBER; i++) - { - if(m_binds[i].strbind.isEmpty() || m_binds[i].strbind == "default") - sl.push_back(QString("ebind " + config->bind(i) + " " + m_binds[i].action)); - else - sl.push_back(QString("ebind " + m_binds[i].strbind + " " + m_binds[i].action)); - } - } - for (int t = 0; t < m_numHedgehogs; t++) { sl.push_back(QString("eaddhh %1 %2 %3") diff -r efc5409a141d -r 860f959f92c9 hedgewars/uPhysFSLayer.pas --- a/hedgewars/uPhysFSLayer.pas Tue Aug 20 14:40:27 2013 +0400 +++ b/hedgewars/uPhysFSLayer.pas Fri Aug 23 16:02:08 2013 +0400 @@ -145,6 +145,8 @@ AddFileLog('[PhysFS] mount ' + PathPrefix + ': ' + inttostr(i)); i:= PHYSFS_mount(Str2PChar(UserPathPrefix + '/Data'), nil, false); AddFileLog('[PhysFS] mount ' + UserPathPrefix + '/Data: ' + inttostr(i)); + i:= PHYSFS_mount(Str2PChar(UserPathPrefix + '/Teams'), '/Teams', false); + AddFileLog('[PhysFS] mount ' + UserPathPrefix + '/Teams: ' + inttostr(i)); hedgewarsMountPackages; end; diff -r efc5409a141d -r 860f959f92c9 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Tue Aug 20 14:40:27 2013 +0400 +++ b/hedgewars/uTeams.pas Fri Aug 23 16:02:08 2013 +0400 @@ -43,7 +43,7 @@ implementation uses uLocale, uAmmos, uChat, uVariables, uUtils, uIO, uCaptions, uCommands, uDebug, - uGearsUtils, uGearsList, uVisualGearsList + uGearsUtils, uGearsList, uVisualGearsList, uPhysFSLayer {$IFDEF USE_TOUCH_INTERFACE}, uTouch{$ENDIF}; var MaxTeamHealth: LongInt; @@ -568,6 +568,61 @@ end end; +procedure loadTeamBinds(s: shortstring); +var i: LongInt; + f: PFSFile; + p, l: shortstring; + b: byte; +begin + l:= ''; + + for i:= 1 to length(s) do + if s[i] in ['\', '/', ':'] then s[i]:= '_'; + + s:= cPathz[ptTeams] + '/' + s + '.hwt'; + if pfsExists(s) then + begin + AddFileLog('Loading binds from: ' + s); + f:= pfsOpenRead(s); + while (not pfsEOF(f)) and (l <> '[Binds]') do + pfsReadLn(f, l); + + while (not pfsEOF(f)) and (l <> '') do + begin + pfsReadLn(f, l); + + p:= ''; + i:= 1; + while (i <= length(l)) and (l[i] <> '=') do + begin + if l[i] <> '%' then + begin + p:= p + l[i]; + inc(i) + end else + begin + l[i]:= '$'; + val(copy(l, i, 3), b); + p:= p + char(b); + inc(i, 3) + end; + end; + + if i < length(l) then + begin + l:= copy(l, i + 1, length(l) - i); + if l <> 'default' then + begin + p:= 'bind ' + l + ' ' + p; + ParseCommand(p, true) + end + end + end; + + pfsClose(f) + end +end; + procedure chAddTeam(var s: shortstring); var Color: Longword; ts, cs: shortstring; @@ -586,6 +641,8 @@ AddTeam(Color); CurrentTeam^.TeamName:= ts; CurrentTeam^.PlayerHash:= s; + loadTeamBinds(ts); + if GameType in [gmtDemo, gmtSave, gmtRecord] then CurrentTeam^.ExtDriven:= true;