Commit 18430657 authored by mercury233's avatar mercury233

Merge branch 'master' into patch-v1362

parents 9ff959b7 79a63bcb
Pipeline #38120 passed with stage
in 126 minutes and 11 seconds
......@@ -11,6 +11,7 @@ Assets/AssetStoreTools*
/.vs/
.idea
.vsconfig
/.vscode/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
......
......@@ -459,7 +459,7 @@ public class GameStringHelper
return re;
}
public static string getSetName(long Setcode)
public static string getSetName(ulong Setcode)
{
var setcodes = new int[4];
for(var j = 0; j < 4; j++)
......
......@@ -213,7 +213,10 @@ namespace Percy
{
public int Code;
public int Alias;
public long Setcode;
public UInt64 Setcode;
public UInt64 _Setcode1;
public UInt64 _Setcode2;
public UInt64 _Setcode3;
public int Type;
public int Level;
public int Attribute;
......@@ -294,7 +297,10 @@ namespace Percy
public static extern IntPtr create_duel(uint seed);
[DllImport("ocgcore", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern void start_duel(IntPtr pduel, int options);
public static extern IntPtr create_duel_v2([In] uint[] seeds);
[DllImport("ocgcore", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern void start_duel(IntPtr pduel, uint options);
[DllImport("ocgcore", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int get_ai_going_first_second(IntPtr pduel, IntPtr deckname);
......@@ -348,7 +354,7 @@ namespace Percy
public static extern int query_field_info(IntPtr pduel, IntPtr buf);
[DllImport("ocgcore", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int preload_script(IntPtr pduel, IntPtr script, int len);
public static extern int preload_script(IntPtr pduel, IntPtr script);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate IntPtr ScriptReader(string scriptName, int* len);
......@@ -1112,14 +1118,8 @@ namespace Percy
isFirst = true;
dll.set_player_info(duel, 0, 8000, 5, 1);
dll.set_player_info(duel, 1, 8000, 5, 1);
var reult = 0;
for (var i = 0; i < 10; i++)
{
reult = dll.preload_script(duel, getPtrString(path), 0);
if (reult > 0) break;
}
dll.preload_script(duel, getPtrString(path));
if (reult == 0) return false;
dll.start_duel(duel, 0);
Refresh();
new Thread(Process).Start();
......@@ -1133,18 +1133,12 @@ namespace Percy
isFirst = playerGoFirst;
dll.set_player_info(duel, 0, life, 5, 1);
dll.set_player_info(duel, 1, life, 5, 1);
var reult = 0;
for (var i = 0; i < 10; i++)
{
reult = dll.preload_script(duel, getPtrString(aiScript), 0);
if (reult > 0) break;
}
dll.preload_script(duel, getPtrString(aiScript));
if (reult == 0) return false;
addDeck(playerDek, playerGoFirst ? 0 : 1, !unrand);
addDeck(aiDeck, playerGoFirst ? 1 : 0, true);
dll.set_ai_id(duel, playerGoFirst ? 1 : 0);
var opt = 0;
UInt32 opt = 0;
opt |= 0x80;
if (unrand) opt |= 0x10;
var master = new BinaryMaster();
......@@ -1157,7 +1151,7 @@ namespace Percy
master.writer.Write((ushort) dll.query_field_count(duel, 1, 0x1));
master.writer.Write((ushort) dll.query_field_count(duel, 1, 0x40));
sendToPlayer(master.get());
dll.start_duel(duel, opt | (mr << 16));
dll.start_duel(duel, opt | (UInt32)(mr << 16));
Refresh();
new Thread(Process).Start();
return true;
......@@ -1188,6 +1182,7 @@ namespace Percy
var s = Encoding.UTF8.GetBytes(path);
var ptrFileName = Marshal.AllocHGlobal(s.Length + 1);
Marshal.Copy(s, 0, ptrFileName, s.Length);
Marshal.WriteByte(ptrFileName, s.Length, 0);
return ptrFileName;
}
......@@ -1293,8 +1288,15 @@ namespace Percy
yrp3dbuilder = new BinaryWriter(stream);
sendToPlayer(yrp.getNamePacket());
dll.end_duel(duel);
var mtrnd = new MersenneTwister(yrp.Seed);
duel = dll.create_duel(mtrnd.genrand_Int32());
if (yrp.ID == 0x32707279) // REPLAY_ID_YRP2
{
duel = dll.create_duel_v2(yrp.SeedsV2);
}
else
{
var mtrnd = new MersenneTwister(yrp.Seed);
duel = dll.create_duel(mtrnd.genrand_Int32());
}
godMode = true;
isFirst = true;
dll.set_player_info(duel, 0, yrp.StartLp, yrp.StartHand, yrp.DrawCount);
......@@ -1398,10 +1400,11 @@ namespace Percy
public List<byte[]> gameData = new List<byte[]>();
public int Hash = 0;
public int ID = 0;
public int opt = 0;
public uint opt = 0;
public List<PlayerData> playerData = new List<PlayerData>();
public byte[] Props = new byte[8];
public uint Seed = 0;
public uint[] SeedsV2 = new uint[8];
public int StartHand = 0;
public int StartLp = 0;
public int Version = 0;
......
......@@ -139,6 +139,17 @@ public class selectReplay : WindowServantSP
returnValue.DataSize = reader.ReadInt32();
returnValue.Hash = reader.ReadInt32();
returnValue.Props = reader.ReadBytes(8);
if (returnValue.ID == 0x32707279) // REPLAY_ID_YRP2
{
for (int i = 0; i < 8; i++)
{
returnValue.SeedsV2[i] = reader.ReadUInt32();
}
for (int i = 0; i < 4; i++) // other flags, unused for now
{
reader.ReadUInt32();
}
}
var raw = reader.ReadToEnd();
if ((returnValue.Flag & 0x1) > 0)
{
......@@ -164,8 +175,8 @@ public class selectReplay : WindowServantSP
returnValue.StartLp = reader.ReadInt32();
returnValue.StartHand = reader.ReadInt32();
returnValue.DrawCount = reader.ReadInt32();
returnValue.opt = reader.ReadInt32();
Program.I().ocgcore.MasterRule = returnValue.opt >> 16;
returnValue.opt = reader.ReadUInt32();
Program.I().ocgcore.MasterRule = (int)(returnValue.opt >> 16);
for (var i = 0; i < 4; i++)
{
var count = reader.ReadInt32();
......@@ -183,8 +194,8 @@ public class selectReplay : WindowServantSP
returnValue.StartLp = reader.ReadInt32();
returnValue.StartHand = reader.ReadInt32();
returnValue.DrawCount = reader.ReadInt32();
returnValue.opt = reader.ReadInt32();
Program.I().ocgcore.MasterRule = returnValue.opt >> 16;
returnValue.opt = reader.ReadUInt32();
Program.I().ocgcore.MasterRule = (int)(returnValue.opt >> 16);
for (var i = 0; i < 2; i++)
{
var count = reader.ReadInt32();
......@@ -342,14 +353,14 @@ public class selectReplay : WindowServantSP
public void KF_replay(string name, bool god = false)
{
string filename = name;
if (!File.Exists(filename))
{
if (File.Exists("replay/" + name + ".yrp3d"))
filename = "replay/" + name + ".yrp3d";
if (name.Length > 4 && name.ToLower().Substring(name.Length - 4, 4) == ".yrp")
filename = "replay/" + name;
if (!File.Exists(filename))
return;
if (!File.Exists(filename))
{
if (File.Exists("replay/" + name + ".yrp3d"))
filename = "replay/" + name + ".yrp3d";
if (name.Length > 4 && name.ToLower().Substring(name.Length - 4, 4) == ".yrp")
filename = "replay/" + name;
if (!File.Exists(filename))
return;
}
bool yrp3d = filename.Length > 6 && filename.ToLower().Substring(filename.Length - 6, 6) == ".yrp3d";
try
......
......@@ -9,7 +9,7 @@ namespace YGOSharp
public int Id;
public int Ot;
public int Alias;
public long Setcode;
public ulong Setcode;
public int Type;
public int Level;
......@@ -118,7 +118,7 @@ namespace YGOSharp
this.Id = (int)reader.GetInt64(0);
this.Ot = reader.GetInt32(1);
this.Alias = (int)reader.GetInt64(2);
this.Setcode = reader.GetInt64(3);
this.Setcode = (ulong)reader.GetInt64(3);
this.Type = (int)reader.GetInt64(4);
this.Attack = reader.GetInt32(5);
this.Defense = reader.GetInt32(6);
......
......@@ -438,12 +438,12 @@ namespace YGOSharp
!= ((int) CardType.Monster + (int) CardType.Token));
}
public static bool IfSetCard(int setCodeToAnalyse, long setCodeFromCard)
public static bool IfSetCard(int setCodeToAnalyse, ulong setCodeFromCard)
{
bool res = false;
int settype = setCodeToAnalyse & 0xfff;
int setsubtype = setCodeToAnalyse & 0xf000;
long sc = setCodeFromCard;
uint settype = (uint)setCodeToAnalyse & 0xfff;
uint setsubtype = (uint)setCodeToAnalyse & 0xf000;
ulong sc = setCodeFromCard;
while (sc != 0)
{
if ((sc & 0xfff) == settype && (sc & 0xf000 & setsubtype) == setsubtype)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment