Ported .Net Core commits:

hondacrx:
- Initial commit: Switch to .Net Core 2.0
- Fix build and removed not needed files
Fabi:
- Updated solution platforms.
- Changed folder structure.
- Change library target framework to netstandard2.0.
- Updated solution platforms again...
- Removed windows specific kernel32 function usage (Ctrl-C handler).
This commit is contained in:
Fabian
2017-10-26 17:23:44 +02:00
parent 227702e19c
commit a3dc7b3f48
844 changed files with 26064 additions and 1824 deletions
+244
View File
@@ -0,0 +1,244 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Framework.Collections;
using Framework.Constants;
using Game.DataStorage;
using Game.Network.Packets;
using System.Collections.Generic;
using System.Text;
namespace Game.Entities
{
public class PlayerTaxi
{
public void InitTaxiNodesForLevel(Race race, Class chrClass, uint level)
{
// class specific initial known nodes
var factionMask = Player.TeamForRace(race) == Team.Horde ? CliDB.HordeTaxiNodesMask : CliDB.AllianceTaxiNodesMask;
switch (chrClass)
{
case Class.Deathknight:
{
for (byte i = 0; i < PlayerConst.TaxiMaskSize; ++i)
m_taximask[i] |= (byte)(CliDB.OldContinentsNodesMask[i] & factionMask[i]);
break;
}
}
// race specific initial known nodes: capital and taxi hub masks
switch (race)
{
case Race.Human:
case Race.Dwarf:
case Race.NightElf:
case Race.Gnome:
case Race.Draenei:
case Race.Worgen:
case Race.PandarenAlliance:
SetTaximaskNode(2); // Stormwind, Elwynn
SetTaximaskNode(6); // Ironforge, Dun Morogh
SetTaximaskNode(26); // Lor'danel, Darkshore
SetTaximaskNode(27); // Rut'theran Village, Teldrassil
SetTaximaskNode(49); // Moonglade (Alliance)
SetTaximaskNode(94); // The Exodar
SetTaximaskNode(456); // Dolanaar, Teldrassil
SetTaximaskNode(457); // Darnassus, Teldrassil
SetTaximaskNode(582); // Goldshire, Elwynn
SetTaximaskNode(589); // Eastvale Logging Camp, Elwynn
SetTaximaskNode(619); // Kharanos, Dun Morogh
SetTaximaskNode(620); // Gol'Bolar Quarry, Dun Morogh
SetTaximaskNode(624); // Azure Watch, Azuremyst Isle
break;
case Race.Orc:
case Race.Undead:
case Race.Tauren:
case Race.Troll:
case Race.BloodElf:
case Race.Goblin:
case Race.PandarenHorde:
SetTaximaskNode(11); // Undercity, Tirisfal
SetTaximaskNode(22); // Thunder Bluff, Mulgore
SetTaximaskNode(23); // Orgrimmar, Durotar
SetTaximaskNode(69); // Moonglade (Horde)
SetTaximaskNode(82); // Silvermoon City
SetTaximaskNode(384); // The Bulwark, Tirisfal
SetTaximaskNode(402); // Bloodhoof Village, Mulgore
SetTaximaskNode(460); // Brill, Tirisfal Glades
SetTaximaskNode(536); // Sen'jin Village, Durotar
SetTaximaskNode(537); // Razor Hill, Durotar
SetTaximaskNode(625); // Fairbreeze Village, Eversong Woods
SetTaximaskNode(631); // Falconwing Square, Eversong Woods
break;
}
// new continent starting masks (It will be accessible only at new map)
switch (Player.TeamForRace(race))
{
case Team.Alliance:
SetTaximaskNode(100);
break;
case Team.Horde:
SetTaximaskNode(99);
break;
}
// level dependent taxi hubs
if (level >= 68)
SetTaximaskNode(213); //Shattered Sun Staging Area
}
public void LoadTaxiMask(string data)
{
var split = new StringArray(data, ' ');
byte index = 0;
for (var i = 0; index < PlayerConst.TaxiMaskSize && i != split.Length; ++i, ++index)
{
// load and set bits only for existing taxi nodes
m_taximask[index] = (byte)(CliDB.TaxiNodesMask[index] & uint.Parse(split[i]));
}
}
public void AppendTaximaskTo(ShowTaxiNodes data, bool all)
{
if (all)
data.Nodes = CliDB.TaxiNodesMask; // all existed nodes
else
data.Nodes = m_taximask; // known nodes
}
public bool LoadTaxiDestinationsFromString(string values, Team team)
{
ClearTaxiDestinations();
var split = new StringArray(values, ' ');
for (var i = 0; i < split.Length; ++i)
{
uint node = uint.Parse(split[i]);
AddTaxiDestination(node);
}
if (m_TaxiDestinations.Empty())
return true;
// Check integrity
if (m_TaxiDestinations.Count < 2)
return false;
for (int i = 1; i < m_TaxiDestinations.Count; ++i)
{
uint cost;
uint path;
Global.ObjectMgr.GetTaxiPath(m_TaxiDestinations[i - 1], m_TaxiDestinations[i], out path, out cost);
if (path == 0)
return false;
}
// can't load taxi path without mount set (quest taxi path?)
if (Global.ObjectMgr.GetTaxiMountDisplayId(GetTaxiSource(), team, true) == 0)
return false;
return true;
}
public string SaveTaxiDestinationsToString()
{
if (m_TaxiDestinations.Empty())
return "";
StringBuilder ss = new StringBuilder();
for (int i = 0; i < m_TaxiDestinations.Count; ++i)
ss.AppendFormat("{0} ", m_TaxiDestinations[i]);
return ss.ToString();
}
public uint GetCurrentTaxiPath()
{
if (m_TaxiDestinations.Count < 2)
return 0;
uint path;
uint cost;
Global.ObjectMgr.GetTaxiPath(m_TaxiDestinations[0], m_TaxiDestinations[1], out path, out cost);
return path;
}
public bool RequestEarlyLanding()
{
if (m_TaxiDestinations.Count <= 2)
return false;
// start from first destination - m_TaxiDestinations[0] is the current starting node
for (var i = 1; i < m_TaxiDestinations.Count; ++i)
{
if (IsTaximaskNodeKnown(m_TaxiDestinations[i]))
{
if (++i == m_TaxiDestinations.Count - 1)
return false; // if we are left with only 1 known node on the path don't change the spline, its our final destination anyway
m_TaxiDestinations.RemoveRange(i, m_TaxiDestinations.Count - 1);
return true;
}
}
return false;
}
public bool IsTaximaskNodeKnown(uint nodeidx)
{
byte field = (byte)((nodeidx - 1) / 8);
uint submask = (uint)(1 << (int)((nodeidx - 1) % 8));
return (m_taximask[field] & submask) == submask;
}
public bool SetTaximaskNode(uint nodeidx)
{
byte field = (byte)((nodeidx - 1) / 8);
uint submask = (uint)(1 << (int)((nodeidx - 1) % 8));
if ((m_taximask[field] & submask) != submask)
{
m_taximask[field] |= (byte)submask;
return true;
}
else
return false;
}
public void ClearTaxiDestinations() { m_TaxiDestinations.Clear(); }
public void AddTaxiDestination(uint dest) { m_TaxiDestinations.Add(dest); }
void SetTaxiDestination(List<uint> nodes)
{
m_TaxiDestinations.Clear();
m_TaxiDestinations.AddRange(nodes);
}
public uint GetTaxiSource() { return m_TaxiDestinations.Empty() ? 0 : m_TaxiDestinations[0]; }
public uint GetTaxiDestination() { return m_TaxiDestinations.Count < 2 ? 0 : m_TaxiDestinations[1]; }
public uint NextTaxiDestination()
{
m_TaxiDestinations.RemoveAt(0);
return GetTaxiDestination();
}
public List<uint> GetPath() { return m_TaxiDestinations; }
public bool empty() { return m_TaxiDestinations.Empty(); }
public byte[] m_taximask = new byte[PlayerConst.TaxiMaskSize];
List<uint> m_TaxiDestinations = new List<uint>();
}
}