diff --git a/.Lib9c.DevExtensions.Tests/Action/CreateOrReplaceAvatarTest.cs b/.Lib9c.DevExtensions.Tests/Action/CreateOrReplaceAvatarTest.cs index 0ab36e823..a7adcca27 100644 --- a/.Lib9c.DevExtensions.Tests/Action/CreateOrReplaceAvatarTest.cs +++ b/.Lib9c.DevExtensions.Tests/Action/CreateOrReplaceAvatarTest.cs @@ -369,7 +369,7 @@ public void Execute_Success( equipments.Add((row.ResultEquipmentId, data.level)); } } - var agentAddr = new PrivateKey().ToAddress(); + var agentAddr = new PrivateKey().Address; Execute( _initialStates, blockIndex, @@ -405,7 +405,7 @@ public void Execute_Failure( (int runeId, int level)[]? runes, (int stageId, int[] crystalRandomBuffIds)? crystalRandomBuff) { - var agentAddr = new PrivateKey().ToAddress(); + var agentAddr = new PrivateKey().Address; Assert.Throws(() => Execute( _initialStates, blockIndex, @@ -460,7 +460,6 @@ private static void Execute( PreviousState = previousStates, Signer = agentAddr, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); var agent = new AgentState((Dictionary)nextStates.GetState(agentAddr)!); diff --git a/.Lib9c.DevExtensions.Tests/Action/FaucetCurrencyTest.cs b/.Lib9c.DevExtensions.Tests/Action/FaucetCurrencyTest.cs index c74f835a7..d2872abdf 100644 --- a/.Lib9c.DevExtensions.Tests/Action/FaucetCurrencyTest.cs +++ b/.Lib9c.DevExtensions.Tests/Action/FaucetCurrencyTest.cs @@ -36,7 +36,7 @@ public FaucetCurrencyTest(ITestOutputHelper outputHelper) .AddBalance(GoldCurrencyState.Address, _ncg * int.MaxValue)); var goldCurrencyState = new GoldCurrencyState(_ncg); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); _initialState = _initialState diff --git a/.Lib9c.DevExtensions.Tests/Action/FaucetRuneTest.cs b/.Lib9c.DevExtensions.Tests/Action/FaucetRuneTest.cs index d9a6e0a2a..7f9d2eaeb 100644 --- a/.Lib9c.DevExtensions.Tests/Action/FaucetRuneTest.cs +++ b/.Lib9c.DevExtensions.Tests/Action/FaucetRuneTest.cs @@ -43,8 +43,8 @@ public FaucetRuneTest(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); _runeSheet = _initialState.GetSheet(); - Address agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + Address agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarState = new AvatarState( _avatarAddress, @@ -52,7 +52,7 @@ public FaucetRuneTest(ITestOutputHelper outputHelper) 0, tableSheets.GetAvatarSheets(), new GameConfigState(sheets[nameof(GameConfigSheet)]), - new PrivateKey().ToAddress() + new PrivateKey().Address ); agentState.avatarAddresses.Add(0, _avatarAddress); diff --git a/.Lib9c.DevExtensions.Tests/Action/ManipulateStateTest.cs b/.Lib9c.DevExtensions.Tests/Action/ManipulateStateTest.cs index 0500cc3ac..2f7af7089 100644 --- a/.Lib9c.DevExtensions.Tests/Action/ManipulateStateTest.cs +++ b/.Lib9c.DevExtensions.Tests/Action/ManipulateStateTest.cs @@ -25,7 +25,7 @@ namespace Lib9c.DevExtensions.Tests.Action { public class ManipulateStateTest { - private static readonly Address AdminAddr = new PrivateKey().ToAddress(); + private static readonly Address AdminAddr = new PrivateKey().Address; // See also InitializeUtil.cs private static readonly Currency Ncg = Currency.Legacy( @@ -305,37 +305,37 @@ public static IEnumerable FetchBalance() { yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Ncg, 0, 1), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Ncg, 1, 0), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Ncg, 1_000_000_000 - 1, 99), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Ncg, 1_000_000_000, 0), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Crystal, 0, 1), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue(Crystal, 1, 0), }; yield return new object[] { - new PrivateKey().ToAddress(), + new PrivateKey().Address, new FungibleAssetValue( Crystal, long.MaxValue, diff --git a/.Lib9c.Miner.Tests/CustomActionsDeserializableValidatorTest.cs b/.Lib9c.Miner.Tests/CustomActionsDeserializableValidatorTest.cs index 0b3d82745..2383770db 100644 --- a/.Lib9c.Miner.Tests/CustomActionsDeserializableValidatorTest.cs +++ b/.Lib9c.Miner.Tests/CustomActionsDeserializableValidatorTest.cs @@ -44,7 +44,7 @@ private class DailyReward : IAction public void LoadPlainValue(IValue plainValue) { - AvatarAddress = new Address(((Binary)((Dictionary)plainValue)["a"]).ByteArray); + AvatarAddress = new Address(((Dictionary)plainValue)["a"]); } public IAccount Execute(IActionContext context) diff --git a/.Lib9c.StateService.Shared/Lib9c.StateService.Shared.csproj b/.Lib9c.StateService.Shared/Lib9c.StateService.Shared.csproj deleted file mode 100644 index 132c02c59..000000000 --- a/.Lib9c.StateService.Shared/Lib9c.StateService.Shared.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net6.0 - enable - enable - - - diff --git a/.Lib9c.StateService.Shared/RemoteEvaluationRequest.cs b/.Lib9c.StateService.Shared/RemoteEvaluationRequest.cs deleted file mode 100644 index f2b340916..000000000 --- a/.Lib9c.StateService.Shared/RemoteEvaluationRequest.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Lib9c.StateService.Shared; - -public class RemoteEvaluationRequest -{ - public byte[] PreEvaluationBlock { get; set; } - - public byte[] BaseStateRootHash { get; set; } -} diff --git a/.Lib9c.StateService.Shared/RemoteEvaluationResponse.cs b/.Lib9c.StateService.Shared/RemoteEvaluationResponse.cs deleted file mode 100644 index 8aed77d19..000000000 --- a/.Lib9c.StateService.Shared/RemoteEvaluationResponse.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Lib9c.StateService.Shared; - -public class RemoteEvaluationResponse -{ - public byte[][] Evaluations { get; set; } -} diff --git a/.Lib9c.StateService/Controllers/RemoteEvaluationController.cs b/.Lib9c.StateService/Controllers/RemoteEvaluationController.cs deleted file mode 100644 index db9eb743c..000000000 --- a/.Lib9c.StateService/Controllers/RemoteEvaluationController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Security.Cryptography; -using Bencodex; -using Bencodex.Types; -using Lib9c.StateService.Shared; -using Libplanet.Action; -using Libplanet.Common; -using Libplanet.Extensions.ActionEvaluatorCommonComponents; -using Libplanet.Store; -using Microsoft.AspNetCore.Mvc; -using Nekoyume.Action; -using Nekoyume.Action.Loader; - -namespace Lib9c.StateService.Controllers; - -[ApiController] -[Route("/evaluation")] -public class RemoteEvaluationController : ControllerBase -{ - private readonly IActionEvaluator _actionEvaluator; - private readonly ILogger _logger; - private readonly Codec _codec; - - public RemoteEvaluationController( - IStateStore stateStore, - ILogger logger, - Codec codec) - { - _actionEvaluator = new ActionEvaluator( - _ => new RewardGold(), - stateStore, - new NCActionLoader()); - _logger = logger; - _codec = codec; - } - - [HttpPost] - public ActionResult GetEvaluation([FromBody] RemoteEvaluationRequest request) - { - var decoded = _codec.Decode(request.PreEvaluationBlock); - if (decoded is not Dictionary dictionary) - { - return StatusCode(StatusCodes.Status400BadRequest); - } - - var decodedStateRootHash = _codec.Decode(request.BaseStateRootHash); - if (decodedStateRootHash is not Binary binary) - { - return StatusCode(StatusCodes.Status400BadRequest); - } - - var preEvaluationBlock = PreEvaluationBlockMarshaller.Unmarshal(dictionary); - var baseStateRootHash = new HashDigest(binary); - - return Ok(new RemoteEvaluationResponse - { - Evaluations = _actionEvaluator - .Evaluate(preEvaluationBlock, baseStateRootHash) - .Select(ActionEvaluationMarshaller.Serialize) - .ToArray(), - }); - } -} diff --git a/.Lib9c.StateService/Lib9c.StateService.csproj b/.Lib9c.StateService/Lib9c.StateService.csproj deleted file mode 100644 index 92810d8d3..000000000 --- a/.Lib9c.StateService/Lib9c.StateService.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - net6.0 - enable - Exe - enable - - - - - - - - - - - - - - diff --git a/.Lib9c.StateService/Program.cs b/.Lib9c.StateService/Program.cs deleted file mode 100644 index ba2b8de7b..000000000 --- a/.Lib9c.StateService/Program.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Bencodex; -using Libplanet.RocksDBStore; -using Libplanet.Store; - -var builder = WebApplication.CreateBuilder(args); - -builder.Configuration.AddEnvironmentVariables(); - -// Add services to the container. - -builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); - -builder.Services.AddSingleton(); - -builder.Services.AddSingleton(_ => -{ - var path = builder.Configuration.GetValue("StateStorePath"); - return new TrieStateStore(new RocksDBKeyValueStore(path)); -}); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/.Lib9c.StateService/Properties/launchSettings.json b/.Lib9c.StateService/Properties/launchSettings.json deleted file mode 100644 index 6a1d8fda1..000000000 --- a/.Lib9c.StateService/Properties/launchSettings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:25712", - "sslPort": 44330 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "http://localhost:5157", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "https://localhost:7140;http://localhost:5157", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/.Lib9c.StateService/appsettings-schema.json b/.Lib9c.StateService/appsettings-schema.json deleted file mode 100644 index 168a36a46..000000000 --- a/.Lib9c.StateService/appsettings-schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "object", - "description": "appsettings.json to configure application.", - "properties": { - "RemoteBlockChainStatesEndpoint": { - "type": "string", - "description": "The headless' Libplanet.Explorer GraphQL endpoint. (e.g., http://localhost/graphql/explorer)" - } - }, - "required": ["RemoteBlockChainStatesEndpoint"] -} diff --git a/.Lib9c.StateService/appsettings.Development.json b/.Lib9c.StateService/appsettings.Development.json deleted file mode 100644 index 0c208ae91..000000000 --- a/.Lib9c.StateService/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/.Lib9c.StateService/appsettings.json b/.Lib9c.StateService/appsettings.json deleted file mode 100644 index e3001fa1a..000000000 --- a/.Lib9c.StateService/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "./appsettings-schema.json", - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/.Lib9c.Tests/AccountExtensions.cs b/.Lib9c.Tests/AccountExtensions.cs new file mode 100644 index 000000000..cb0b71035 --- /dev/null +++ b/.Lib9c.Tests/AccountExtensions.cs @@ -0,0 +1,67 @@ +namespace Lib9c.Tests +{ + using Lib9c.Tests.Action; + using Libplanet.Action.State; + using Libplanet.Crypto; + using Libplanet.Store.Trie; + + public static class AccountExtensions + { + private static readonly byte[] _conversionTable = + { + 48, // '0' + 49, // '1' + 50, // '2' + 51, // '3' + 52, // '4' + 53, // '5' + 54, // '6' + 55, // '7' + 56, // '8' + 57, // '9' + 97, // 'a' + 98, // 'b' + 99, // 'c' + 100, // 'd' + 101, // 'e' + 102, // 'f' + }; + + /// + /// A rather shrewed method of removing value from an account. + /// This can be very slow depending on the size of the state. + /// For test backward compatibility only. Should not be used in production. + /// + /// The account to remove the value from. + /// The address of the value to remove. + /// + /// A new instance with the value removed. + /// + public static IAccount SetNull(this IAccount account, Address address) + { + var trie = MockState.Empty.Trie; + var path = ToStateKey(address); + foreach (var kv in account.Trie.IterateValues()) + { + trie = kv.Path.Equals(path) + ? trie + : trie.Set(kv.Path, kv.Value); + } + + return new Account(new AccountState(trie)); + } + + private static KeyBytes ToStateKey(Address address) + { + var addressBytes = address.ByteArray; + byte[] buffer = new byte[addressBytes.Length * 2]; + for (int i = 0; i < addressBytes.Length; i++) + { + buffer[i * 2] = _conversionTable[addressBytes[i] >> 4]; + buffer[i * 2 + 1] = _conversionTable[addressBytes[i] & 0xf]; + } + + return new KeyBytes(buffer); + } + } +} diff --git a/.Lib9c.Tests/Action/AccountStateDeltaExtensionsTest.cs b/.Lib9c.Tests/Action/AccountStateDeltaExtensionsTest.cs index 83fb2917c..3c9a2756d 100644 --- a/.Lib9c.Tests/Action/AccountStateDeltaExtensionsTest.cs +++ b/.Lib9c.Tests/Action/AccountStateDeltaExtensionsTest.cs @@ -46,7 +46,7 @@ public void SetWorldBossKillReward(int level, int expectedRune, int expectedCrys { var context = new ActionContext(); IAccount states = new Account(MockState.Empty); - var rewardInfoAddress = new PrivateKey().ToAddress(); + var rewardInfoAddress = new PrivateKey().Address; var rewardRecord = new WorldBossKillRewardRecord(); for (int i = 0; i < level; i++) { @@ -59,7 +59,7 @@ public void SetWorldBossKillReward(int level, int expectedRune, int expectedCrys var tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); var runeSheet = tableSheets.RuneSheet; var runeCurrency = RuneHelper.ToCurrency(runeSheet[10001]); - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var bossState = new WorldBossState( tableSheets.WorldBossListSheet[1], tableSheets.WorldBossGlobalHpSheet[1] @@ -156,7 +156,7 @@ public void SetCouponWallet() [InlineData(4)] public void Mead(int agentBalance) { - var patron = new PrivateKey().ToAddress(); + var patron = new PrivateKey().Address; var agentContractAddress = _agentAddress.GetPledgeAddress(); var mead = Currencies.Mead; var price = RequestPledge.DefaultRefillMead * mead; diff --git a/.Lib9c.Tests/Action/AccountStateViewExtensionsTest.cs b/.Lib9c.Tests/Action/AccountStateViewExtensionsTest.cs index 1b7efed0f..f233512f7 100644 --- a/.Lib9c.Tests/Action/AccountStateViewExtensionsTest.cs +++ b/.Lib9c.Tests/Action/AccountStateViewExtensionsTest.cs @@ -129,7 +129,7 @@ public void GetAvatarStateV2_Throw_FailedLoadStateException(string key) .SetState(_avatarAddress.Derive(LegacyInventoryKey), _avatarState.inventory.Serialize()) .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), _avatarState.worldInformation.Serialize()) .SetState(_avatarAddress.Derive(LegacyQuestListKey), _avatarState.questList.Serialize()); - states = states.SetState(_avatarAddress.Derive(key), null); + states = states.SetNull(_avatarAddress.Derive(key)); var exc = Assert.Throws(() => states.GetAvatarStateV2(_avatarAddress)); Assert.Contains(key, exc.Message); } @@ -189,12 +189,12 @@ public void GetStatesAsDict() IAccount states = new Account(MockState.Empty); var dict = new Dictionary { - { new PrivateKey().ToAddress(), Null.Value }, - { new PrivateKey().ToAddress(), new Bencodex.Types.Boolean(false) }, - { new PrivateKey().ToAddress(), new Bencodex.Types.Boolean(true) }, - { new PrivateKey().ToAddress(), new Integer(int.MinValue) }, - { new PrivateKey().ToAddress(), new Integer(0) }, - { new PrivateKey().ToAddress(), new Integer(int.MaxValue) }, + { new PrivateKey().Address, Null.Value }, + { new PrivateKey().Address, new Bencodex.Types.Boolean(false) }, + { new PrivateKey().Address, new Bencodex.Types.Boolean(true) }, + { new PrivateKey().Address, new Integer(int.MinValue) }, + { new PrivateKey().Address, new Integer(0) }, + { new PrivateKey().Address, new Integer(int.MaxValue) }, }; foreach (var (address, value) in dict) { diff --git a/.Lib9c.Tests/Action/ActionContext.cs b/.Lib9c.Tests/Action/ActionContext.cs index 62ba8ded6..950a46bee 100644 --- a/.Lib9c.Tests/Action/ActionContext.cs +++ b/.Lib9c.Tests/Action/ActionContext.cs @@ -27,8 +27,6 @@ public class ActionContext : IActionContext public int BlockProtocolVersion { get; set; } - public bool Rehearsal { get; set; } - public IAccount PreviousState { get; set; } public int RandomSeed { get; set; } diff --git a/.Lib9c.Tests/Action/ActionContextExtensionsTest.cs b/.Lib9c.Tests/Action/ActionContextExtensionsTest.cs index d135eb735..ca72c52d2 100644 --- a/.Lib9c.Tests/Action/ActionContextExtensionsTest.cs +++ b/.Lib9c.Tests/Action/ActionContextExtensionsTest.cs @@ -39,7 +39,7 @@ public static IEnumerable IsMainNetTestcases() new GoldCurrencyState( #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - Currency.Legacy("NCG", 2, new PrivateKey().ToAddress())), + Currency.Legacy("NCG", 2, new PrivateKey().Address)), #pragma warning restore CS0618 false, }; @@ -102,7 +102,7 @@ public static IEnumerable IsPreviewNetTestcases() new GoldCurrencyState( #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - Currency.Legacy("NCG", 2, new PrivateKey().ToAddress())), + Currency.Legacy("NCG", 2, new PrivateKey().Address)), #pragma warning restore CS0618 false, }; diff --git a/.Lib9c.Tests/Action/ActionEvaluationTest.cs b/.Lib9c.Tests/Action/ActionEvaluationTest.cs index 2afb18e0a..4cb2dbcfa 100644 --- a/.Lib9c.Tests/Action/ActionEvaluationTest.cs +++ b/.Lib9c.Tests/Action/ActionEvaluationTest.cs @@ -30,8 +30,8 @@ public ActionEvaluationTest() // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _currency = Currency.Legacy("NCG", 2, null); #pragma warning restore CS0618 - _signer = new PrivateKey().ToAddress(); - _sender = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; + _sender = new PrivateKey().Address; _states = new Account(MockState.Empty) .SetState(_signer, (Text)"ANYTHING") .SetState(default, Dictionary.Empty.Add("key", "value")) @@ -92,6 +92,7 @@ public ActionEvaluationTest() [InlineData(typeof(EndPledge))] [InlineData(typeof(CreatePledge))] [InlineData(typeof(TransferAssets))] + [InlineData(typeof(RuneSummon))] public void Serialize_With_MessagePack(Type actionType) { var action = GetAction(actionType); @@ -151,9 +152,9 @@ private ActionBase GetAction(Type type) RuneInfos = new List(), WorldId = 0, StageId = 0, - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, - ActivateAccount _ => new ActivateAccount(new PrivateKey().ToAddress(), new byte[] { 0x0 }), + ActivateAccount _ => new ActivateAccount(new PrivateKey().Address, new byte[] { 0x0 }), AddActivatedAccount _ => new AddActivatedAccount(), AddRedeemCode _ => new AddRedeemCode { @@ -161,14 +162,14 @@ private ActionBase GetAction(Type type) }, Buy _ => new Buy { - buyerAvatarAddress = new PrivateKey().ToAddress(), + buyerAvatarAddress = new PrivateKey().Address, purchaseInfos = new[] { new PurchaseInfo( Guid.NewGuid(), Guid.NewGuid(), _signer, - new PrivateKey().ToAddress(), + new PrivateKey().Address, ItemSubType.Armor, #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 @@ -220,9 +221,9 @@ private ActionBase GetAction(Type type) }, RankingBattle _ => new RankingBattle { - avatarAddress = new PrivateKey().ToAddress(), - enemyAddress = new PrivateKey().ToAddress(), - weeklyArenaAddress = new PrivateKey().ToAddress(), + avatarAddress = new PrivateKey().Address, + enemyAddress = new PrivateKey().Address, + weeklyArenaAddress = new PrivateKey().Address, costumeIds = new List(), equipmentIds = new List(), }, @@ -230,7 +231,7 @@ private ActionBase GetAction(Type type) RedeemCode _ => new RedeemCode { Code = "code", - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, RewardGold _ => null, Sell _ => new Sell @@ -240,7 +241,7 @@ private ActionBase GetAction(Type type) SellCancellation _ => new SellCancellation(), UpdateSell _ => new UpdateSell { - sellerAvatarAddress = new PrivateKey().ToAddress(), + sellerAvatarAddress = new PrivateKey().Address, updateSellInfos = new[] { new UpdateSellInfo( @@ -262,12 +263,12 @@ private ActionBase GetAction(Type type) }, Grinding _ => new Grinding { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, EquipmentIds = new List(), }, UnlockEquipmentRecipe _ => new UnlockEquipmentRecipe { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, RecipeIds = new List { 2, @@ -276,7 +277,7 @@ private ActionBase GetAction(Type type) }, UnlockWorld _ => new UnlockWorld { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, WorldIds = new List() { 2, @@ -303,7 +304,7 @@ private ActionBase GetAction(Type type) }, Raid _ => new Raid { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, CostumeIds = new List(), EquipmentIds = new List(), FoodIds = new List(), @@ -329,7 +330,7 @@ private ActionBase GetAction(Type type) { new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ItemCount = 1, Price = 1 * _currency, TradableId = Guid.NewGuid(), @@ -337,7 +338,7 @@ private ActionBase GetAction(Type type) }, new AssetInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, Price = 1 * _currency, Asset = 1 * RuneHelper.StakeRune, Type = ProductType.FungibleAssetValue, @@ -348,21 +349,21 @@ private ActionBase GetAction(Type type) }, ReRegisterProduct _ => new ReRegisterProduct { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ReRegisterInfos = new List<(IProductInfo, IRegisterInfo)> { ( new ItemProductInfo { - AvatarAddress = new PrivateKey().ToAddress(), - AgentAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, + AgentAddress = new PrivateKey().Address, Price = 1 * _currency, ProductId = Guid.NewGuid(), Type = ProductType.Fungible, }, new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ItemCount = 1, Price = 1 * _currency, TradableId = Guid.NewGuid(), @@ -372,15 +373,15 @@ private ActionBase GetAction(Type type) ( new ItemProductInfo { - AvatarAddress = new PrivateKey().ToAddress(), - AgentAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, + AgentAddress = new PrivateKey().Address, Price = 1 * _currency, ProductId = Guid.NewGuid(), Type = ProductType.NonFungible, }, new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ItemCount = 1, Price = 1 * _currency, TradableId = Guid.NewGuid(), @@ -390,15 +391,15 @@ private ActionBase GetAction(Type type) ( new FavProductInfo { - AvatarAddress = new PrivateKey().ToAddress(), - AgentAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, + AgentAddress = new PrivateKey().Address, Price = 1 * _currency, ProductId = Guid.NewGuid(), Type = ProductType.FungibleAssetValue, }, new AssetInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, Price = 1 * _currency, Asset = 1 * RuneHelper.StakeRune, Type = ProductType.FungibleAssetValue, @@ -409,13 +410,13 @@ private ActionBase GetAction(Type type) }, CancelProductRegistration _ => new CancelProductRegistration { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ProductInfos = new List { new FavProductInfo { - AvatarAddress = new PrivateKey().ToAddress(), - AgentAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, + AgentAddress = new PrivateKey().Address, Price = 1 * _currency, ProductId = Guid.NewGuid(), Type = ProductType.FungibleAssetValue, @@ -425,13 +426,13 @@ private ActionBase GetAction(Type type) }, BuyProduct _ => new BuyProduct { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, ProductInfos = new List { new ItemProductInfo { - AvatarAddress = new PrivateKey().ToAddress(), - AgentAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, + AgentAddress = new PrivateKey().Address, Price = 1 * _currency, ProductId = Guid.NewGuid(), Type = ProductType.Fungible, @@ -442,26 +443,32 @@ private ActionBase GetAction(Type type) }, RequestPledge _ => new RequestPledge { - AgentAddress = new PrivateKey().ToAddress(), + AgentAddress = new PrivateKey().Address, }, ApprovePledge _ => new ApprovePledge { - PatronAddress = new PrivateKey().ToAddress(), + PatronAddress = new PrivateKey().Address, }, EndPledge _ => new EndPledge { - AgentAddress = new PrivateKey().ToAddress(), + AgentAddress = new PrivateKey().Address, }, CreatePledge _ => new CreatePledge { - PatronAddress = new PrivateKey().ToAddress(), - AgentAddresses = new[] { (new PrivateKey().ToAddress(), new PrivateKey().ToAddress()) }, + PatronAddress = new PrivateKey().Address, + AgentAddresses = new[] { (new PrivateKey().Address, new PrivateKey().Address) }, Mead = 4, }, TransferAssets _ => new TransferAssets(_sender, new List<(Address, FungibleAssetValue)> { (_signer, 1 * _currency), }), + RuneSummon _ => new RuneSummon + { + AvatarAddress = _sender, + GroupId = 20001, + SummonCount = 10, + }, _ => throw new InvalidCastException(), }; } diff --git a/.Lib9c.Tests/Action/ApprovePledgeTest.cs b/.Lib9c.Tests/Action/ApprovePledgeTest.cs index f007c8bb2..36425c227 100644 --- a/.Lib9c.Tests/Action/ApprovePledgeTest.cs +++ b/.Lib9c.Tests/Action/ApprovePledgeTest.cs @@ -16,8 +16,8 @@ public class ApprovePledgeTest [InlineData(100)] public void Execute(int mead) { - var address = new PrivateKey().ToAddress(); - var patron = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; + var patron = new PrivateKey().Address; var contractAddress = address.Derive(nameof(RequestPledge)); IAccount states = new Account(MockState.Empty) .SetState( @@ -47,13 +47,13 @@ public void Execute(int mead) [InlineData(false, true, typeof(AlreadyContractedException))] public void Execute_Throw_Exception(bool invalidPatron, bool alreadyContract, Type exc) { - var address = new PrivateKey().ToAddress(); - var patron = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; + var patron = new PrivateKey().Address; var contractAddress = address.Derive(nameof(RequestPledge)); IValue contract = Null.Value; if (invalidPatron) { - contract = List.Empty.Add(new PrivateKey().ToAddress().Serialize()); + contract = List.Empty.Add(new PrivateKey().Address.Serialize()); } if (alreadyContract) diff --git a/.Lib9c.Tests/Action/ArenahelperTest.cs b/.Lib9c.Tests/Action/ArenahelperTest.cs index e70881d00..4aa6ac423 100644 --- a/.Lib9c.Tests/Action/ArenahelperTest.cs +++ b/.Lib9c.Tests/Action/ArenahelperTest.cs @@ -52,7 +52,7 @@ public ArenaHelperTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -89,7 +89,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/BattleArena10Test.cs b/.Lib9c.Tests/Action/BattleArena10Test.cs index 734030b98..d44b77aed 100644 --- a/.Lib9c.Tests/Action/BattleArena10Test.cs +++ b/.Lib9c.Tests/Action/BattleArena10Test.cs @@ -64,7 +64,7 @@ public BattleArena10Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1069,7 +1068,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1205,7 +1204,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1310,7 +1308,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena11Test.cs b/.Lib9c.Tests/Action/BattleArena11Test.cs index ef11262ce..f5441e588 100644 --- a/.Lib9c.Tests/Action/BattleArena11Test.cs +++ b/.Lib9c.Tests/Action/BattleArena11Test.cs @@ -64,7 +64,7 @@ public BattleArena11Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1069,7 +1068,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1205,7 +1204,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1310,7 +1308,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena12Test.cs b/.Lib9c.Tests/Action/BattleArena12Test.cs index e478c53e2..3061b5f79 100644 --- a/.Lib9c.Tests/Action/BattleArena12Test.cs +++ b/.Lib9c.Tests/Action/BattleArena12Test.cs @@ -64,7 +64,7 @@ public BattleArena12Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1108,7 +1107,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1244,7 +1243,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1349,7 +1347,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena13Test.cs b/.Lib9c.Tests/Action/BattleArena13Test.cs index a74780bb2..37ca76d60 100644 --- a/.Lib9c.Tests/Action/BattleArena13Test.cs +++ b/.Lib9c.Tests/Action/BattleArena13Test.cs @@ -64,7 +64,7 @@ public BattleArena13Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1069,7 +1068,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1205,7 +1204,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1310,7 +1308,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena14Test.cs b/.Lib9c.Tests/Action/BattleArena14Test.cs index f22acdde8..2f80c4a07 100644 --- a/.Lib9c.Tests/Action/BattleArena14Test.cs +++ b/.Lib9c.Tests/Action/BattleArena14Test.cs @@ -64,7 +64,7 @@ public BattleArena14Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -948,7 +948,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1044,7 +1043,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1180,7 +1179,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1285,7 +1283,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena1Test.cs b/.Lib9c.Tests/Action/BattleArena1Test.cs index f7065a2d8..391e8d9cc 100644 --- a/.Lib9c.Tests/Action/BattleArena1Test.cs +++ b/.Lib9c.Tests/Action/BattleArena1Test.cs @@ -64,7 +64,7 @@ public BattleArena1Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -139,7 +139,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -209,7 +209,6 @@ public IAccount JoinArena(IActionContext context, Address signer, Address avatar PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return _state; @@ -293,7 +292,6 @@ public void Execute(long nextBlockIndex, int championshipId, int round, int tick PreviousState = _state, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/BattleArena2Test.cs b/.Lib9c.Tests/Action/BattleArena2Test.cs index 93a9ea929..601e9748a 100644 --- a/.Lib9c.Tests/Action/BattleArena2Test.cs +++ b/.Lib9c.Tests/Action/BattleArena2Test.cs @@ -66,7 +66,7 @@ public BattleArena2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -143,7 +143,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -213,7 +213,6 @@ public IAccount JoinArena(IActionContext context, Address signer, Address avatar PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return _state; @@ -308,7 +307,6 @@ public void Execute( PreviousState = _state, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/BattleArena3Test.cs b/.Lib9c.Tests/Action/BattleArena3Test.cs index 18dd8ef07..a1f844053 100644 --- a/.Lib9c.Tests/Action/BattleArena3Test.cs +++ b/.Lib9c.Tests/Action/BattleArena3Test.cs @@ -66,7 +66,7 @@ public BattleArena3Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -143,7 +143,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -213,7 +213,6 @@ public IAccount JoinArena(IActionContext context, Address signer, Address avatar PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return _state; @@ -308,7 +307,6 @@ public void Execute( PreviousState = _state, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/BattleArena4Test.cs b/.Lib9c.Tests/Action/BattleArena4Test.cs index b78894e10..acbfc0f97 100644 --- a/.Lib9c.Tests/Action/BattleArena4Test.cs +++ b/.Lib9c.Tests/Action/BattleArena4Test.cs @@ -66,7 +66,7 @@ public BattleArena4Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -143,7 +143,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -213,7 +213,6 @@ public IAccount JoinArena(IActionContext context, Address signer, Address avatar PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return _state; @@ -308,7 +307,6 @@ public void Execute( PreviousState = _state, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -864,7 +862,7 @@ public void Execute_v100291() { if (keys.Contains(key)) { - _state = _state.SetState(Addresses.TableSheet.Derive(key), null!); + _state = _state.SetNull(Addresses.TableSheet.Derive(key)); } } @@ -927,7 +925,6 @@ public void Execute_v100291() PreviousState = _state, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/BattleArena5Test.cs b/.Lib9c.Tests/Action/BattleArena5Test.cs index 8b2f9aab8..2cf996f50 100644 --- a/.Lib9c.Tests/Action/BattleArena5Test.cs +++ b/.Lib9c.Tests/Action/BattleArena5Test.cs @@ -62,7 +62,7 @@ public BattleArena5Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -762,7 +762,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -896,7 +896,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1001,7 +1000,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena6Test.cs b/.Lib9c.Tests/Action/BattleArena6Test.cs index 7067a0b31..41ee8306a 100644 --- a/.Lib9c.Tests/Action/BattleArena6Test.cs +++ b/.Lib9c.Tests/Action/BattleArena6Test.cs @@ -64,7 +64,7 @@ public BattleArena6Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -848,7 +848,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -982,7 +982,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1087,7 +1086,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena7Test.cs b/.Lib9c.Tests/Action/BattleArena7Test.cs index 523a5626f..f1e6b41d2 100644 --- a/.Lib9c.Tests/Action/BattleArena7Test.cs +++ b/.Lib9c.Tests/Action/BattleArena7Test.cs @@ -63,7 +63,7 @@ public BattleArena7Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -860,7 +860,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -995,7 +995,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1100,7 +1099,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena8Test.cs b/.Lib9c.Tests/Action/BattleArena8Test.cs index 41779f3cf..56fe5f553 100644 --- a/.Lib9c.Tests/Action/BattleArena8Test.cs +++ b/.Lib9c.Tests/Action/BattleArena8Test.cs @@ -64,7 +64,7 @@ public BattleArena8Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1069,7 +1068,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1205,7 +1204,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1310,7 +1308,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArena9Test.cs b/.Lib9c.Tests/Action/BattleArena9Test.cs index e79f7a291..b840f76f5 100644 --- a/.Lib9c.Tests/Action/BattleArena9Test.cs +++ b/.Lib9c.Tests/Action/BattleArena9Test.cs @@ -64,7 +64,7 @@ public BattleArena9Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -973,7 +973,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1069,7 +1068,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1205,7 +1204,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1310,7 +1308,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleArenaTest.cs b/.Lib9c.Tests/Action/BattleArenaTest.cs index e5b89c26e..693a0a42c 100644 --- a/.Lib9c.Tests/Action/BattleArenaTest.cs +++ b/.Lib9c.Tests/Action/BattleArenaTest.cs @@ -64,7 +64,7 @@ public BattleArenaTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -948,7 +948,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = previousStates, Signer = _agent1Address, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, })); } @@ -1044,7 +1043,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -1180,7 +1179,6 @@ private void Execute( PreviousState = previousStates, Signer = myAgentAddress, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -1285,7 +1283,6 @@ private IAccount JoinArena( PreviousState = states, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return states; diff --git a/.Lib9c.Tests/Action/BattleGrandFinale1Test.cs b/.Lib9c.Tests/Action/BattleGrandFinale1Test.cs index 78cea9a9a..d1c808f92 100644 --- a/.Lib9c.Tests/Action/BattleGrandFinale1Test.cs +++ b/.Lib9c.Tests/Action/BattleGrandFinale1Test.cs @@ -62,7 +62,7 @@ public BattleGrandFinale1Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -319,14 +319,14 @@ public void Execute_AddressNotFoundInArenaParticipantsException(bool excludeMe) var (tempAgent, tempAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); var myAvatar = excludeMe ? previousStates.GetAvatarStateV2(_avatar1Address) : tempAvatar; var (enemyAgent, enemyAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); previousStates = previousStates .SetState(tempAgent.address, tempAgent.Serialize()) @@ -359,7 +359,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/BattleGrandFinale2Test.cs b/.Lib9c.Tests/Action/BattleGrandFinale2Test.cs index 1469c463b..2f3f133e1 100644 --- a/.Lib9c.Tests/Action/BattleGrandFinale2Test.cs +++ b/.Lib9c.Tests/Action/BattleGrandFinale2Test.cs @@ -62,7 +62,7 @@ public BattleGrandFinale2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -319,14 +319,14 @@ public void Execute_AddressNotFoundInArenaParticipantsException(bool excludeMe) var (tempAgent, tempAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); var myAvatar = excludeMe ? previousStates.GetAvatarStateV2(_avatar1Address) : tempAvatar; var (enemyAgent, enemyAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); previousStates = previousStates .SetState(tempAgent.address, tempAgent.Serialize()) @@ -359,7 +359,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/BattleGrandFinale3Test.cs b/.Lib9c.Tests/Action/BattleGrandFinale3Test.cs index 86a000620..0d68957a5 100644 --- a/.Lib9c.Tests/Action/BattleGrandFinale3Test.cs +++ b/.Lib9c.Tests/Action/BattleGrandFinale3Test.cs @@ -62,7 +62,7 @@ public BattleGrandFinale3Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(ncg); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -319,14 +319,14 @@ public void Execute_AddressNotFoundInArenaParticipantsException(bool excludeMe) var (tempAgent, tempAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); var myAvatar = excludeMe ? previousStates.GetAvatarStateV2(_avatar1Address) : tempAvatar; var (enemyAgent, enemyAvatar) = GetAgentStateWithAvatarState( _sheets, _tableSheets, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 1); previousStates = previousStates .SetState(tempAgent.address, tempAgent.Serialize()) @@ -359,7 +359,7 @@ private static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWit Address rankingMapAddress, int clearStageId) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/BurnAssetTest.cs b/.Lib9c.Tests/Action/BurnAssetTest.cs index a601665a3..375765b39 100644 --- a/.Lib9c.Tests/Action/BurnAssetTest.cs +++ b/.Lib9c.Tests/Action/BurnAssetTest.cs @@ -17,7 +17,7 @@ public class BurnAssetTest public BurnAssetTest() { - _signer = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; _prevState = new Account( MockState.Empty .SetBalance(_signer, Currencies.Crystal * 100) @@ -135,7 +135,6 @@ public void Execute() { PreviousState = prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 1, } ); @@ -168,7 +167,6 @@ public void Execute_With_AvatarAddress() { PreviousState = prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 1, } ); @@ -196,7 +194,6 @@ public void Execute_Throws_InsufficientBalanceException() { PreviousState = prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 1, } ); @@ -220,7 +217,6 @@ public void Execute_Throws_InvalidActionFieldException() { PreviousState = prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 1, } ); diff --git a/.Lib9c.Tests/Action/Buy10Test.cs b/.Lib9c.Tests/Action/Buy10Test.cs index 3a3f55041..81fcac1da 100644 --- a/.Lib9c.Tests/Action/Buy10Test.cs +++ b/.Lib9c.Tests/Action/Buy10Test.cs @@ -60,10 +60,10 @@ public Buy10Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -79,9 +79,9 @@ public Buy10Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -117,8 +117,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -128,8 +128,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -142,8 +142,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -153,8 +153,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -167,8 +167,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -178,8 +178,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -196,8 +196,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 50, @@ -207,8 +207,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex + 1, Price = 10, ItemCount = 60, @@ -332,7 +332,6 @@ public void Execute(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -701,7 +700,6 @@ public void Execute_ReconfigureFungibleItem(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -809,7 +807,6 @@ public void Execute_With_Testbed() BlockIndex = 100, PreviousState = nextState, RandomSeed = 0, - Rehearsal = false, Signer = result.GetAgentState().address, }); @@ -889,7 +886,7 @@ public void Execute_With_Testbed() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy11Test.cs b/.Lib9c.Tests/Action/Buy11Test.cs index 6a68862fb..1928b096a 100644 --- a/.Lib9c.Tests/Action/Buy11Test.cs +++ b/.Lib9c.Tests/Action/Buy11Test.cs @@ -62,10 +62,10 @@ public Buy11Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -81,9 +81,9 @@ public Buy11Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -111,7 +111,7 @@ public Buy11Test(ITestOutputHelper outputHelper) var arenaSheetAddress = Addresses.GetSheetAddress(); _arenaSheetState = _initialState.GetState(arenaSheetAddress); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); } public static IEnumerable GetExecuteMemberData() @@ -123,8 +123,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -134,8 +134,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -148,8 +148,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -159,8 +159,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -173,8 +173,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -184,8 +184,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -202,8 +202,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 50, @@ -213,8 +213,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex + 1, Price = 10, ItemCount = 60, @@ -338,7 +338,6 @@ public void Execute(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -707,7 +706,6 @@ public void Execute_ReconfigureFungibleItem(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -811,14 +809,13 @@ public void Execute_With_Testbed() }; var arenaSheetAddress = Addresses.GetSheetAddress(); - nextState = nextState.SetState(arenaSheetAddress, null); + nextState = nextState.SetNull(arenaSheetAddress); nextState = buyAction.Execute(new ActionContext() { BlockIndex = 100, PreviousState = nextState, RandomSeed = 0, - Rehearsal = false, Signer = result.GetAgentState().address, }); @@ -937,7 +934,6 @@ public void Execute_ActionObsoletedException() BlockIndex = 100, PreviousState = nextState, RandomSeed = 0, - Rehearsal = false, Signer = result.GetAgentState().address, }); }); @@ -947,7 +943,7 @@ public void Execute_ActionObsoletedException() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy2Test.cs b/.Lib9c.Tests/Action/Buy2Test.cs index 4efc95325..49c490895 100644 --- a/.Lib9c.Tests/Action/Buy2Test.cs +++ b/.Lib9c.Tests/Action/Buy2Test.cs @@ -51,10 +51,10 @@ public Buy2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -70,9 +70,9 @@ public Buy2Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -151,7 +151,6 @@ public void Execute() BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); diff --git a/.Lib9c.Tests/Action/Buy3Test.cs b/.Lib9c.Tests/Action/Buy3Test.cs index 499bb9457..e7b0af100 100644 --- a/.Lib9c.Tests/Action/Buy3Test.cs +++ b/.Lib9c.Tests/Action/Buy3Test.cs @@ -51,10 +51,10 @@ public Buy3Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -70,9 +70,9 @@ public Buy3Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -165,7 +165,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); diff --git a/.Lib9c.Tests/Action/Buy4Test.cs b/.Lib9c.Tests/Action/Buy4Test.cs index 6ad35d7fb..6c6d43cb2 100644 --- a/.Lib9c.Tests/Action/Buy4Test.cs +++ b/.Lib9c.Tests/Action/Buy4Test.cs @@ -53,10 +53,10 @@ public Buy4Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -72,9 +72,9 @@ public Buy4Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -184,7 +184,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); diff --git a/.Lib9c.Tests/Action/Buy5Test.cs b/.Lib9c.Tests/Action/Buy5Test.cs index 18e7413aa..b6046fb12 100644 --- a/.Lib9c.Tests/Action/Buy5Test.cs +++ b/.Lib9c.Tests/Action/Buy5Test.cs @@ -54,10 +54,10 @@ public Buy5Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -73,9 +73,9 @@ public Buy5Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -110,8 +110,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ContainsInInventory = true, @@ -120,8 +120,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ContainsInInventory = false, @@ -133,8 +133,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ContainsInInventory = false, @@ -143,8 +143,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ContainsInInventory = true, @@ -260,7 +260,6 @@ public void Execute(params ShopItemData[] shopItemMembers) BlockIndex = 1, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -597,7 +596,7 @@ public void Execute_ErrorCode_ShopItemExpired() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy6Test.cs b/.Lib9c.Tests/Action/Buy6Test.cs index 6d61fa710..50b8acfc0 100644 --- a/.Lib9c.Tests/Action/Buy6Test.cs +++ b/.Lib9c.Tests/Action/Buy6Test.cs @@ -55,10 +55,10 @@ public Buy6Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -74,9 +74,9 @@ public Buy6Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -112,8 +112,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ContainsInInventory = true, @@ -124,8 +124,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ContainsInInventory = false, @@ -139,8 +139,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ContainsInInventory = false, @@ -151,8 +151,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ContainsInInventory = true, @@ -166,8 +166,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, ItemId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ContainsInInventory = true, @@ -178,8 +178,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, ItemId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ContainsInInventory = true, @@ -320,7 +320,6 @@ out _ BlockIndex = 1, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -753,7 +752,7 @@ public void Execute_ErrorCode_ShopItemExpired() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy7Test.cs b/.Lib9c.Tests/Action/Buy7Test.cs index 7f77c8a1d..8d217b884 100644 --- a/.Lib9c.Tests/Action/Buy7Test.cs +++ b/.Lib9c.Tests/Action/Buy7Test.cs @@ -55,10 +55,10 @@ public Buy7Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -74,9 +74,9 @@ public Buy7Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -112,8 +112,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ContainsInInventory = true, @@ -124,8 +124,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ContainsInInventory = false, @@ -139,8 +139,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ContainsInInventory = false, @@ -151,8 +151,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ContainsInInventory = true, @@ -166,8 +166,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, ItemId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ContainsInInventory = true, @@ -178,8 +178,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, ItemId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), ProductId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ContainsInInventory = true, @@ -321,7 +321,6 @@ out _ BlockIndex = 1, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -885,7 +884,7 @@ public void Execute_ErrorCode_InvalidPrice(int shopPrice, int price) Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy8Test.cs b/.Lib9c.Tests/Action/Buy8Test.cs index f968b3815..adb939bca 100644 --- a/.Lib9c.Tests/Action/Buy8Test.cs +++ b/.Lib9c.Tests/Action/Buy8Test.cs @@ -57,10 +57,10 @@ public Buy8Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -76,9 +76,9 @@ public Buy8Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -114,8 +114,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -125,8 +125,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -139,8 +139,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -150,8 +150,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -164,8 +164,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -175,8 +175,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -306,7 +306,6 @@ out _ BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -554,7 +553,7 @@ public void Execute_ErrorCode(ErrorCodeMember errorCodeMember) Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/Buy9Test.cs b/.Lib9c.Tests/Action/Buy9Test.cs index b0da32038..529f8be3c 100644 --- a/.Lib9c.Tests/Action/Buy9Test.cs +++ b/.Lib9c.Tests/Action/Buy9Test.cs @@ -57,10 +57,10 @@ public Buy9Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -76,9 +76,9 @@ public Buy9Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -114,8 +114,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -126,8 +126,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -141,8 +141,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -153,8 +153,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -168,8 +168,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -180,8 +180,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -195,8 +195,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -207,8 +207,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -222,8 +222,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -234,8 +234,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -249,8 +249,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -261,8 +261,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -404,7 +404,6 @@ out _ BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -653,7 +652,7 @@ public void Execute_ErrorCode(ErrorCodeMember errorCodeMember) Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/BuyMultipleTest.cs b/.Lib9c.Tests/Action/BuyMultipleTest.cs index 50a56ce6d..ae0ae6040 100644 --- a/.Lib9c.Tests/Action/BuyMultipleTest.cs +++ b/.Lib9c.Tests/Action/BuyMultipleTest.cs @@ -52,10 +52,10 @@ public BuyMultipleTest(ITestOutputHelper outputHelper) _sellerAgentStateMap = new Dictionary(); - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -89,8 +89,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = true, Price = 10, @@ -100,8 +100,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = false, Price = 20, @@ -111,8 +111,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Buy = true, Price = 30, @@ -125,8 +125,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = false, Price = 10, @@ -136,8 +136,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = false, Price = 50, @@ -147,8 +147,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = false, Price = 30, @@ -161,8 +161,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Buy = true, Price = 20, @@ -172,8 +172,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Buy = true, Price = 50, @@ -183,8 +183,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Buy = true, Price = 30, @@ -197,8 +197,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = true, Price = 30, @@ -208,8 +208,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Costume, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = true, Price = 30, @@ -219,8 +219,8 @@ public static IEnumerable GetExecuteMemberData() { ItemType = ItemType.Equipment, ItemId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Buy = true, Price = 30, @@ -335,7 +335,6 @@ public void Execute(params ShopItemData[] productDatas) BlockIndex = 1, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -490,8 +489,8 @@ public void ExecuteInsufficientBalanceError() { var shopState = _initialState.GetShopState(); - var sellerAvatarAddress = new PrivateKey().ToAddress(); - var sellerAgentAddress = new PrivateKey().ToAddress(); + var sellerAvatarAddress = new PrivateKey().Address; + var sellerAgentAddress = new PrivateKey().Address; var (avatarState, agentState) = CreateAvatarState(sellerAgentAddress, sellerAvatarAddress); var equipment = ItemFactory.CreateItemUsable( @@ -556,8 +555,8 @@ public void ExecuteInsufficientBalanceError() [Fact] public void ExecuteThrowShopItemExpiredError() { - var sellerAvatarAddress = new PrivateKey().ToAddress(); - var sellerAgentAddress = new PrivateKey().ToAddress(); + var sellerAvatarAddress = new PrivateKey().Address; + var sellerAgentAddress = new PrivateKey().Address; var (avatarState, agentState) = CreateAvatarState(sellerAgentAddress, sellerAvatarAddress); IAccount previousStates = _initialState; @@ -611,7 +610,7 @@ public void ExecuteThrowShopItemExpiredError() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/BuyProduct0Test.cs b/.Lib9c.Tests/Action/BuyProduct0Test.cs index 34332a3a8..c752c0b80 100644 --- a/.Lib9c.Tests/Action/BuyProduct0Test.cs +++ b/.Lib9c.Tests/Action/BuyProduct0Test.cs @@ -59,7 +59,7 @@ public BuyProduct0Test(ITestOutputHelper outputHelper) _goldCurrencyState = new GoldCurrencyState(Gold); var sellerAgentState = new AgentState(SellerAgentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( SellerAvatarAddress, SellerAgentAddress, @@ -75,9 +75,9 @@ public BuyProduct0Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = SellerAvatarAddress; - _sellerAgentAddress2 = new PrivateKey().ToAddress(); + _sellerAgentAddress2 = new PrivateKey().Address; var agentState2 = new AgentState(_sellerAgentAddress2); - _sellerAvatarAddress2 = new PrivateKey().ToAddress(); + _sellerAvatarAddress2 = new PrivateKey().Address; var sellerAvatarState2 = new AvatarState( _sellerAvatarAddress2, _sellerAgentAddress2, diff --git a/.Lib9c.Tests/Action/BuyProduct2Test.cs b/.Lib9c.Tests/Action/BuyProduct2Test.cs index 55475d8d9..c2f5d9797 100644 --- a/.Lib9c.Tests/Action/BuyProduct2Test.cs +++ b/.Lib9c.Tests/Action/BuyProduct2Test.cs @@ -59,7 +59,7 @@ public BuyProduct2Test(ITestOutputHelper outputHelper) _goldCurrencyState = new GoldCurrencyState(Gold); var sellerAgentState = new AgentState(SellerAgentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( SellerAvatarAddress, SellerAgentAddress, @@ -75,9 +75,9 @@ public BuyProduct2Test(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = SellerAvatarAddress; - _sellerAgentAddress2 = new PrivateKey().ToAddress(); + _sellerAgentAddress2 = new PrivateKey().Address; var agentState2 = new AgentState(_sellerAgentAddress2); - _sellerAvatarAddress2 = new PrivateKey().ToAddress(); + _sellerAvatarAddress2 = new PrivateKey().Address; var sellerAvatarState2 = new AvatarState( _sellerAvatarAddress2, _sellerAgentAddress2, diff --git a/.Lib9c.Tests/Action/BuyTest.cs b/.Lib9c.Tests/Action/BuyTest.cs index dd26c09de..f27855100 100644 --- a/.Lib9c.Tests/Action/BuyTest.cs +++ b/.Lib9c.Tests/Action/BuyTest.cs @@ -60,10 +60,10 @@ public BuyTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var sellerAgentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var sellerAvatarState = new AvatarState( _sellerAvatarAddress, _sellerAgentAddress, @@ -79,9 +79,9 @@ public BuyTest(ITestOutputHelper outputHelper) }; sellerAgentState.avatarAddresses[0] = _sellerAvatarAddress; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var buyerAgentState = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; _buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, @@ -117,8 +117,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 10, ItemCount = 1, @@ -128,8 +128,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 20, ItemCount = 1, @@ -142,8 +142,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Costume, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 1, @@ -153,8 +153,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Equipment, TradableId = Guid.NewGuid(), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -167,8 +167,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 1, @@ -178,8 +178,8 @@ public static IEnumerable GetExecuteMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = 0, Price = 10, ItemCount = 2, @@ -196,8 +196,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex, Price = 50, ItemCount = 50, @@ -207,8 +207,8 @@ public static IEnumerable GetReconfigureFungibleItemMemberData() ItemType = ItemType.Material, TradableId = new Guid("15396359-04db-68d5-f24a-d89c18665900"), OrderId = Guid.NewGuid(), - SellerAgentAddress = new PrivateKey().ToAddress(), - SellerAvatarAddress = new PrivateKey().ToAddress(), + SellerAgentAddress = new PrivateKey().Address, + SellerAvatarAddress = new PrivateKey().Address, RequiredBlockIndex = Sell6.ExpiredBlockIndex + 1, Price = 10, ItemCount = 60, @@ -347,7 +347,6 @@ public void Execute(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -361,7 +360,6 @@ public void Execute(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -776,7 +774,6 @@ public void Execute_ReconfigureFungibleItem(params OrderData[] orderDataList) BlockIndex = 100, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _buyerAgentAddress, }); @@ -884,7 +881,6 @@ public void Execute_With_Testbed() BlockIndex = 100, PreviousState = nextState, RandomSeed = 0, - Rehearsal = false, Signer = result.GetAgentState().address, }); @@ -967,7 +963,7 @@ public void Execute_With_Testbed() Address agentAddress, Address avatarAddress) { var agentState = new AgentState(agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, diff --git a/.Lib9c.Tests/Action/CancelMonsterCollectTest.cs b/.Lib9c.Tests/Action/CancelMonsterCollectTest.cs index 57a557c04..8c7a32dca 100644 --- a/.Lib9c.Tests/Action/CancelMonsterCollectTest.cs +++ b/.Lib9c.Tests/Action/CancelMonsterCollectTest.cs @@ -107,7 +107,7 @@ public void Execute_Throw_FailedLoadStateException_AgentState() Assert.Throws(() => action.Execute(new ActionContext { PreviousState = _state, - Signer = new PrivateKey().ToAddress(), + Signer = new PrivateKey().Address, BlockIndex = 0, }) ); diff --git a/.Lib9c.Tests/Action/CancelProductRegistration0Test.cs b/.Lib9c.Tests/Action/CancelProductRegistration0Test.cs index 082c1513b..72a8b82d5 100644 --- a/.Lib9c.Tests/Action/CancelProductRegistration0Test.cs +++ b/.Lib9c.Tests/Action/CancelProductRegistration0Test.cs @@ -49,11 +49,11 @@ public CancelProductRegistration0Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -101,10 +101,10 @@ bool invalidAgentAddress new ItemProductInfo { AvatarAddress = invalidAvatarAddress - ? new PrivateKey().ToAddress() + ? new PrivateKey().Address : _avatarAddress, AgentAddress = invalidAgentAddress - ? new PrivateKey().ToAddress() + ? new PrivateKey().Address : _agentAddress, Legacy = false, Price = 1 * _goldCurrencyState.Currency, diff --git a/.Lib9c.Tests/Action/ChargeActionPoint0Test.cs b/.Lib9c.Tests/Action/ChargeActionPoint0Test.cs index 48cd7890f..127d0bac4 100644 --- a/.Lib9c.Tests/Action/ChargeActionPoint0Test.cs +++ b/.Lib9c.Tests/Action/ChargeActionPoint0Test.cs @@ -27,7 +27,7 @@ public ChargeActionPoint0Test() public void Execute() { var privateKey = new PrivateKey(); - var agentAddress = privateKey.PublicKey.ToAddress(); + var agentAddress = privateKey.PublicKey.Address; var agent = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -73,7 +73,6 @@ public void Execute() PreviousState = state, Signer = agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(avatarAddress); diff --git a/.Lib9c.Tests/Action/ChargeActionPoint2Test.cs b/.Lib9c.Tests/Action/ChargeActionPoint2Test.cs index 2b38a1560..1e5c70a71 100644 --- a/.Lib9c.Tests/Action/ChargeActionPoint2Test.cs +++ b/.Lib9c.Tests/Action/ChargeActionPoint2Test.cs @@ -25,7 +25,7 @@ public ChargeActionPoint2Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agent = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -91,7 +91,6 @@ public void Execute(bool useTradable) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -146,7 +145,6 @@ public void Execute_Throw_NotEnoughMaterialException(bool useTradable) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); } diff --git a/.Lib9c.Tests/Action/ChargeActionPointTest.cs b/.Lib9c.Tests/Action/ChargeActionPointTest.cs index c02d549f7..958db11d1 100644 --- a/.Lib9c.Tests/Action/ChargeActionPointTest.cs +++ b/.Lib9c.Tests/Action/ChargeActionPointTest.cs @@ -28,7 +28,7 @@ public ChargeActionPointTest() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agent = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -108,7 +108,6 @@ public void Execute(bool useTradable, bool backward) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -164,7 +163,6 @@ public void Execute_Throw_Exception(bool useAvatarAddress, bool useTradable, boo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); } diff --git a/.Lib9c.Tests/Action/ClaimItemsTest.cs b/.Lib9c.Tests/Action/ClaimItemsTest.cs index 73ce1c4c2..4c9735ba3 100644 --- a/.Lib9c.Tests/Action/ClaimItemsTest.cs +++ b/.Lib9c.Tests/Action/ClaimItemsTest.cs @@ -58,7 +58,7 @@ public ClaimItemsTest(ITestOutputHelper outputHelper) } } - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; var context = new ActionContext(); _initialState = _initialState @@ -306,7 +306,7 @@ public void Execute_WithIncorrectClaimData() var fungibleAssetValues = _itemCurrencies.Select(currency => currency * 1).ToList(); var action = new ClaimItems(Enumerable.Repeat(0, 101) - .Select(_ => (new PrivateKey().ToAddress(), + .Select(_ => (new PrivateKey().Address, (IReadOnlyList)fungibleAssetValues)) .ToImmutableList()); @@ -322,10 +322,10 @@ public void Execute_WithIncorrectClaimData() private IAccount GenerateAvatar(IAccount state, out Address avatarAddress, out Address agentAddress) { - agentAddress = new PrivateKey().ToAddress(); + agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); avatarAddress = agentAddress.Derive("avatar"); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, agentAddress, diff --git a/.Lib9c.Tests/Action/ClaimMonsterCollectionReward0Test.cs b/.Lib9c.Tests/Action/ClaimMonsterCollectionReward0Test.cs index 24d5fe07e..606074798 100644 --- a/.Lib9c.Tests/Action/ClaimMonsterCollectionReward0Test.cs +++ b/.Lib9c.Tests/Action/ClaimMonsterCollectionReward0Test.cs @@ -27,7 +27,7 @@ public ClaimMonsterCollectionReward0Test() _state = new Account(MockState.Empty); Dictionary sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, @@ -195,7 +195,7 @@ public void Execute_Throw_FailedLoadStateException_AgentState() Assert.Throws(() => action.Execute(new ActionContext { PreviousState = _state, - Signer = new PrivateKey().ToAddress(), + Signer = new PrivateKey().Address, BlockIndex = 0, }) ); diff --git a/.Lib9c.Tests/Action/ClaimMonsterCollectionReward2Test.cs b/.Lib9c.Tests/Action/ClaimMonsterCollectionReward2Test.cs index 84de887a5..5f516665c 100644 --- a/.Lib9c.Tests/Action/ClaimMonsterCollectionReward2Test.cs +++ b/.Lib9c.Tests/Action/ClaimMonsterCollectionReward2Test.cs @@ -38,7 +38,7 @@ public ClaimMonsterCollectionReward2Test(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); Dictionary sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, @@ -156,7 +156,7 @@ public void Execute_Throw_FailedLoadStateException_AgentState() Assert.Throws(() => action.Execute(new ActionContext { PreviousState = _state, - Signer = new PrivateKey().ToAddress(), + Signer = new PrivateKey().Address, BlockIndex = 0, }) ); diff --git a/.Lib9c.Tests/Action/ClaimMonsterCollectionRewardTest.cs b/.Lib9c.Tests/Action/ClaimMonsterCollectionRewardTest.cs index 69a0eee01..91a4bb9e1 100644 --- a/.Lib9c.Tests/Action/ClaimMonsterCollectionRewardTest.cs +++ b/.Lib9c.Tests/Action/ClaimMonsterCollectionRewardTest.cs @@ -38,7 +38,7 @@ public ClaimMonsterCollectionRewardTest(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); Dictionary sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, @@ -148,7 +148,7 @@ public void Execute_Throw_FailedLoadStateException_AgentState() Assert.Throws(() => _action.Execute(new ActionContext { PreviousState = _state, - Signer = new PrivateKey().ToAddress(), + Signer = new PrivateKey().Address, BlockIndex = 0, }) ); diff --git a/.Lib9c.Tests/Action/ClaimRaidRewardTest.cs b/.Lib9c.Tests/Action/ClaimRaidRewardTest.cs index 08991622b..9524901d1 100644 --- a/.Lib9c.Tests/Action/ClaimRaidRewardTest.cs +++ b/.Lib9c.Tests/Action/ClaimRaidRewardTest.cs @@ -42,7 +42,7 @@ public ClaimRaidRewardTest() public void Execute(Type exc, int rank, int latestRank) { Address agentAddress = default; - Address avatarAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; var bossRow = _tableSheets.WorldBossListSheet.OrderedList.First(); var raiderAddress = Addresses.GetRaiderAddress(avatarAddress, bossRow.Id); var highScore = 0; diff --git a/.Lib9c.Tests/Action/ClaimStakeReward1Test.cs b/.Lib9c.Tests/Action/ClaimStakeReward1Test.cs index 2500c1eeb..67e40ac78 100644 --- a/.Lib9c.Tests/Action/ClaimStakeReward1Test.cs +++ b/.Lib9c.Tests/Action/ClaimStakeReward1Test.cs @@ -49,10 +49,10 @@ public ClaimStakeReward1Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(_currency); - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; var stakeStateAddress = StakeState.DeriveAddress(_signerAddress); var agentState = new AgentState(_signerAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var rankingMapAddress = _avatarAddress.Derive("ranking_map"); agentState.avatarAddresses.Add(0, _avatarAddress); var avatarState = new AvatarState( diff --git a/.Lib9c.Tests/Action/ClaimStakeReward2Test.cs b/.Lib9c.Tests/Action/ClaimStakeReward2Test.cs index 8c128aa0f..3801ccf9c 100644 --- a/.Lib9c.Tests/Action/ClaimStakeReward2Test.cs +++ b/.Lib9c.Tests/Action/ClaimStakeReward2Test.cs @@ -50,7 +50,7 @@ public ClaimStakeReward2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(_currency); - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; var stakeStateAddress = StakeState.DeriveAddress(_signerAddress); var agentState = new AgentState(_signerAddress); _avatarAddress = _signerAddress.Derive("0"); @@ -61,7 +61,7 @@ public ClaimStakeReward2Test(ITestOutputHelper outputHelper) 0, _tableSheets.GetAvatarSheets(), new GameConfigState(sheets[nameof(GameConfigSheet)]), - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -75,7 +75,7 @@ public ClaimStakeReward2Test(ITestOutputHelper outputHelper) 0, _tableSheets.GetAvatarSheets(), new GameConfigState(sheets[nameof(GameConfigSheet)]), - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, diff --git a/.Lib9c.Tests/Action/ClaimWorldBossKillRewardTest.cs b/.Lib9c.Tests/Action/ClaimWorldBossKillRewardTest.cs index 2ff1ad2c1..0bf117534 100644 --- a/.Lib9c.Tests/Action/ClaimWorldBossKillRewardTest.cs +++ b/.Lib9c.Tests/Action/ClaimWorldBossKillRewardTest.cs @@ -24,8 +24,8 @@ public void Execute(long blockIndex, Type exc) { var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - Address agentAddress = new PrivateKey().ToAddress(); - Address avatarAddress = new PrivateKey().ToAddress(); + Address agentAddress = new PrivateKey().Address; + Address avatarAddress = new PrivateKey().Address; IAccount state = new Account(MockState.Empty); var runeWeightSheet = new RuneWeightSheet(); diff --git a/.Lib9c.Tests/Action/CombinationConsumable8Test.cs b/.Lib9c.Tests/Action/CombinationConsumable8Test.cs index 286a481c4..90fc3bb85 100644 --- a/.Lib9c.Tests/Action/CombinationConsumable8Test.cs +++ b/.Lib9c.Tests/Action/CombinationConsumable8Test.cs @@ -25,7 +25,7 @@ public class CombinationConsumable8Test public CombinationConsumable8Test() { - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment10Test.cs b/.Lib9c.Tests/Action/CombinationEquipment10Test.cs index b354f207b..f5be8578f 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment10Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment10Test.cs @@ -38,7 +38,7 @@ public CombinationEquipment10Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment11Test.cs b/.Lib9c.Tests/Action/CombinationEquipment11Test.cs index ce86353ac..d2e9bf83b 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment11Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment11Test.cs @@ -40,7 +40,7 @@ public CombinationEquipment11Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var slotAddress = _avatarAddress.Derive( string.Format( @@ -92,7 +92,7 @@ public CombinationEquipment11Test(ITestOutputHelper outputHelper) var arenaSheetAddress = Addresses.GetSheetAddress(); _arenaSheetState = _initialState.GetState(arenaSheetAddress); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); } [Theory] diff --git a/.Lib9c.Tests/Action/CombinationEquipment12Test.cs b/.Lib9c.Tests/Action/CombinationEquipment12Test.cs index 968fe2ca3..5b9b03be8 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment12Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment12Test.cs @@ -47,7 +47,7 @@ public CombinationEquipment12Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); _slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment13Test.cs b/.Lib9c.Tests/Action/CombinationEquipment13Test.cs index ff13d235f..0628f4936 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment13Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment13Test.cs @@ -43,7 +43,7 @@ public CombinationEquipment13Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); _slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment14Test.cs b/.Lib9c.Tests/Action/CombinationEquipment14Test.cs index d95edb943..5f79e0250 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment14Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment14Test.cs @@ -43,7 +43,7 @@ public CombinationEquipment14Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); _slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment15Test.cs b/.Lib9c.Tests/Action/CombinationEquipment15Test.cs index 3430dbdd0..14fc8006f 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment15Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment15Test.cs @@ -43,7 +43,7 @@ public CombinationEquipment15Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); _slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment16Test.cs b/.Lib9c.Tests/Action/CombinationEquipment16Test.cs index 4709345ad..4294bf540 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment16Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment16Test.cs @@ -41,7 +41,7 @@ public CombinationEquipment16Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); _slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment8Test.cs b/.Lib9c.Tests/Action/CombinationEquipment8Test.cs index 5479610e2..8ec4c12b7 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment8Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment8Test.cs @@ -37,7 +37,7 @@ public CombinationEquipment8Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/CombinationEquipment9Test.cs b/.Lib9c.Tests/Action/CombinationEquipment9Test.cs index 3f4c19220..b9a91b50e 100644 --- a/.Lib9c.Tests/Action/CombinationEquipment9Test.cs +++ b/.Lib9c.Tests/Action/CombinationEquipment9Test.cs @@ -37,7 +37,7 @@ public CombinationEquipment9Test(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var slotAddress = _avatarAddress.Derive( string.Format( diff --git a/.Lib9c.Tests/Action/Coupons/IssueCouponsTest.cs b/.Lib9c.Tests/Action/Coupons/IssueCouponsTest.cs index 4a2f2a506..712254c8f 100644 --- a/.Lib9c.Tests/Action/Coupons/IssueCouponsTest.cs +++ b/.Lib9c.Tests/Action/Coupons/IssueCouponsTest.cs @@ -33,7 +33,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, RandomSeed = random.Seed, BlockIndex = long.MaxValue, Signer = CouponsFixture.AgentAddress1, @@ -47,7 +46,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, RandomSeed = random.Seed, BlockIndex = 0, Signer = CouponsFixture.AgentAddress2, @@ -62,7 +60,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, RandomSeed = random.Seed, BlockIndex = 0, Signer = CouponsFixture.AgentAddress1, @@ -78,7 +75,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, RandomSeed = random.Seed, BlockIndex = 0, Signer = CouponsFixture.AgentAddress1, @@ -92,7 +88,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, RandomSeed = random.Seed, BlockIndex = 0, Signer = CouponsFixture.AgentAddress1, diff --git a/.Lib9c.Tests/Action/Coupons/RedeemCouponTest.cs b/.Lib9c.Tests/Action/Coupons/RedeemCouponTest.cs index 812a17485..dc7d2bd10 100644 --- a/.Lib9c.Tests/Action/Coupons/RedeemCouponTest.cs +++ b/.Lib9c.Tests/Action/Coupons/RedeemCouponTest.cs @@ -117,7 +117,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, })); @@ -148,7 +147,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -164,7 +162,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -183,7 +180,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -203,7 +199,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -221,7 +216,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -243,7 +237,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -260,7 +253,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); @@ -280,7 +272,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress2, RandomSeed = random.Seed, }); @@ -302,7 +293,6 @@ public void Execute() new ActionContext { PreviousState = state, - Rehearsal = false, Signer = CouponsFixture.AgentAddress1, RandomSeed = random.Seed, }); diff --git a/.Lib9c.Tests/Action/Coupons/TransferCouponsTest.cs b/.Lib9c.Tests/Action/Coupons/TransferCouponsTest.cs index 741ce778a..19671779c 100644 --- a/.Lib9c.Tests/Action/Coupons/TransferCouponsTest.cs +++ b/.Lib9c.Tests/Action/Coupons/TransferCouponsTest.cs @@ -42,7 +42,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, })); // can't transfer coupon that's not mine @@ -55,7 +54,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress2, - Rehearsal = false, })); // can't transfer a coupon to two different people @@ -70,7 +68,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, })); // transfer to self @@ -84,7 +81,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, }); Assert.Equal(expected, state.GetCouponWallet(CouponsFixture.AgentAddress1)); @@ -97,7 +93,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, }); Assert.Equal(expected, state.GetCouponWallet(CouponsFixture.AgentAddress1)); @@ -112,7 +107,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, }); Assert.Equal( expected.Remove(CouponsFixture.Guid1), @@ -132,7 +126,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, })); // multiple transfer @@ -162,7 +155,6 @@ public void Execute() { PreviousState = state, Signer = CouponsFixture.AgentAddress1, - Rehearsal = false, }); Assert.Equal( ImmutableDictionary.Empty, diff --git a/.Lib9c.Tests/Action/CreateAvatar10Test.cs b/.Lib9c.Tests/Action/CreateAvatar10Test.cs index 2ee2d5cb5..71a257306 100644 --- a/.Lib9c.Tests/Action/CreateAvatar10Test.cs +++ b/.Lib9c.Tests/Action/CreateAvatar10Test.cs @@ -291,8 +291,8 @@ public void MintAsset() CRYSTAL,200000,Agent RUNE_GOLDENLEAF,200000,Avatar "); - var avatarAddress = new PrivateKey().ToAddress(); - var agentAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; + var agentAddress = new PrivateKey().Address; var avatarState = new AvatarState(avatarAddress, agentAddress, 0L, _tableSheets.GetAvatarSheets(), new GameConfigState(), default, "test"); var nextState = CreateAvatar10.MintAsset(createAvatarFavSheet, avatarState, new Account(MockState.Empty), new ActionContext()); foreach (var row in createAvatarFavSheet.Values) diff --git a/.Lib9c.Tests/Action/CreatePledgeTest.cs b/.Lib9c.Tests/Action/CreatePledgeTest.cs index c52806ad6..15ba2f4da 100644 --- a/.Lib9c.Tests/Action/CreatePledgeTest.cs +++ b/.Lib9c.Tests/Action/CreatePledgeTest.cs @@ -26,12 +26,12 @@ public CreatePledgeTest(ITestOutputHelper outputHelper) [InlineData(false, typeof(PermissionDeniedException))] public void Execute(bool admin, Type exc) { - var adminAddress = new PrivateKey().ToAddress(); - var poolAddress = new PrivateKey().ToAddress(); + var adminAddress = new PrivateKey().Address; + var poolAddress = new PrivateKey().Address; var adminState = new AdminState(adminAddress, 150L); - var patronAddress = new PrivateKey().ToAddress(); + var patronAddress = new PrivateKey().Address; var mead = Currencies.Mead; - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var pledgeAddress = agentAddress.GetPledgeAddress(); var context = new ActionContext(); IAccount states = new Account(MockState.Empty) @@ -44,7 +44,7 @@ public void Execute(bool admin, Type exc) }; for (int i = 0; i < 499; i++) { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; agentAddresses.Add((address, address.GetPledgeAddress())); } diff --git a/.Lib9c.Tests/Action/DailyReward0Test.cs b/.Lib9c.Tests/Action/DailyReward0Test.cs index 8ee7adf08..cccc7bd89 100644 --- a/.Lib9c.Tests/Action/DailyReward0Test.cs +++ b/.Lib9c.Tests/Action/DailyReward0Test.cs @@ -32,10 +32,10 @@ public DailyReward0Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -65,7 +65,6 @@ public void Execute() { BlockIndex = 0, PreviousState = _initialState, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/DailyReward2Test.cs b/.Lib9c.Tests/Action/DailyReward2Test.cs index aae8b3cca..ef2c3bfb5 100644 --- a/.Lib9c.Tests/Action/DailyReward2Test.cs +++ b/.Lib9c.Tests/Action/DailyReward2Test.cs @@ -34,10 +34,10 @@ public DailyReward2Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -68,7 +68,6 @@ public void Execute() BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/DailyReward3Test.cs b/.Lib9c.Tests/Action/DailyReward3Test.cs index 0a299a259..5115938b3 100644 --- a/.Lib9c.Tests/Action/DailyReward3Test.cs +++ b/.Lib9c.Tests/Action/DailyReward3Test.cs @@ -34,10 +34,10 @@ public DailyReward3Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -68,7 +68,6 @@ public void Execute() BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/DailyReward4Test.cs b/.Lib9c.Tests/Action/DailyReward4Test.cs index 4fa13eb6e..00bb29a13 100644 --- a/.Lib9c.Tests/Action/DailyReward4Test.cs +++ b/.Lib9c.Tests/Action/DailyReward4Test.cs @@ -37,10 +37,10 @@ public DailyReward4Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -83,7 +83,6 @@ public void Execute(bool backward) BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/DailyReward5Test.cs b/.Lib9c.Tests/Action/DailyReward5Test.cs index 6aed7de03..f4f722cef 100644 --- a/.Lib9c.Tests/Action/DailyReward5Test.cs +++ b/.Lib9c.Tests/Action/DailyReward5Test.cs @@ -36,10 +36,10 @@ public DailyReward5Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); var gameConfigState = new GameConfigState(); gameConfigState.Set(tableSheets.GameConfigSheet); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -139,7 +139,6 @@ private IAccount ExecuteInternal(IAccount previousStates, long blockIndex = 0) BlockIndex = blockIndex, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); } diff --git a/.Lib9c.Tests/Action/DailyReward6Test.cs b/.Lib9c.Tests/Action/DailyReward6Test.cs index 66f986a56..51a7db56c 100644 --- a/.Lib9c.Tests/Action/DailyReward6Test.cs +++ b/.Lib9c.Tests/Action/DailyReward6Test.cs @@ -38,10 +38,10 @@ public DailyReward6Test(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); var gameConfigState = new GameConfigState(); gameConfigState.Set(tableSheets.GameConfigSheet); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -164,7 +164,6 @@ private IAccount ExecuteInternal(IAccount previousStates, long blockIndex = 0) BlockIndex = blockIndex, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); } diff --git a/.Lib9c.Tests/Action/DailyRewardTest.cs b/.Lib9c.Tests/Action/DailyRewardTest.cs index ab1c275c2..3ce633b61 100644 --- a/.Lib9c.Tests/Action/DailyRewardTest.cs +++ b/.Lib9c.Tests/Action/DailyRewardTest.cs @@ -36,10 +36,10 @@ public DailyRewardTest(ITestOutputHelper outputHelper) var tableSheets = new TableSheets(sheets); var gameConfigState = new GameConfigState(); gameConfigState.Set(tableSheets.GameConfigSheet); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -163,7 +163,6 @@ private IAccount ExecuteInternal(IAccount previousStates, long blockIndex = 0) BlockIndex = blockIndex, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); } diff --git a/.Lib9c.Tests/Action/EndPledgeTest.cs b/.Lib9c.Tests/Action/EndPledgeTest.cs index 0ed6aab81..50d3f8acb 100644 --- a/.Lib9c.Tests/Action/EndPledgeTest.cs +++ b/.Lib9c.Tests/Action/EndPledgeTest.cs @@ -16,8 +16,8 @@ public class EndPledgeTest [InlineData(4)] public void Execute(int balance) { - var patron = new PrivateKey().ToAddress(); - var agent = new PrivateKey().ToAddress(); + var patron = new PrivateKey().Address; + var agent = new PrivateKey().Address; var context = new ActionContext(); IAccount states = new Account(MockState.Empty) .SetState(agent.GetPledgeAddress(), List.Empty.Add(patron.Serialize()).Add(true.Serialize())); @@ -49,19 +49,19 @@ public void Execute(int balance) [InlineData(false, true, typeof(FailedLoadStateException))] public void Execute_Throw_Exception(bool invalidSigner, bool invalidAgent, Type exc) { - Address patron = new PrivateKey().ToAddress(); - Address agent = new PrivateKey().ToAddress(); + Address patron = new PrivateKey().Address; + Address agent = new PrivateKey().Address; List contract = List.Empty.Add(patron.Serialize()).Add(true.Serialize()); IAccount states = new Account(MockState.Empty).SetState(agent.GetPledgeAddress(), contract); var action = new EndPledge { - AgentAddress = invalidAgent ? new PrivateKey().ToAddress() : agent, + AgentAddress = invalidAgent ? new PrivateKey().Address : agent, }; Assert.Throws(exc, () => action.Execute(new ActionContext { - Signer = invalidSigner ? new PrivateKey().ToAddress() : patron, + Signer = invalidSigner ? new PrivateKey().Address : patron, PreviousState = states, })); } diff --git a/.Lib9c.Tests/Action/EventConsumableItemCrafts0Test.cs b/.Lib9c.Tests/Action/EventConsumableItemCrafts0Test.cs index f3dfd1c6a..0f27d66be 100644 --- a/.Lib9c.Tests/Action/EventConsumableItemCrafts0Test.cs +++ b/.Lib9c.Tests/Action/EventConsumableItemCrafts0Test.cs @@ -34,7 +34,7 @@ public EventConsumableItemCrafts0Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -50,7 +50,7 @@ public EventConsumableItemCrafts0Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -156,7 +156,6 @@ private void Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventDungeonBattleV1Test.cs b/.Lib9c.Tests/Action/EventDungeonBattleV1Test.cs index 4c1204ece..460ae7379 100644 --- a/.Lib9c.Tests/Action/EventDungeonBattleV1Test.cs +++ b/.Lib9c.Tests/Action/EventDungeonBattleV1Test.cs @@ -47,7 +47,7 @@ public EventDungeonBattleV1Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -63,7 +63,7 @@ public EventDungeonBattleV1Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -418,7 +418,6 @@ private IAccount Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventDungeonBattleV2Test.cs b/.Lib9c.Tests/Action/EventDungeonBattleV2Test.cs index 685463ec8..93b71a388 100644 --- a/.Lib9c.Tests/Action/EventDungeonBattleV2Test.cs +++ b/.Lib9c.Tests/Action/EventDungeonBattleV2Test.cs @@ -48,7 +48,7 @@ public EventDungeonBattleV2Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -64,7 +64,7 @@ public EventDungeonBattleV2Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -432,7 +432,6 @@ private IAccount Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventDungeonBattleV3Test.cs b/.Lib9c.Tests/Action/EventDungeonBattleV3Test.cs index 80969c7e0..afb60ec55 100644 --- a/.Lib9c.Tests/Action/EventDungeonBattleV3Test.cs +++ b/.Lib9c.Tests/Action/EventDungeonBattleV3Test.cs @@ -47,7 +47,7 @@ public EventDungeonBattleV3Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -63,7 +63,7 @@ public EventDungeonBattleV3Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -431,7 +431,6 @@ private IAccount Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventDungeonBattleV4Test.cs b/.Lib9c.Tests/Action/EventDungeonBattleV4Test.cs index d19a70198..0da57c317 100644 --- a/.Lib9c.Tests/Action/EventDungeonBattleV4Test.cs +++ b/.Lib9c.Tests/Action/EventDungeonBattleV4Test.cs @@ -48,7 +48,7 @@ public EventDungeonBattleV4Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -64,7 +64,7 @@ public EventDungeonBattleV4Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -479,7 +479,6 @@ private IAccount Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventDungeonBattleV5Test.cs b/.Lib9c.Tests/Action/EventDungeonBattleV5Test.cs index 9db984f2c..07197699a 100644 --- a/.Lib9c.Tests/Action/EventDungeonBattleV5Test.cs +++ b/.Lib9c.Tests/Action/EventDungeonBattleV5Test.cs @@ -49,7 +49,7 @@ public EventDungeonBattleV5Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddr = _avatarAddress.Derive(LegacyWorldInformationKey); @@ -65,7 +65,7 @@ public EventDungeonBattleV5Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -480,7 +480,6 @@ private IAccount Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/EventMaterialItemCrafts0Test.cs b/.Lib9c.Tests/Action/EventMaterialItemCrafts0Test.cs index 3dbd1a3c7..ac7ee047a 100644 --- a/.Lib9c.Tests/Action/EventMaterialItemCrafts0Test.cs +++ b/.Lib9c.Tests/Action/EventMaterialItemCrafts0Test.cs @@ -36,7 +36,7 @@ public EventMaterialItemCrafts0Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var inventoryAddr = _avatarAddress.Derive(LegacyInventoryKey); @@ -53,7 +53,7 @@ public EventMaterialItemCrafts0Test() 0, _tableSheets.GetAvatarSheets(), gameConfigState, - new PrivateKey().ToAddress() + new PrivateKey().Address ) { level = 100, @@ -250,7 +250,6 @@ private void Execute( PreviousState = previousStates, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = blockIndex, }); diff --git a/.Lib9c.Tests/Action/Factory/ClaimStakeRewardFactoryTest.cs b/.Lib9c.Tests/Action/Factory/ClaimStakeRewardFactoryTest.cs index 4c13b49f4..6b2385682 100644 --- a/.Lib9c.Tests/Action/Factory/ClaimStakeRewardFactoryTest.cs +++ b/.Lib9c.Tests/Action/Factory/ClaimStakeRewardFactoryTest.cs @@ -60,7 +60,7 @@ public void Create_ByBlockIndex_Success( long blockIndex, Type type) { - var addr = new PrivateKey().ToAddress(); + var addr = new PrivateKey().Address; var action = ClaimStakeRewardFactory.CreateByBlockIndex(blockIndex, addr); Assert.Equal(type, action.GetType()); } @@ -69,7 +69,7 @@ public void Create_ByBlockIndex_Success( [MemberData(nameof(GetAllClaimStakeRewardV1))] public void Create_ByVersion_Success(string expectActionType, int version) { - var addr = new PrivateKey().ToAddress(); + var addr = new PrivateKey().Address; var action = ClaimStakeRewardFactory.CreateByVersion(version, addr); var actualActionType = action .GetType() diff --git a/.Lib9c.Tests/Action/Garages/BulkUnloadFromGaragesTest.cs b/.Lib9c.Tests/Action/Garages/BulkUnloadFromGaragesTest.cs index c74da7e7e..fbdc3d3e3 100644 --- a/.Lib9c.Tests/Action/Garages/BulkUnloadFromGaragesTest.cs +++ b/.Lib9c.Tests/Action/Garages/BulkUnloadFromGaragesTest.cs @@ -23,7 +23,7 @@ public class BulkUnloadFromGaragesTest { private const int AvatarIndex = 0; - private static readonly Address AgentAddress = new PrivateKey().ToAddress(); + private static readonly Address AgentAddress = new PrivateKey().Address; private static readonly Address AvatarAddress = Addresses.GetAvatarAddress(AgentAddress, AvatarIndex); @@ -118,7 +118,6 @@ public void Execute_Success() { Signer = AgentAddress, BlockIndex = blockIndex, - Rehearsal = false, PreviousState = states, RandomSeed = new TestRandom().Seed, }); diff --git a/.Lib9c.Tests/Action/Garages/DeliverToOthersGaragesTest.cs b/.Lib9c.Tests/Action/Garages/DeliverToOthersGaragesTest.cs index fcc560bd4..3696f0900 100644 --- a/.Lib9c.Tests/Action/Garages/DeliverToOthersGaragesTest.cs +++ b/.Lib9c.Tests/Action/Garages/DeliverToOthersGaragesTest.cs @@ -59,7 +59,7 @@ public DeliverToOthersGaragesTest() public static IEnumerable Get_Sample_PlainValue() { - var recipientAddr = new PrivateKey().ToAddress(); + var recipientAddr = new PrivateKey().Address; var fungibleAssetValues = GetFungibleAssetValues(); var hex = string.Join( string.Empty, @@ -336,7 +336,6 @@ private static (DeliverToOthersGarages action, IAccount nextStates) Execute( { Signer = signer, BlockIndex = blockIndex, - Rehearsal = false, PreviousState = previousState, RandomSeed = random.Seed, })); @@ -402,7 +401,7 @@ private static FungibleAssetValue[] GetFungibleAssetValues() count: index + 1); }).ToArray(); return ( - new PrivateKey().ToAddress(), + new PrivateKey().Address, fungibleAssetValues, fungibleIdAndCounts .Select(tuple => (tuple.tradableFungibleItem.FungibleId, tuple.count)) diff --git a/.Lib9c.Tests/Action/Garages/LoadIntoMyGaragesTest.cs b/.Lib9c.Tests/Action/Garages/LoadIntoMyGaragesTest.cs index 244a09035..3460fdce9 100644 --- a/.Lib9c.Tests/Action/Garages/LoadIntoMyGaragesTest.cs +++ b/.Lib9c.Tests/Action/Garages/LoadIntoMyGaragesTest.cs @@ -198,7 +198,7 @@ public void Execute_Throws_InvalidActionFieldException() null)); // Signer does not have permission of balance address. - var invalidSignerAddr = new PrivateKey().ToAddress(); + var invalidSignerAddr = new PrivateKey().Address; Assert.Throws(() => Execute( invalidSignerAddr, 0, @@ -232,7 +232,7 @@ public void Execute_Throws_InvalidActionFieldException() _fungibleIdAndCounts)); // AgentAddr does not have permission of inventory address. - var invalidInventoryAddr = new PrivateKey().ToAddress(); + var invalidInventoryAddr = new PrivateKey().Address; Assert.Throws(() => Execute( AgentAddr, 0, @@ -415,7 +415,6 @@ private static (LoadIntoMyGarages action, IAccount nextStates) Execute( { Signer = signer, BlockIndex = blockIndex, - Rehearsal = false, PreviousState = previousState, RandomSeed = random.Seed, }; diff --git a/.Lib9c.Tests/Action/Garages/UnloadFromMyGaragesTest.cs b/.Lib9c.Tests/Action/Garages/UnloadFromMyGaragesTest.cs index 13625c7a9..78ef3f970 100644 --- a/.Lib9c.Tests/Action/Garages/UnloadFromMyGaragesTest.cs +++ b/.Lib9c.Tests/Action/Garages/UnloadFromMyGaragesTest.cs @@ -24,7 +24,7 @@ namespace Lib9c.Tests.Action.Garages public class UnloadFromMyGaragesTest { - private static readonly Address AgentAddr = new PrivateKey().ToAddress(); + private static readonly Address AgentAddr = new PrivateKey().Address; private static readonly int AvatarIndex = 0; private static readonly Address AvatarAddr = @@ -344,7 +344,6 @@ private static (UnloadFromMyGarages action, IAccount nextStates) Execute( { Signer = signer, BlockIndex = blockIndex, - Rehearsal = false, PreviousState = previousState, RandomSeed = random.Seed, })); diff --git a/.Lib9c.Tests/Action/Grinding0Test.cs b/.Lib9c.Tests/Action/Grinding0Test.cs index a7c6971f4..63dbbd65a 100644 --- a/.Lib9c.Tests/Action/Grinding0Test.cs +++ b/.Lib9c.Tests/Action/Grinding0Test.cs @@ -34,8 +34,8 @@ public Grinding0Test() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _crystalCurrency = Currency.Legacy("CRYSTAL", 18, null); diff --git a/.Lib9c.Tests/Action/GrindingTest.cs b/.Lib9c.Tests/Action/GrindingTest.cs index b8adada1e..02127eb0b 100644 --- a/.Lib9c.Tests/Action/GrindingTest.cs +++ b/.Lib9c.Tests/Action/GrindingTest.cs @@ -34,8 +34,8 @@ public GrindingTest() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _crystalCurrency = Currency.Legacy("CRYSTAL", 18, null); diff --git a/.Lib9c.Tests/Action/HackAndSlash0Test.cs b/.Lib9c.Tests/Action/HackAndSlash0Test.cs index 6c64e632a..88d9a2854 100644 --- a/.Lib9c.Tests/Action/HackAndSlash0Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash0Test.cs @@ -38,7 +38,7 @@ public HackAndSlash0Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -118,7 +118,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -163,7 +162,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -587,7 +585,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); diff --git a/.Lib9c.Tests/Action/HackAndSlash10Test.cs b/.Lib9c.Tests/Action/HackAndSlash10Test.cs index a05f433b1..48ff30b87 100644 --- a/.Lib9c.Tests/Action/HackAndSlash10Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash10Test.cs @@ -47,7 +47,7 @@ public HackAndSlash10Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -232,7 +232,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -373,7 +372,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -436,7 +434,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -463,7 +460,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -491,9 +487,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() @@ -892,7 +888,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1056,7 +1051,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId, int playCo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/HackAndSlash11Test.cs b/.Lib9c.Tests/Action/HackAndSlash11Test.cs index 136de735b..4fb9d9a86 100644 --- a/.Lib9c.Tests/Action/HackAndSlash11Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash11Test.cs @@ -47,7 +47,7 @@ public HackAndSlash11Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -230,7 +230,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -360,7 +359,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -422,7 +420,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -449,9 +446,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() @@ -839,7 +836,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1002,7 +998,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId, int playCo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/HackAndSlash12Test.cs b/.Lib9c.Tests/Action/HackAndSlash12Test.cs index 95c9fe5f3..f18f21a45 100644 --- a/.Lib9c.Tests/Action/HackAndSlash12Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash12Test.cs @@ -47,7 +47,7 @@ public HackAndSlash12Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -204,7 +204,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -344,7 +343,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -406,7 +404,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -433,9 +430,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -823,7 +820,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -998,7 +994,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId, int playCo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/HackAndSlash13Test.cs b/.Lib9c.Tests/Action/HackAndSlash13Test.cs index 119484436..f0ed23c4c 100644 --- a/.Lib9c.Tests/Action/HackAndSlash13Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash13Test.cs @@ -47,7 +47,7 @@ public HackAndSlash13Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -96,7 +96,7 @@ public HackAndSlash13Test() } var arenaSheetAddress = Addresses.GetSheetAddress(); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); foreach (var address in _avatarState.combinationSlotAddresses) { @@ -210,7 +210,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -352,7 +351,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -413,7 +411,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -440,9 +437,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -832,7 +829,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1039,7 +1035,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/HackAndSlash15Test.cs b/.Lib9c.Tests/Action/HackAndSlash15Test.cs index 83f66fe53..0adb82db6 100644 --- a/.Lib9c.Tests/Action/HackAndSlash15Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash15Test.cs @@ -46,7 +46,7 @@ public HackAndSlash15Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -206,7 +206,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -348,7 +347,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -409,7 +407,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -435,9 +432,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -804,7 +801,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -980,7 +976,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1130,7 +1125,6 @@ public void CheckCrystalRandomSkillState(bool forceClear, bool skillStateExist, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/HackAndSlash16Test.cs b/.Lib9c.Tests/Action/HackAndSlash16Test.cs index ed94d53d1..44adceecc 100644 --- a/.Lib9c.Tests/Action/HackAndSlash16Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash16Test.cs @@ -47,7 +47,7 @@ public HackAndSlash16Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -207,7 +207,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -349,7 +348,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -410,7 +408,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -436,9 +433,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -815,7 +812,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1025,7 +1021,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1175,7 +1170,6 @@ public void CheckCrystalRandomSkillState(bool forceClear, bool skillStateExist, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/HackAndSlash17Test.cs b/.Lib9c.Tests/Action/HackAndSlash17Test.cs index 5098b6b8c..a0c2bd92b 100644 --- a/.Lib9c.Tests/Action/HackAndSlash17Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash17Test.cs @@ -47,7 +47,7 @@ public HackAndSlash17Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -207,7 +207,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -349,7 +348,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -410,7 +408,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -436,9 +433,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -815,7 +812,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1025,7 +1021,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1175,7 +1170,6 @@ public void CheckCrystalRandomSkillState(bool forceClear, bool skillStateExist, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/HackAndSlash18Test.cs b/.Lib9c.Tests/Action/HackAndSlash18Test.cs index 2c7913f00..d4f3a3d89 100644 --- a/.Lib9c.Tests/Action/HackAndSlash18Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash18Test.cs @@ -50,7 +50,7 @@ public HackAndSlash18Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -205,7 +205,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -347,7 +346,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -408,7 +406,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -434,9 +431,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -813,7 +810,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -937,7 +933,7 @@ public void Execute_V100291() { if (keys.Contains(key)) { - initialState = initialState.SetState(Addresses.TableSheet.Derive(key), null!); + initialState = initialState.SetNull(Addresses.TableSheet.Derive(key)); } } @@ -1010,7 +1006,6 @@ public void Execute_V100291() PreviousState = initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1119,7 +1114,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1289,7 +1283,6 @@ public void CheckCrystalRandomSkillState( PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1409,7 +1402,6 @@ public void CheckUsedApByStaking(int level, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/HackAndSlash19Test.cs b/.Lib9c.Tests/Action/HackAndSlash19Test.cs index b55ba76a8..32de6cb2f 100644 --- a/.Lib9c.Tests/Action/HackAndSlash19Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash19Test.cs @@ -49,7 +49,7 @@ public HackAndSlash19Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -205,7 +205,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -349,7 +348,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -411,7 +409,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -438,9 +435,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -827,7 +824,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1040,7 +1036,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1211,7 +1206,6 @@ public void CheckCrystalRandomSkillState( PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1333,7 +1327,6 @@ public void CheckUsedApByStaking(int level, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/HackAndSlash20Test.cs b/.Lib9c.Tests/Action/HackAndSlash20Test.cs index e2d29cead..3b4bb6b0a 100644 --- a/.Lib9c.Tests/Action/HackAndSlash20Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash20Test.cs @@ -50,7 +50,7 @@ public HackAndSlash20Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -206,7 +206,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -350,7 +349,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -412,7 +410,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -439,9 +436,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -828,7 +825,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1130,7 +1126,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1301,7 +1296,6 @@ public void CheckCrystalRandomSkillState( PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1423,7 +1417,6 @@ public void CheckUsedApByStaking(int level, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1503,7 +1496,6 @@ public void CheckUsingApStoneWithStaking(int level, int apStoneCount, int totalR PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1650,7 +1642,6 @@ public void ExecuteTwoRepetitions() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -1674,7 +1665,6 @@ public void ExecuteTwoRepetitions() PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); } diff --git a/.Lib9c.Tests/Action/HackAndSlash21Test.cs b/.Lib9c.Tests/Action/HackAndSlash21Test.cs index a742a6568..7b5c751c3 100644 --- a/.Lib9c.Tests/Action/HackAndSlash21Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash21Test.cs @@ -51,7 +51,7 @@ public HackAndSlash21Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -207,7 +207,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -351,7 +350,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -413,7 +411,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -440,9 +437,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -829,7 +826,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1131,7 +1127,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1302,7 +1297,6 @@ public void CheckCrystalRandomSkillState( PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1424,7 +1418,6 @@ public void CheckUsedApByStaking(int level, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1504,7 +1497,6 @@ public void CheckUsingApStoneWithStaking(int level, int apStoneCount, int totalR PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); @@ -1651,7 +1643,6 @@ public void ExecuteTwoRepetitions() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -1675,7 +1666,6 @@ public void ExecuteTwoRepetitions() PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); } diff --git a/.Lib9c.Tests/Action/HackAndSlash2Test.cs b/.Lib9c.Tests/Action/HackAndSlash2Test.cs index cc18f2773..19971bf5d 100644 --- a/.Lib9c.Tests/Action/HackAndSlash2Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash2Test.cs @@ -40,7 +40,7 @@ public HackAndSlash2Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -120,7 +120,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -172,7 +171,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -596,7 +594,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); diff --git a/.Lib9c.Tests/Action/HackAndSlash3Test.cs b/.Lib9c.Tests/Action/HackAndSlash3Test.cs index a9087c4b8..0e09de51a 100644 --- a/.Lib9c.Tests/Action/HackAndSlash3Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash3Test.cs @@ -37,7 +37,7 @@ public HackAndSlash3Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -134,7 +134,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); diff --git a/.Lib9c.Tests/Action/HackAndSlash4Test.cs b/.Lib9c.Tests/Action/HackAndSlash4Test.cs index b38c56590..35834e1e5 100644 --- a/.Lib9c.Tests/Action/HackAndSlash4Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash4Test.cs @@ -40,7 +40,7 @@ public HackAndSlash4Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -182,7 +182,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -261,7 +260,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -324,7 +322,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -353,7 +350,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); diff --git a/.Lib9c.Tests/Action/HackAndSlash5Test.cs b/.Lib9c.Tests/Action/HackAndSlash5Test.cs index c17382bf6..12ce93a58 100644 --- a/.Lib9c.Tests/Action/HackAndSlash5Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash5Test.cs @@ -40,7 +40,7 @@ public HackAndSlash5Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -182,7 +182,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -262,7 +261,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -325,7 +323,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -354,7 +351,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); diff --git a/.Lib9c.Tests/Action/HackAndSlash6Test.cs b/.Lib9c.Tests/Action/HackAndSlash6Test.cs index b104abcfd..a5eeea5f2 100644 --- a/.Lib9c.Tests/Action/HackAndSlash6Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash6Test.cs @@ -42,7 +42,7 @@ public HackAndSlash6Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -198,7 +198,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -278,7 +277,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -341,7 +339,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -370,7 +367,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -400,9 +396,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlash7Test.cs b/.Lib9c.Tests/Action/HackAndSlash7Test.cs index 025049673..87858225d 100644 --- a/.Lib9c.Tests/Action/HackAndSlash7Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash7Test.cs @@ -47,7 +47,7 @@ public HackAndSlash7Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -224,7 +224,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool contains, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -383,7 +382,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -446,7 +444,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -473,7 +470,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -501,9 +497,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlash8Test.cs b/.Lib9c.Tests/Action/HackAndSlash8Test.cs index 034c6e71d..788f4d1ca 100644 --- a/.Lib9c.Tests/Action/HackAndSlash8Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash8Test.cs @@ -47,7 +47,7 @@ public HackAndSlash8Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -230,7 +230,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -379,7 +378,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -441,7 +439,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -467,7 +464,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -494,9 +490,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlash9Test.cs b/.Lib9c.Tests/Action/HackAndSlash9Test.cs index 18ba2738d..a1616c613 100644 --- a/.Lib9c.Tests/Action/HackAndSlash9Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlash9Test.cs @@ -47,7 +47,7 @@ public HackAndSlash9Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -232,7 +232,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -396,7 +395,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -459,7 +457,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -486,7 +483,6 @@ public void ExecuteThrowInvalidRankingMapAddress() PreviousState = _initialState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }) ); @@ -514,9 +510,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext() @@ -915,7 +911,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1079,7 +1074,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId, int playCo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/HackAndSlashRandomBuffTest.cs b/.Lib9c.Tests/Action/HackAndSlashRandomBuffTest.cs index 54a0ef4f1..cf1dfc349 100644 --- a/.Lib9c.Tests/Action/HackAndSlashRandomBuffTest.cs +++ b/.Lib9c.Tests/Action/HackAndSlashRandomBuffTest.cs @@ -46,7 +46,7 @@ public HackAndSlashRandomBuffTest() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep1Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep1Test.cs index cb28809fd..5e2808597 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep1Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep1Test.cs @@ -42,7 +42,7 @@ public HackAndSlashSweep1Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -201,9 +201,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep2Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep2Test.cs index af978bf53..c8d888b9a 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep2Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep2Test.cs @@ -42,7 +42,7 @@ public HackAndSlashSweep2Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -201,9 +201,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep3Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep3Test.cs index bbe1b7133..3cc15193c 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep3Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep3Test.cs @@ -43,7 +43,7 @@ public HackAndSlashSweep3Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -83,7 +83,7 @@ public HackAndSlashSweep3Test() } var arenaSheetAddress = Addresses.GetSheetAddress(); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); foreach (var address in _avatarState.combinationSlotAddresses) { @@ -231,9 +231,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep4Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep4Test.cs index 8412b036d..25b7c1d8d 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep4Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep4Test.cs @@ -43,7 +43,7 @@ public HackAndSlashSweep4Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -83,7 +83,7 @@ public HackAndSlashSweep4Test() } var arenaSheetAddress = Addresses.GetSheetAddress(); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); foreach (var address in _avatarState.combinationSlotAddresses) { @@ -251,9 +251,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep5Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep5Test.cs index 59d059e36..8a43e545e 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep5Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep5Test.cs @@ -44,7 +44,7 @@ public HackAndSlashSweep5Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -254,9 +254,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep6Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep6Test.cs index 6811c3bf4..014f088d3 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep6Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep6Test.cs @@ -46,7 +46,7 @@ public HackAndSlashSweep6Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -261,9 +261,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep7Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep7Test.cs index d82af3ce0..c60000516 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep7Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep7Test.cs @@ -46,7 +46,7 @@ public HackAndSlashSweep7Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -264,9 +264,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep8Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep8Test.cs index 666bfc329..7a05febbe 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep8Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep8Test.cs @@ -46,7 +46,7 @@ public HackAndSlashSweep8Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -266,9 +266,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashSweep9Test.cs b/.Lib9c.Tests/Action/HackAndSlashSweep9Test.cs index 2c8e3efae..53a7dafbe 100644 --- a/.Lib9c.Tests/Action/HackAndSlashSweep9Test.cs +++ b/.Lib9c.Tests/Action/HackAndSlashSweep9Test.cs @@ -47,7 +47,7 @@ public HackAndSlashSweep9Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -267,9 +267,9 @@ public void Execute_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } Assert.Throws(() => action.Execute(new ActionContext() diff --git a/.Lib9c.Tests/Action/HackAndSlashTest14.cs b/.Lib9c.Tests/Action/HackAndSlashTest14.cs index af79f5af6..c3f4bc54f 100644 --- a/.Lib9c.Tests/Action/HackAndSlashTest14.cs +++ b/.Lib9c.Tests/Action/HackAndSlashTest14.cs @@ -46,7 +46,7 @@ public HackAndSlashTest14() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -197,7 +197,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, bool backward, bo PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -339,7 +338,6 @@ public void MaxLevelTest() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarStateV2(_avatarAddress); @@ -400,7 +398,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, })); SerializeException(exec); @@ -426,9 +423,9 @@ public void Execute_Throw_FailedLoadStateException(bool backward) { state = _initialState .SetState(_avatarAddress, _avatarState.SerializeV2()) - .SetState(_avatarAddress.Derive(LegacyInventoryKey), null!) - .SetState(_avatarAddress.Derive(LegacyWorldInformationKey), null!) - .SetState(_avatarAddress.Derive(LegacyQuestListKey), null!); + .SetNull(_avatarAddress.Derive(LegacyInventoryKey)) + .SetNull(_avatarAddress.Derive(LegacyWorldInformationKey)) + .SetNull(_avatarAddress.Derive(LegacyQuestListKey)); } var exec = Assert.Throws(() => action.Execute(new ActionContext @@ -795,7 +792,6 @@ public void ExecuteWithoutPlayCount() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -971,7 +967,6 @@ public void CheckRewardItems(bool backward, int worldId, int stageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -1121,7 +1116,6 @@ public void CheckCrystalRandomSkillState(bool forceClear, bool skillStateExist, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }; var nextState = action.Execute(ctx); diff --git a/.Lib9c.Tests/Action/InitializeStatesTest.cs b/.Lib9c.Tests/Action/InitializeStatesTest.cs index 37f4eba0c..6e7a8bcc3 100644 --- a/.Lib9c.Tests/Action/InitializeStatesTest.cs +++ b/.Lib9c.Tests/Action/InitializeStatesTest.cs @@ -35,7 +35,7 @@ public void Execute() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); @@ -61,7 +61,7 @@ public void Execute() var genesisState = action.Execute(new ActionContext() { BlockIndex = 0, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, Miner = default, PreviousState = new Account(MockState.Empty), }); @@ -97,7 +97,7 @@ public void ExecuteWithAuthorizedMinersState() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); @@ -129,7 +129,7 @@ public void ExecuteWithAuthorizedMinersState() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); @@ -153,7 +153,7 @@ public void ExecuteWithActivateAdminKey() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); @@ -178,7 +178,7 @@ public void ExecuteWithActivateAdminKey() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); @@ -199,7 +199,7 @@ public void ExecuteWithCredits() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var adminAddress = new Address("F9A15F870701268Bd7bBeA6502eB15F4997f32f9"); @@ -230,7 +230,7 @@ public void ExecuteWithCredits() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); @@ -252,7 +252,7 @@ public void ExecuteWithoutAdminState() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); @@ -276,7 +276,7 @@ public void ExecuteWithoutAdminState() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); @@ -319,7 +319,7 @@ public void ExecuteWithoutInitialSupply() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); @@ -337,7 +337,7 @@ public void ExecuteWithAssetMinters() var minterKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - var ncg = Currency.Legacy("NCG", 2, minterKey.ToAddress()); + var ncg = Currency.Legacy("NCG", 2, minterKey.Address); #pragma warning restore CS0618 var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var adminAddress = new Address("F9A15F870701268Bd7bBeA6502eB15F4997f32f9"); @@ -360,7 +360,7 @@ public void ExecuteWithAssetMinters() { BlockIndex = 0, Miner = default, - Signer = minterKey.ToAddress(), + Signer = minterKey.Address, PreviousState = new Account(MockState.Empty), }); diff --git a/.Lib9c.Tests/Action/IssueTokensFromGarageTest.cs b/.Lib9c.Tests/Action/IssueTokensFromGarageTest.cs index 0fc86f13e..5ea6ae89b 100644 --- a/.Lib9c.Tests/Action/IssueTokensFromGarageTest.cs +++ b/.Lib9c.Tests/Action/IssueTokensFromGarageTest.cs @@ -29,7 +29,7 @@ public class IssueTokensFromGarageTest public IssueTokensFromGarageTest() { - _signer = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); @@ -108,7 +108,6 @@ public void Execute_With_FungibleAssetValue() { PreviousState = _prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 42, } ); @@ -138,7 +137,6 @@ public void Execute_With_FungibleItemValue() { PreviousState = _prevState, Signer = _signer, - Rehearsal = false, BlockIndex = 42, } ); diff --git a/.Lib9c.Tests/Action/ItemEnhancement0Test.cs b/.Lib9c.Tests/Action/ItemEnhancement0Test.cs index c727b0d24..a99b0c476 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement0Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement0Test.cs @@ -33,7 +33,7 @@ public ItemEnhancement0Test() _random = new TestRandom(); _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement10Test.cs b/.Lib9c.Tests/Action/ItemEnhancement10Test.cs index 7b9992758..f1258d13a 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement10Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement10Test.cs @@ -38,7 +38,7 @@ public ItemEnhancement10Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -80,7 +80,7 @@ public ItemEnhancement10Test() var arenaSheetAddress = Addresses.GetSheetAddress(); _arenaSheetState = _initialState.GetState(arenaSheetAddress); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); } [Theory] diff --git a/.Lib9c.Tests/Action/ItemEnhancement11Test.cs b/.Lib9c.Tests/Action/ItemEnhancement11Test.cs index d6625969c..886f8af74 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement11Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement11Test.cs @@ -37,7 +37,7 @@ public ItemEnhancement11Test() EquipmentItemSheetFixture.LegacyEnhancementCostSheetV2; _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -77,7 +77,7 @@ public ItemEnhancement11Test() } var costV3SheetAddress = Addresses.GetSheetAddress(); - _initialState = _initialState.SetState(costV3SheetAddress, null); + _initialState = _initialState.SetNull(costV3SheetAddress); } [Theory] diff --git a/.Lib9c.Tests/Action/ItemEnhancement12Test.cs b/.Lib9c.Tests/Action/ItemEnhancement12Test.cs index 82f0bbc2d..44a11e225 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement12Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement12Test.cs @@ -36,7 +36,7 @@ public ItemEnhancement12Test() EquipmentItemSheetFixture.LegacyEnhancementCostSheetV3; _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement13Test.cs b/.Lib9c.Tests/Action/ItemEnhancement13Test.cs index 2219c4939..9c280c1ee 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement13Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement13Test.cs @@ -51,7 +51,7 @@ public ItemEnhancement13Test() } var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement2Test.cs b/.Lib9c.Tests/Action/ItemEnhancement2Test.cs index d7f6c9864..8ec68124a 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement2Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement2Test.cs @@ -32,7 +32,7 @@ public ItemEnhancement2Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement3Test.cs b/.Lib9c.Tests/Action/ItemEnhancement3Test.cs index 8ff2f93d8..591cc9585 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement3Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement3Test.cs @@ -32,7 +32,7 @@ public ItemEnhancement3Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement4Test.cs b/.Lib9c.Tests/Action/ItemEnhancement4Test.cs index a631a4099..165769932 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement4Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement4Test.cs @@ -33,7 +33,7 @@ public ItemEnhancement4Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement5Test.cs b/.Lib9c.Tests/Action/ItemEnhancement5Test.cs index 31ce91424..308ba37ed 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement5Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement5Test.cs @@ -33,7 +33,7 @@ public ItemEnhancement5Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement6Test.cs b/.Lib9c.Tests/Action/ItemEnhancement6Test.cs index 5e1960079..f27f28c0f 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement6Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement6Test.cs @@ -33,7 +33,7 @@ public ItemEnhancement6Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement7Test.cs b/.Lib9c.Tests/Action/ItemEnhancement7Test.cs index ba9891dc3..df073d09a 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement7Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement7Test.cs @@ -35,7 +35,7 @@ public ItemEnhancement7Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement8Test.cs b/.Lib9c.Tests/Action/ItemEnhancement8Test.cs index a6dea2ac1..cc8c01bc4 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement8Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement8Test.cs @@ -35,7 +35,7 @@ public ItemEnhancement8Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/ItemEnhancement9Test.cs b/.Lib9c.Tests/Action/ItemEnhancement9Test.cs index a6005c80e..4be765dc0 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement9Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement9Test.cs @@ -36,7 +36,7 @@ public ItemEnhancement9Test() _random = new TestRandom(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); diff --git a/.Lib9c.Tests/Action/JoinArena1Test.cs b/.Lib9c.Tests/Action/JoinArena1Test.cs index f197955dd..411960bbf 100644 --- a/.Lib9c.Tests/Action/JoinArena1Test.cs +++ b/.Lib9c.Tests/Action/JoinArena1Test.cs @@ -47,11 +47,11 @@ public JoinArena1Test(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); - _signer = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; _avatarAddress = _signer.Derive("avatar"); var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, @@ -69,7 +69,7 @@ public JoinArena1Test(ITestOutputHelper outputHelper) agentState.avatarAddresses[0] = _avatarAddress; avatarState.level = GameConfig.RequireClearedStageLevel.ActionsInRankingBoard; - _signer2 = new PrivateKey().ToAddress(); + _signer2 = new PrivateKey().Address; _avatar2Address = _signer2.Derive("avatar"); var agent2State = new AgentState(_signer2); @@ -221,7 +221,6 @@ public void Execute(long blockIndex, int championshipId, int round, string balan PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -403,7 +402,6 @@ public void Execute_ArenaScoreAlreadyContainsException() PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/JoinArena2Test.cs b/.Lib9c.Tests/Action/JoinArena2Test.cs index 8d622408a..10947477f 100644 --- a/.Lib9c.Tests/Action/JoinArena2Test.cs +++ b/.Lib9c.Tests/Action/JoinArena2Test.cs @@ -47,11 +47,11 @@ public JoinArena2Test(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); - _signer = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; _avatarAddress = _signer.Derive("avatar"); var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, @@ -69,7 +69,7 @@ public JoinArena2Test(ITestOutputHelper outputHelper) agentState.avatarAddresses[0] = _avatarAddress; avatarState.level = GameConfig.RequireClearedStageLevel.ActionsInRankingBoard; - _signer2 = new PrivateKey().ToAddress(); + _signer2 = new PrivateKey().Address; _avatar2Address = _signer2.Derive("avatar"); var agent2State = new AgentState(_signer2); @@ -222,7 +222,6 @@ public void Execute(long blockIndex, int championshipId, int round, string balan PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -409,7 +408,6 @@ public void Execute_ArenaScoreAlreadyContainsException() PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/JoinArena3Test.cs b/.Lib9c.Tests/Action/JoinArena3Test.cs index b0b21fde9..9a8a6e27a 100644 --- a/.Lib9c.Tests/Action/JoinArena3Test.cs +++ b/.Lib9c.Tests/Action/JoinArena3Test.cs @@ -48,11 +48,11 @@ public JoinArena3Test(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); - _signer = new PrivateKey().ToAddress(); + _signer = new PrivateKey().Address; _avatarAddress = _signer.Derive("avatar"); var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var gameConfigState = new GameConfigState(_sheets[nameof(GameConfigSheet)]); var avatarState = new AvatarState( @@ -71,7 +71,7 @@ public JoinArena3Test(ITestOutputHelper outputHelper) agentState.avatarAddresses[0] = _avatarAddress; avatarState.level = GameConfig.RequireClearedStageLevel.ActionsInRankingBoard; - _signer2 = new PrivateKey().ToAddress(); + _signer2 = new PrivateKey().Address; _avatar2Address = _signer2.Derive("avatar"); var agent2State = new AgentState(_signer2); @@ -225,7 +225,6 @@ public void Execute(long blockIndex, int championshipId, int round, string balan PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); @@ -412,7 +411,6 @@ public void Execute_ArenaScoreAlreadyContainsException() PreviousState = state, Signer = _signer, RandomSeed = _random.Seed, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MarketValidationTest.cs b/.Lib9c.Tests/Action/MarketValidationTest.cs index d40f6ea7a..935154209 100644 --- a/.Lib9c.Tests/Action/MarketValidationTest.cs +++ b/.Lib9c.Tests/Action/MarketValidationTest.cs @@ -42,11 +42,11 @@ public static IEnumerable RegisterInfosMemberData() { new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, new AssetInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, }, Exc = typeof(InvalidAddressException), diff --git a/.Lib9c.Tests/Action/MigrateMonsterCollectionTest.cs b/.Lib9c.Tests/Action/MigrateMonsterCollectionTest.cs index c3582d9d3..68dcdd42d 100644 --- a/.Lib9c.Tests/Action/MigrateMonsterCollectionTest.cs +++ b/.Lib9c.Tests/Action/MigrateMonsterCollectionTest.cs @@ -34,7 +34,7 @@ public MigrateMonsterCollectionTest(ITestOutputHelper outputHelper) _state = new Account(MockState.Empty); Dictionary sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var agentState = new AgentState(_signer); var avatarState = new AvatarState( _avatarAddress, diff --git a/.Lib9c.Tests/Action/MigrationAvatarStateTest.cs b/.Lib9c.Tests/Action/MigrationAvatarStateTest.cs index 981c107c9..d50f3a51f 100644 --- a/.Lib9c.Tests/Action/MigrationAvatarStateTest.cs +++ b/.Lib9c.Tests/Action/MigrationAvatarStateTest.cs @@ -21,8 +21,8 @@ public MigrationAvatarStateTest() [Fact] public void Execute() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, agentAddress, diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle0Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle0Test.cs index dfd998d6b..b0154daa6 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle0Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle0Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle0Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -169,7 +169,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int clearStageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -259,7 +258,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -494,7 +492,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -584,7 +582,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle10Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle10Test.cs index f4f5c2298..8d6a63263 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle10Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle10Test.cs @@ -35,7 +35,7 @@ public MimisbrunnrBattle10Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -159,7 +159,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -233,7 +232,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -429,7 +427,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -512,7 +510,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -691,7 +688,7 @@ public void Execute_v100291() { if (keys.Contains(key)) { - state = state.SetState(Addresses.TableSheet.Derive(key), null!); + state = state.SetNull(Addresses.TableSheet.Derive(key)); } } @@ -711,7 +708,6 @@ public void Execute_v100291() PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -821,7 +817,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle11Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle11Test.cs index 82b62d5d0..a4394ca7e 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle11Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle11Test.cs @@ -33,7 +33,7 @@ public MimisbrunnrBattle11Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -158,7 +158,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -233,7 +232,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -434,7 +432,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -519,7 +517,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -717,7 +714,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle12Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle12Test.cs index 55c0a813d..7d5bcd621 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle12Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle12Test.cs @@ -35,7 +35,7 @@ public MimisbrunnrBattle12Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -165,7 +165,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -240,7 +239,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -441,7 +439,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -526,7 +524,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -724,7 +721,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -854,7 +850,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, })); } diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle13Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle13Test.cs index 100cc6a8d..d0be4e6cd 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle13Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle13Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle13Test() _tableSheets = new TableSheets(_sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -166,7 +166,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, }); @@ -241,7 +240,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -442,7 +440,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -527,7 +525,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -725,7 +722,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -855,7 +851,6 @@ public void ExecuteDuplicatedException(int slotIndex, int runeId, int slotIndex2 PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = ActionObsoleteConfig.V100301ExecutedBlockIndex, })); } diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle2Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle2Test.cs index 38cafdaf2..ed9cc4dc4 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle2Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle2Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle2Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -169,7 +169,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int clearStageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); @@ -259,7 +258,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -494,7 +492,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -584,7 +582,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle3Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle3Test.cs index b136b3f99..c8875f223 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle3Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle3Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle3Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -169,7 +169,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int clearStageId) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -260,7 +259,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -495,7 +493,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -585,7 +583,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle4Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle4Test.cs index 16dbecae0..1dd8a3560 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle4Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle4Test.cs @@ -37,7 +37,7 @@ public MimisbrunnrBattle4Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -182,7 +182,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int clearStageId, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -269,7 +268,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -495,7 +493,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -581,7 +579,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle5Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle5Test.cs index 1e0dbf0ad..1c99ef85f 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle5Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle5Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle5Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -177,7 +177,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int clearStageId, PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -262,7 +261,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -482,7 +480,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -566,7 +564,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle6Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle6Test.cs index 0a07bcdcb..f24a425d3 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle6Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle6Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle6Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -187,7 +187,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -273,7 +272,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -499,7 +497,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -584,7 +582,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -706,7 +703,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle7Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle7Test.cs index 1eae59601..388930919 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle7Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle7Test.cs @@ -36,7 +36,7 @@ public MimisbrunnrBattle7Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -187,7 +187,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -273,7 +272,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -499,7 +497,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -584,7 +582,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -706,7 +703,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle8Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle8Test.cs index 5f1a32d5d..365fdaf02 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle8Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle8Test.cs @@ -33,7 +33,7 @@ public MimisbrunnrBattle8Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -182,7 +182,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -257,7 +256,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -453,7 +451,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext() { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -536,7 +534,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -657,7 +654,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MimisbrunnrBattle9Test.cs b/.Lib9c.Tests/Action/MimisbrunnrBattle9Test.cs index 519be580b..307780186 100644 --- a/.Lib9c.Tests/Action/MimisbrunnrBattle9Test.cs +++ b/.Lib9c.Tests/Action/MimisbrunnrBattle9Test.cs @@ -34,7 +34,7 @@ public MimisbrunnrBattle9Test() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -158,7 +158,6 @@ public void Execute(int avatarLevel, int worldId, int stageId, int playCount, in PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); @@ -232,7 +231,6 @@ public void ExecuteThrowInvalidStageException() PreviousState = previousState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -428,7 +426,7 @@ public void ExecuteThrowInvalidWorld(int avatarLevel, int worldId, int stageId, { action.Execute(new ActionContext { - PreviousState = state, Signer = _agentAddress, RandomSeed = 0, Rehearsal = false, + PreviousState = state, Signer = _agentAddress, RandomSeed = 0, }); }); } @@ -511,7 +509,6 @@ public void ExecuteEquippableItemValidation() { PreviousState = nextState, Signer = _agentAddress, - Rehearsal = false, RandomSeed = 0, }); } @@ -707,7 +704,6 @@ public void CheckRewardItems(bool backward, int stageIndex, int playCount) PreviousState = state, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, BlockIndex = 1, }); diff --git a/.Lib9c.Tests/Action/MintAssetsTest.cs b/.Lib9c.Tests/Action/MintAssetsTest.cs index 469f3c4a2..01049a479 100644 --- a/.Lib9c.Tests/Action/MintAssetsTest.cs +++ b/.Lib9c.Tests/Action/MintAssetsTest.cs @@ -9,6 +9,7 @@ namespace Lib9c.Tests.Action using Libplanet.Common; using Libplanet.Crypto; using Libplanet.Types.Assets; + using Libplanet.Types.Tx; using Nekoyume; using Nekoyume.Action; using Nekoyume.Model; @@ -28,13 +29,13 @@ public class MintAssetsTest public MintAssetsTest() { - _adminAddress = new PrivateKey().ToAddress(); + _adminAddress = new PrivateKey().Address; _ncgCurrency = Currency.Legacy("NCG", 2, null); _minters = new HashSet
{ - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, + new PrivateKey().Address, }; _prevState = new Account( MockState.Empty @@ -61,7 +62,7 @@ public void PlainValue() }; var act = new MintAssets(r, null); var expected = Dictionary.Empty - .Add("type_id", "mint_assets") + .Add("type_id", MintAssets.TypeIdentifier) .Add("values", List.Empty .Add(Null.Value) .Add(new List(default(Address).Bencoded, (_ncgCurrency * 100).Serialize(), default(Null))) @@ -73,7 +74,7 @@ public void PlainValue() var act2 = new MintAssets(r, "memo"); var expected2 = Dictionary.Empty - .Add("type_id", "mint_assets") + .Add("type_id", MintAssets.TypeIdentifier) .Add("values", List.Empty .Add((Text)"memo") .Add(new List(default(Address).Bencoded, (_ncgCurrency * 100).Serialize(), default(Null))) @@ -131,7 +132,6 @@ public void Execute_With_FungibleAssetValue() { PreviousState = _prevState, Signer = _minters.First(), - Rehearsal = false, BlockIndex = 1, } ); @@ -170,7 +170,6 @@ public void Execute_With_FungibleItemValue() { PreviousState = prevState, Signer = _minters.First(), - Rehearsal = false, BlockIndex = 1, } ); @@ -216,7 +215,6 @@ public void Execute_With_Mixed() { PreviousState = prevState, Signer = _minters.First(), - Rehearsal = false, BlockIndex = 1, } ); @@ -251,7 +249,6 @@ public void Execute_Throws_InvalidMinterException() { PreviousState = _prevState, Signer = _adminAddress, - Rehearsal = false, BlockIndex = 1, } ); @@ -264,7 +261,6 @@ public void Execute_Throws_InvalidMinterException() { PreviousState = _prevState, Signer = m, - Rehearsal = false, BlockIndex = 1, } ); @@ -276,18 +272,96 @@ public void Execute_Throws_InvalidMinterException() { PreviousState = _prevState, Signer = default, - Rehearsal = false, BlockIndex = 1, } )); } + [Fact] + public void Execute_Crystal() + { + var tx = Transaction.Deserialize(Convert.FromBase64String( + "ZDE6UzcxOjBFAiEAhzt5mDMzPwi6y+W+DJ53T4TKwt6YMaFTi38rKYqf7ZMCICV36ngA3Gi+rXkdG5hCUtlLXjAz8H2IKMNaCdCy/N90MTphbGR1Nzp0eXBlX2lkdTExOm1pbnRfYXNzZXRzdTY6dmFsdWVzbHU3Mzp7ImlhcCI6IHsiZ19za3UiOiAiZ19wa2dfYmxhY2tmcmlkYXkwMSIsICJhX3NrdSI6ICJhX3BrZ19ibGFja2ZyaWRheTAxIn19bDIwOgNS/yy36WH9ZHgDqZJiTdhQeCGFbGR1MTM6ZGVjaW1hbFBsYWNlczE6EnU3Om1pbnRlcnNudTY6dGlja2VydTc6Q1JZU1RBTGVpMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVlbmVsMjA6H3yZ4KY1m33Wn0P0t+LAvTf5oidubDMyOjmR4E3YCNwLwksh9a23vxmXMS+HANrxM0vzSTbooIE6aTMwMDAwZWVlbDIwOh98meCmNZt91p9D9LfiwL03+aInbmwzMjr4+vksnA0OjgZpQ2Hqh7/IspqK6N6TBEuYRwpXY27Q4Gk0MDBlZWVlZWUxOmczMjpyn6JpWGSKNbU+jjkF0R7FOxtJKb9fSZiErtffYW9ZEzE6bGk0ZTE6bWxkdTEzOmRlY2ltYWxQbGFjZXMxOhJ1NzptaW50ZXJzbnU2OnRpY2tlcnU0Ok1lYWRlaTEwMDAwMDAwMDAwMDAwMDAwMDBlZTE6bmkxMTU3N2UxOnA2NToEq54xog2Nv1BCv8Js6dntmg4yrXh6HlqjroGI+lFDhhU1rMcTLNjnTUwfC5T4Q1deOt1piNPMsfVNfFn7lTXXiTE6czIwOhwq6XOAz7T3MgSeRU9tmiXUlnxvMTp0dTI3OjIyMDEtMDEtMzFUMjM6NTk6NTkuOTk5MDAwWjE6dWxlZQ==")); + var a = tx.Actions.First(); + var action = new MintAssets(); + action.LoadPlainValue(a); + var address = action.MintSpecs!.First().Recipient; + var avatarAddress = action.MintSpecs.Last().Recipient; + IAccount prevState = GenerateAvatar(_prevState, address, avatarAddress); + IAccount nextState = action.Execute( + new ActionContext() + { + PreviousState = prevState, + Signer = _minters.First(), + BlockIndex = 1, + } + ); + + var inventory = nextState.GetInventory(avatarAddress.Derive(SerializeKeys.LegacyInventoryKey)); + var avatarDict = Assert.IsType(nextState.GetState(avatarAddress)); + var mailBox = new MailBox((List)avatarDict[SerializeKeys.MailBoxKey]); + Assert.Single(mailBox); + var mail = Assert.IsType(mailBox.First()); + Assert.Equal(action.Memo, mail.Memo); + + foreach (var mintSpec in action.MintSpecs) + { + if (mintSpec.Assets.HasValue) + { + var fav = mintSpec.Assets.Value; + Assert.Equal(fav, nextState.GetBalance(address, fav.Currency)); + Assert.Contains(mail.FungibleAssetValues, tuple => tuple.value == fav && tuple.balanceAddr.Equals(address)); + } + + if (mintSpec.Items.HasValue) + { + var item = mintSpec.Items.Value; + var fungibleId = item.Id; + var itemCount = item.Count; + Assert.Contains(inventory.Items, i => i.count == itemCount && i.item is Material m && m.FungibleId.Equals(fungibleId)); + Assert.Contains( + mail.FungibleIdAndCounts, + tuple => tuple.count == itemCount && tuple.fungibleId.Equals(fungibleId) + ); + } + } + } + private IAccount GenerateAvatar(IAccount state, out Address avatarAddress) { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var agentState = new AgentState(address); avatarAddress = address.Derive("avatar"); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; + var avatarState = new AvatarState( + avatarAddress, + address, + 0, + _tableSheets.GetAvatarSheets(), + new GameConfigState(), + rankingMapAddress) + { + worldInformation = new WorldInformation( + 0, + _tableSheets.WorldSheet, + GameConfig.RequireClearedStageLevel.ActionsInShop), + }; + agentState.avatarAddresses[0] = avatarAddress; + + state = state + .SetState(address, agentState.Serialize()) + .SetState(avatarAddress, avatarState.SerializeV2()) + .SetState( + avatarAddress.Derive(SerializeKeys.LegacyInventoryKey), + avatarState.inventory.Serialize()); + + return state; + } + + private IAccount GenerateAvatar(IAccount state, Address address, Address avatarAddress) + { + var agentState = new AgentState(address); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, address, diff --git a/.Lib9c.Tests/Action/MockState.cs b/.Lib9c.Tests/Action/MockState.cs index f8df30ca1..b68be47bc 100644 --- a/.Lib9c.Tests/Action/MockState.cs +++ b/.Lib9c.Tests/Action/MockState.cs @@ -1,15 +1,15 @@ -namespace Lib9c.Tests.Action -{ #nullable enable +namespace Lib9c.Tests.Action +{ using System; using System.Collections.Generic; - using System.Collections.Immutable; using System.Linq; using System.Numerics; using Bencodex.Types; using Libplanet.Action.State; using Libplanet.Crypto; + using Libplanet.Store; using Libplanet.Store.Trie; using Libplanet.Types.Assets; using Libplanet.Types.Consensus; @@ -52,116 +52,102 @@ namespace Lib9c.Tests.Action public class MockState : IAccountState { private static readonly MockState _empty = new MockState(); - private readonly IImmutableDictionary _states; - private readonly IImmutableDictionary<(Address, Currency), BigInteger> _fungibles; - private readonly IImmutableDictionary _totalSupplies; - private readonly ValidatorSet _validatorSet; private MockState() - : this( - ImmutableDictionary.Empty, - ImmutableDictionary<(Address Address, Currency Currency), BigInteger>.Empty, - ImmutableDictionary.Empty, - new ValidatorSet()) + : this(new TrieStateStore(new MemoryKeyValueStore()).GetStateRoot(null)) { } - private MockState( - IImmutableDictionary state, - IImmutableDictionary<(Address Address, Currency Currency), BigInteger> balance, - IImmutableDictionary totalSupplies, - ValidatorSet validatorSet) + private MockState(ITrie trie) { - _states = state; - _fungibles = balance; - _totalSupplies = totalSupplies; - _validatorSet = validatorSet; + Trie = trie; } public static MockState Empty => _empty; - public ITrie Trie => new MerkleTrie(new MemoryKeyValueStore()); - - public IImmutableDictionary States => _states; - - public IImmutableDictionary<(Address, Currency), BigInteger> Fungibles => _fungibles; - - public IImmutableDictionary TotalSupplies => _totalSupplies; + public ITrie Trie { get; } - public ValidatorSet ValidatorSet => _validatorSet; - - public IValue? GetState(Address address) => _states.TryGetValue(address, out IValue? value) - ? value - : null; + public IValue? GetState(Address address) => Trie.Get(KeyConverters.ToStateKey(address)); public IReadOnlyList GetStates(IReadOnlyList
addresses) => - addresses.Select(GetState).ToArray(); + addresses.Select(GetState).ToList(); public FungibleAssetValue GetBalance(Address address, Currency currency) => - _fungibles.TryGetValue((address, currency), out BigInteger rawValue) + Trie.Get(KeyConverters.ToFungibleAssetKey(address, currency)) is Integer rawValue ? FungibleAssetValue.FromRawValue(currency, rawValue) - : FungibleAssetValue.FromRawValue(currency, 0); + : currency * 0; public FungibleAssetValue GetTotalSupply(Currency currency) { if (!currency.TotalSupplyTrackable) { var msg = - $"The total supply value of the currency {currency} is not trackable" - + " because it is a legacy untracked currency which might have been" - + " established before the introduction of total supply tracking support."; + $"The total supply value of the currency {currency} is not trackable " + + "because it is a legacy untracked currency which might have been" + + "established before the introduction of total supply tracking support."; throw new TotalSupplyNotTrackableException(msg, currency); } - return _totalSupplies.TryGetValue(currency, out var rawValue) + return Trie.Get(KeyConverters.ToTotalSupplyKey(currency)) is Integer rawValue ? FungibleAssetValue.FromRawValue(currency, rawValue) - : FungibleAssetValue.FromRawValue(currency, 0); + : currency * 0; } - public ValidatorSet GetValidatorSet() => _validatorSet; + public ValidatorSet GetValidatorSet() => + Trie.Get(KeyConverters.ValidatorSetKey) is List list + ? new ValidatorSet(list) + : new ValidatorSet(); public MockState SetState(Address address, IValue state) => - new MockState( - _states.SetItem(address, state), - _fungibles, - _totalSupplies, - _validatorSet); + new MockState(Trie.Set(KeyConverters.ToStateKey(address), state)); - public MockState SetBalance(Address address, FungibleAssetValue amount) => + public MockState SetBalance( + Address address, FungibleAssetValue amount) => SetBalance((address, amount.Currency), amount.RawValue); - public MockState SetBalance(Address address, Currency currency, BigInteger rawAmount) => + public MockState SetBalance( + Address address, Currency currency, BigInteger rawAmount) => SetBalance((address, currency), rawAmount); - public MockState SetBalance((Address Address, Currency Currency) pair, BigInteger rawAmount) => - new MockState( - _states, - _fungibles.SetItem(pair, rawAmount), - _totalSupplies, - _validatorSet); + public MockState SetBalance( + (Address Address, Currency Currency) pair, BigInteger rawAmount) => + new MockState(Trie.Set( + KeyConverters.ToFungibleAssetKey(pair.Address, pair.Currency), + new Integer(rawAmount))); public MockState AddBalance(Address address, FungibleAssetValue amount) => AddBalance((address, amount.Currency), amount.RawValue); - public MockState AddBalance(Address address, Currency currency, BigInteger rawAmount) => + public MockState AddBalance( + Address address, Currency currency, BigInteger rawAmount) => AddBalance((address, currency), rawAmount); - public MockState AddBalance((Address Address, Currency Currency) pair, BigInteger rawAmount) => - SetBalance(pair, (_fungibles.TryGetValue(pair, out BigInteger amount) ? amount : 0) + rawAmount); + public MockState AddBalance( + (Address Address, Currency Currency) pair, BigInteger rawAmount) => + SetBalance( + pair, + (Trie.Get(KeyConverters.ToFungibleAssetKey(pair.Address, pair.Currency)) is Integer amount ? amount : 0) + rawAmount); - public MockState SubtractBalance(Address address, FungibleAssetValue amount) => + public MockState SubtractBalance( + Address address, FungibleAssetValue amount) => SubtractBalance((address, amount.Currency), amount.RawValue); - public MockState SubtractBalance(Address address, Currency currency, BigInteger rawAmount) => + public MockState SubtractBalance( + Address address, Currency currency, BigInteger rawAmount) => SubtractBalance((address, currency), rawAmount); - public MockState SubtractBalance((Address Address, Currency Currency) pair, BigInteger rawAmount) => - SetBalance(pair, (_fungibles.TryGetValue(pair, out BigInteger amount) ? amount : 0) - rawAmount); + public MockState SubtractBalance( + (Address Address, Currency Currency) pair, BigInteger rawAmount) => + SetBalance( + pair, + (Trie.Get(KeyConverters.ToFungibleAssetKey(pair.Address, pair.Currency)) is Integer amount ? amount : 0) - rawAmount); - public MockState TransferBalance(Address sender, Address recipient, FungibleAssetValue amount) => + public MockState TransferBalance( + Address sender, Address recipient, FungibleAssetValue amount) => TransferBalance(sender, recipient, amount.Currency, amount.RawValue); - public MockState TransferBalance(Address sender, Address recipient, Currency currency, BigInteger rawAmount) => + public MockState TransferBalance( + Address sender, Address recipient, Currency currency, BigInteger rawAmount) => SubtractBalance(sender, currency, rawAmount).AddBalance(recipient, currency, rawAmount); public MockState SetTotalSupply(FungibleAssetValue amount) => @@ -169,15 +155,13 @@ public MockState SetTotalSupply(FungibleAssetValue amount) => public MockState SetTotalSupply(Currency currency, BigInteger rawAmount) => currency.TotalSupplyTrackable - ? !(currency.MaximumSupply is { } maximumSupply) || rawAmount <= maximumSupply.RawValue + ? !(currency.MaximumSupply is FungibleAssetValue maximumSupply) || + rawAmount <= maximumSupply.RawValue ? new MockState( - _states, - _fungibles, - _totalSupplies.SetItem(currency, rawAmount), - _validatorSet) + Trie.Set(KeyConverters.ToTotalSupplyKey(currency), new Integer(rawAmount))) : throw new ArgumentException( - $"Given {currency}'s total supply is capped at {maximumSupply.RawValue} and " + - $"cannot be set to {rawAmount}.") + $"Given {currency}'s total supply is capped at {maximumSupply.RawValue} " + + $"and cannot be set to {rawAmount}.") : throw new ArgumentException( $"Given {currency} is not trackable."); @@ -185,19 +169,110 @@ public MockState AddTotalSupply(FungibleAssetValue amount) => AddTotalSupply(amount.Currency, amount.RawValue); public MockState AddTotalSupply(Currency currency, BigInteger rawAmount) => - SetTotalSupply(currency, (_totalSupplies.TryGetValue(currency, out BigInteger amount) ? amount : 0) + rawAmount); + SetTotalSupply( + currency, + (Trie.Get(KeyConverters.ToTotalSupplyKey(currency)) is Integer amount ? amount : 0) + rawAmount); public MockState SubtractTotalSupply(FungibleAssetValue amount) => SubtractTotalSupply(amount.Currency, amount.RawValue); public MockState SubtractTotalSupply(Currency currency, BigInteger rawAmount) => - SetTotalSupply(currency, (_totalSupplies.TryGetValue(currency, out BigInteger amount) ? amount : 0) - rawAmount); + SetTotalSupply( + currency, + (Trie.Get(KeyConverters.ToTotalSupplyKey(currency)) is Integer amount ? amount : 0) - rawAmount); public MockState SetValidator(Validator validator) => new MockState( - _states, - _fungibles, - _totalSupplies, - _validatorSet.Update(validator)); + Trie.Set(KeyConverters.ValidatorSetKey, GetValidatorSet().Update(validator).Bencoded)); + + private static class KeyConverters + { + // "___" + internal static readonly KeyBytes ValidatorSetKey = + new KeyBytes(new byte[] { _underScore, _underScore, _underScore }); + + private const byte _underScore = 95; // '_' + + private static readonly byte[] _conversionTable = + { + 48, // '0' + 49, // '1' + 50, // '2' + 51, // '3' + 52, // '4' + 53, // '5' + 54, // '6' + 55, // '7' + 56, // '8' + 57, // '9' + 97, // 'a' + 98, // 'b' + 99, // 'c' + 100, // 'd' + 101, // 'e' + 102, // 'f' + }; + + // $"{ByteUtil.Hex(address.ByteArray)}" + internal static KeyBytes ToStateKey(Address address) + { + var addressBytes = address.ByteArray; + byte[] buffer = new byte[addressBytes.Length * 2]; + for (int i = 0; i < addressBytes.Length; i++) + { + buffer[i * 2] = _conversionTable[addressBytes[i] >> 4]; + buffer[i * 2 + 1] = _conversionTable[addressBytes[i] & 0xf]; + } + + return new KeyBytes(buffer); + } + + // $"_{ByteUtil.Hex(address.ByteArray)}_{ByteUtil.Hex(currency.Hash.ByteArray)}" + internal static KeyBytes ToFungibleAssetKey(Address address, Currency currency) + { + var addressBytes = address.ByteArray; + var currencyBytes = currency.Hash.ByteArray; + byte[] buffer = new byte[addressBytes.Length * 2 + currencyBytes.Length * 2 + 2]; + + buffer[0] = _underScore; + for (int i = 0; i < addressBytes.Length; i++) + { + buffer[1 + i * 2] = _conversionTable[addressBytes[i] >> 4]; + buffer[1 + i * 2 + 1] = _conversionTable[addressBytes[i] & 0xf]; + } + + var offset = addressBytes.Length * 2; + buffer[offset + 1] = _underScore; + for (int i = 0; i < currencyBytes.Length; i++) + { + buffer[offset + 2 + i * 2] = _conversionTable[currencyBytes[i] >> 4]; + buffer[offset + 2 + i * 2 + 1] = _conversionTable[currencyBytes[i] & 0xf]; + } + + return new KeyBytes(buffer); + } + + internal static KeyBytes ToFungibleAssetKey( + (Address Address, Currency Currency) pair) => + ToFungibleAssetKey(pair.Address, pair.Currency); + + // $"__{ByteUtil.Hex(currency.Hash.ByteArray)}" + internal static KeyBytes ToTotalSupplyKey(Currency currency) + { + var currencyBytes = currency.Hash.ByteArray; + byte[] buffer = new byte[currencyBytes.Length * 2 + 2]; + + buffer[0] = _underScore; + buffer[1] = _underScore; + + for (int i = 0; i < currencyBytes.Length; i++) + { + buffer[2 + i * 2] = _conversionTable[currencyBytes[i] >> 4]; + buffer[2 + i * 2 + 1] = _conversionTable[currencyBytes[i] & 0xf]; + } + + return new KeyBytes(buffer); + } + } } } diff --git a/.Lib9c.Tests/Action/PatchTableSheetTest.cs b/.Lib9c.Tests/Action/PatchTableSheetTest.cs index 4da2f7e2b..e202d047d 100644 --- a/.Lib9c.Tests/Action/PatchTableSheetTest.cs +++ b/.Lib9c.Tests/Action/PatchTableSheetTest.cs @@ -54,7 +54,6 @@ public void Execute() { BlockIndex = 0, PreviousState = _initialState, - Rehearsal = false, }); var nextWorldSheetCsv = nextState.GetSheetCsv(); @@ -73,7 +72,6 @@ public void Execute() { BlockIndex = 0, PreviousState = _initialState, - Rehearsal = false, }); nextWorldSheet = nextState.GetSheet(); diff --git a/.Lib9c.Tests/Action/PetEnhancement0Test.cs b/.Lib9c.Tests/Action/PetEnhancement0Test.cs index ad523b878..27f15cb6b 100644 --- a/.Lib9c.Tests/Action/PetEnhancement0Test.cs +++ b/.Lib9c.Tests/Action/PetEnhancement0Test.cs @@ -72,7 +72,7 @@ public void Execute_Success( [Fact] public void Execute_Throw_InvalidActionFieldException_AgentAddress() { - var invalidAgentAddr = new PrivateKey().ToAddress(); + var invalidAgentAddr = new PrivateKey().Address; Assert.Throws(() => Execute( _initialStatesWithAvatarStateV1, @@ -96,7 +96,7 @@ public void Execute_Throw_InvalidActionFieldException_AgentAddress() [Fact] public void Execute_Throw_InvalidActionFieldException_AvatarAddress() { - var invalidAvatarAddr = new PrivateKey().ToAddress(); + var invalidAvatarAddr = new PrivateKey().Address; Assert.Throws(() => Execute( _initialStatesWithAvatarStateV1, @@ -379,7 +379,6 @@ private static IAccount Execute( BlockIndex = blockIndex, PreviousState = prevStates, RandomSeed = 0, - Rehearsal = false, Signer = agentAddr, }); var nextNcgBal = nextStates.GetBalance(agentAddr, ncgCurrency); diff --git a/.Lib9c.Tests/Action/PrepareRewardAssetsTest.cs b/.Lib9c.Tests/Action/PrepareRewardAssetsTest.cs index 25a8d7926..4f3a10f03 100644 --- a/.Lib9c.Tests/Action/PrepareRewardAssetsTest.cs +++ b/.Lib9c.Tests/Action/PrepareRewardAssetsTest.cs @@ -20,8 +20,8 @@ public class PrepareRewardAssetsTest [InlineData(false, false, typeof(PermissionDeniedException))] public void Execute(bool admin, bool includeNcg, Type exc) { - var adminAddress = new PrivateKey().ToAddress(); - var poolAddress = new PrivateKey().ToAddress(); + var adminAddress = new PrivateKey().Address; + var poolAddress = new PrivateKey().Address; var adminState = new AdminState(adminAddress, 150L); var assets = new List { diff --git a/.Lib9c.Tests/Action/Raid1Test.cs b/.Lib9c.Tests/Action/Raid1Test.cs index ed7e5c58b..c7be2c655 100644 --- a/.Lib9c.Tests/Action/Raid1Test.cs +++ b/.Lib9c.Tests/Action/Raid1Test.cs @@ -30,8 +30,8 @@ public Raid1Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -213,7 +213,6 @@ long executeOffset BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -350,7 +349,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -463,7 +461,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + Raid4.RequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); @@ -561,7 +558,6 @@ public void Execute_Throw_ActionObsoletedException() BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } diff --git a/.Lib9c.Tests/Action/Raid2Test.cs b/.Lib9c.Tests/Action/Raid2Test.cs index 87bc1af9a..486e1cee0 100644 --- a/.Lib9c.Tests/Action/Raid2Test.cs +++ b/.Lib9c.Tests/Action/Raid2Test.cs @@ -30,8 +30,8 @@ public Raid2Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -178,7 +178,7 @@ bool raiderListExist if (raiderListExist) { - raiderList = raiderList.Add(new PrivateKey().ToAddress().Serialize()); + raiderList = raiderList.Add(new PrivateKey().Address.Serialize()); } state = state.SetState(raiderListAddress, raiderList); @@ -225,7 +225,6 @@ bool raiderListExist BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -368,7 +367,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -482,7 +480,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + Raid4.RequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/Raid3Test.cs b/.Lib9c.Tests/Action/Raid3Test.cs index d136b0750..66f54c728 100644 --- a/.Lib9c.Tests/Action/Raid3Test.cs +++ b/.Lib9c.Tests/Action/Raid3Test.cs @@ -30,8 +30,8 @@ public Raid3Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -179,7 +179,7 @@ bool raiderListExist if (raiderListExist) { - raiderList = raiderList.Add(new PrivateKey().ToAddress().Serialize()); + raiderList = raiderList.Add(new PrivateKey().Address.Serialize()); } state = state.SetState(raiderListAddress, raiderList); @@ -226,7 +226,6 @@ bool raiderListExist BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -369,7 +368,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -484,7 +482,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + Raid4.RequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/Raid4Test.cs b/.Lib9c.Tests/Action/Raid4Test.cs index ff3c6d6ec..7a45eb3c7 100644 --- a/.Lib9c.Tests/Action/Raid4Test.cs +++ b/.Lib9c.Tests/Action/Raid4Test.cs @@ -31,8 +31,8 @@ public Raid4Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -199,7 +199,7 @@ int runeId2 if (raiderListExist) { - raiderList = raiderList.Add(new PrivateKey().ToAddress().Serialize()); + raiderList = raiderList.Add(new PrivateKey().Address.Serialize()); } state = state.SetState(raiderListAddress, raiderList); @@ -247,7 +247,6 @@ int runeId2 BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -410,7 +409,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -525,7 +523,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + Raid4.RequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); @@ -626,7 +623,6 @@ public void Execute_With_Free_Crystal_Fee() BlockIndex = blockIndex, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; diff --git a/.Lib9c.Tests/Action/Raid5Test.cs b/.Lib9c.Tests/Action/Raid5Test.cs index 23d14f445..61418cbcc 100644 --- a/.Lib9c.Tests/Action/Raid5Test.cs +++ b/.Lib9c.Tests/Action/Raid5Test.cs @@ -31,8 +31,8 @@ public Raid5Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -199,7 +199,7 @@ int runeId2 if (raiderListExist) { - raiderList = raiderList.Add(new PrivateKey().ToAddress().Serialize()); + raiderList = raiderList.Add(new PrivateKey().Address.Serialize()); } state = state.SetState(raiderListAddress, raiderList); @@ -247,7 +247,6 @@ int runeId2 BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -410,7 +409,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -527,7 +525,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + gameConfigState.WorldBossRequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); @@ -628,7 +625,6 @@ public void Execute_With_Free_Crystal_Fee() BlockIndex = blockIndex, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; diff --git a/.Lib9c.Tests/Action/Raid6Test.cs b/.Lib9c.Tests/Action/Raid6Test.cs index 6b4c18719..b377efede 100644 --- a/.Lib9c.Tests/Action/Raid6Test.cs +++ b/.Lib9c.Tests/Action/Raid6Test.cs @@ -31,8 +31,8 @@ public Raid6Test() { _sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(_sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _goldCurrency = Currency.Legacy("NCG", 2, null); @@ -199,7 +199,7 @@ int runeId2 if (raiderListExist) { - raiderList = raiderList.Add(new PrivateKey().ToAddress().Serialize()); + raiderList = raiderList.Add(new PrivateKey().Address.Serialize()); } state = state.SetState(raiderListAddress, raiderList); @@ -247,7 +247,6 @@ int runeId2 BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; @@ -410,7 +409,6 @@ Dictionary rewardMap BlockIndex = blockIndex + executeOffset, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, })); } @@ -527,7 +525,6 @@ Dictionary rewardMap BlockIndex = worldBossRow.StartedBlockIndex + gameConfigState.WorldBossRequiredInterval, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }); @@ -628,7 +625,6 @@ public void Execute_With_Free_Crystal_Fee() BlockIndex = blockIndex, PreviousState = state, RandomSeed = randomSeed, - Rehearsal = false, Signer = _agentAddress, }; diff --git a/.Lib9c.Tests/Action/RankingBattle0Test.cs b/.Lib9c.Tests/Action/RankingBattle0Test.cs index 553780f32..45a2f1c30 100644 --- a/.Lib9c.Tests/Action/RankingBattle0Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle0Test.cs @@ -41,7 +41,7 @@ public RankingBattle0Test() _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -77,7 +77,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -135,7 +135,6 @@ public void Execute() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarState(_avatar1Address); @@ -169,7 +168,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -186,14 +184,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -214,7 +212,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -249,7 +246,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -281,7 +277,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -327,7 +322,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException( PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -368,7 +362,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -419,7 +412,6 @@ public void ExecuteThrowNotEnoughFungibleAssetValueException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } diff --git a/.Lib9c.Tests/Action/RankingBattle10Test.cs b/.Lib9c.Tests/Action/RankingBattle10Test.cs index e142848af..f7d07c4f8 100644 --- a/.Lib9c.Tests/Action/RankingBattle10Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle10Test.cs @@ -52,7 +52,7 @@ public RankingBattle10Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -93,7 +93,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -215,7 +215,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -269,7 +268,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -286,14 +284,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -313,7 +311,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -347,7 +344,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -378,7 +374,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -411,7 +406,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -451,7 +445,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -506,7 +499,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle11Test.cs b/.Lib9c.Tests/Action/RankingBattle11Test.cs index 112d594f6..ff9b1aba9 100644 --- a/.Lib9c.Tests/Action/RankingBattle11Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle11Test.cs @@ -55,7 +55,7 @@ public RankingBattle11Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -88,7 +88,7 @@ public RankingBattle11Test(ITestOutputHelper outputHelper) var arenaSheetAddress = Addresses.GetSheetAddress(); _arenaSheetState = _initialState.GetState(arenaSheetAddress); - _initialState = _initialState.SetState(arenaSheetAddress, null); + _initialState = _initialState.SetNull(arenaSheetAddress); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() @@ -101,7 +101,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -198,7 +198,6 @@ public void Execute() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, BlockIndex = RankingBattle11.UpdateTargetBlockIndex, }); @@ -340,7 +339,6 @@ public void Execute_Backward_Compatible(bool isNew, bool avatarBackward, bool en PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, BlockIndex = RankingBattle11.UpdateTargetBlockIndex - 1, }); @@ -395,7 +393,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -412,14 +409,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -439,7 +436,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -473,7 +469,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -504,7 +499,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -537,7 +531,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -577,7 +570,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -708,7 +700,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } @@ -744,7 +735,6 @@ public void Execute_ActionObsoletedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } diff --git a/.Lib9c.Tests/Action/RankingBattle2Test.cs b/.Lib9c.Tests/Action/RankingBattle2Test.cs index 72e673c4d..e8aacbdd7 100644 --- a/.Lib9c.Tests/Action/RankingBattle2Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle2Test.cs @@ -41,7 +41,7 @@ public RankingBattle2Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = RankingBattle11Test.GetAgentStateWithAvatarState( sheets, @@ -128,7 +128,6 @@ public void Execute() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarState(_avatar1Address); @@ -162,7 +161,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -179,14 +177,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -207,7 +205,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -242,7 +239,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -274,7 +270,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -320,7 +315,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException( PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -361,7 +355,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -383,7 +376,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); diff --git a/.Lib9c.Tests/Action/RankingBattle3Test.cs b/.Lib9c.Tests/Action/RankingBattle3Test.cs index c408f0ba1..769bf4a98 100644 --- a/.Lib9c.Tests/Action/RankingBattle3Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle3Test.cs @@ -41,7 +41,7 @@ public RankingBattle3Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = RankingBattle11Test.GetAgentStateWithAvatarState( sheets, @@ -128,7 +128,6 @@ public void Execute() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarState(_avatar1Address); @@ -162,7 +161,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -179,14 +177,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -207,7 +205,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -242,7 +239,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -274,7 +270,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -320,7 +315,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException( PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -361,7 +355,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -383,7 +376,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); @@ -448,7 +440,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle4Test.cs b/.Lib9c.Tests/Action/RankingBattle4Test.cs index 3a1946b65..fc97a4f22 100644 --- a/.Lib9c.Tests/Action/RankingBattle4Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle4Test.cs @@ -42,7 +42,7 @@ public RankingBattle4Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -83,7 +83,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -165,7 +165,6 @@ public void Execute(bool isNew) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarState(_avatar1Address); @@ -198,7 +197,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -215,14 +213,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -243,7 +241,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -278,7 +275,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -310,7 +306,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -344,7 +339,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -385,7 +379,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -407,7 +400,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); @@ -472,7 +464,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle5Test.cs b/.Lib9c.Tests/Action/RankingBattle5Test.cs index 31eb8a4b6..b7cb46a09 100644 --- a/.Lib9c.Tests/Action/RankingBattle5Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle5Test.cs @@ -44,7 +44,7 @@ public RankingBattle5Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -85,7 +85,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -195,7 +195,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -228,7 +227,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -245,14 +243,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -273,7 +271,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -308,7 +305,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -340,7 +336,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -374,7 +369,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -415,7 +409,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -437,7 +430,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); @@ -502,7 +494,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle6Test.cs b/.Lib9c.Tests/Action/RankingBattle6Test.cs index 870870629..ace7575fd 100644 --- a/.Lib9c.Tests/Action/RankingBattle6Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle6Test.cs @@ -44,7 +44,7 @@ public RankingBattle6Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -85,7 +85,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -195,7 +195,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -228,7 +227,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -245,14 +243,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -273,7 +271,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -308,7 +305,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -340,7 +336,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -374,7 +369,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -415,7 +409,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -437,7 +430,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); @@ -502,7 +494,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle7Test.cs b/.Lib9c.Tests/Action/RankingBattle7Test.cs index 6a28b3920..d3e82f42e 100644 --- a/.Lib9c.Tests/Action/RankingBattle7Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle7Test.cs @@ -44,7 +44,7 @@ public RankingBattle7Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -85,7 +85,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -195,7 +195,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -228,7 +227,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -245,14 +243,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -273,7 +271,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -308,7 +305,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -340,7 +336,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -374,7 +369,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -415,7 +409,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -437,7 +430,6 @@ public void SerializeWithDotnetAPI() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var formatter = new BinaryFormatter(); @@ -502,7 +494,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle8Test.cs b/.Lib9c.Tests/Action/RankingBattle8Test.cs index f8c710ad0..84c27666d 100644 --- a/.Lib9c.Tests/Action/RankingBattle8Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle8Test.cs @@ -45,7 +45,7 @@ public RankingBattle8Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -86,7 +86,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -210,7 +210,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -265,7 +264,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -282,14 +280,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -310,7 +308,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -345,7 +342,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -377,7 +373,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -411,7 +406,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -452,7 +446,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -510,7 +503,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattle9Test.cs b/.Lib9c.Tests/Action/RankingBattle9Test.cs index 181bf157c..92857c4d4 100644 --- a/.Lib9c.Tests/Action/RankingBattle9Test.cs +++ b/.Lib9c.Tests/Action/RankingBattle9Test.cs @@ -45,7 +45,7 @@ public RankingBattle9Test(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -86,7 +86,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -210,7 +210,6 @@ public void Execute(bool isNew, bool avatarBackward, bool enemyBackward) PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address); @@ -265,7 +264,6 @@ public void ExecuteThrowInvalidAddressException() PreviousState = _initialState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -282,14 +280,14 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) switch (caseIndex) { case 0: - signer = new PrivateKey().ToAddress(); + signer = new PrivateKey().Address; avatarAddress = _avatar1Address; enemyAddress = _avatar2Address; break; case 1: signer = _agent1Address; avatarAddress = _avatar1Address; - enemyAddress = new PrivateKey().ToAddress(); + enemyAddress = new PrivateKey().Address; break; } @@ -310,7 +308,6 @@ public void ExecuteThrowFailedLoadStateException(int caseIndex) PreviousState = _initialState, Signer = signer, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -345,7 +342,6 @@ public void ExecuteThrowNotEnoughClearedStageLevelException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -377,7 +373,6 @@ public void ExecuteThrowWeeklyArenaStateAlreadyEndedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -411,7 +406,6 @@ public void ExecuteThrowWeeklyArenaStateNotContainsAvatarAddressException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -452,7 +446,6 @@ public void ExecuteThrowNotEnoughWeeklyArenaChallengeCountException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } @@ -510,7 +503,6 @@ public void MultipleEquipmentTest(ItemSubType type, int maxCount) PreviousState = state, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, })); } } diff --git a/.Lib9c.Tests/Action/RankingBattleTest.cs b/.Lib9c.Tests/Action/RankingBattleTest.cs index 9ad2abc37..2c3dc0d7a 100644 --- a/.Lib9c.Tests/Action/RankingBattleTest.cs +++ b/.Lib9c.Tests/Action/RankingBattleTest.cs @@ -50,7 +50,7 @@ public RankingBattleTest(ITestOutputHelper outputHelper) _tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var (agent1State, avatar1State) = GetAgentStateWithAvatarState( sheets, @@ -111,7 +111,7 @@ public static (AgentState AgentState, AvatarState AvatarState) GetAgentStateWith TableSheets tableSheets, Address rankingMapAddress) { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -170,7 +170,6 @@ public void ExecuteActionObsoletedException() PreviousState = previousState, Signer = _agent1Address, RandomSeed = 0, - Rehearsal = false, }); }); } diff --git a/.Lib9c.Tests/Action/RapidCombination0Test.cs b/.Lib9c.Tests/Action/RapidCombination0Test.cs index bdf19a804..85456b5fb 100644 --- a/.Lib9c.Tests/Action/RapidCombination0Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination0Test.cs @@ -39,10 +39,10 @@ public RapidCombination0Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination2Test.cs b/.Lib9c.Tests/Action/RapidCombination2Test.cs index 9af19b749..1a8094206 100644 --- a/.Lib9c.Tests/Action/RapidCombination2Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination2Test.cs @@ -39,10 +39,10 @@ public RapidCombination2Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination3Test.cs b/.Lib9c.Tests/Action/RapidCombination3Test.cs index 8bc2a4553..e69092962 100644 --- a/.Lib9c.Tests/Action/RapidCombination3Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination3Test.cs @@ -39,10 +39,10 @@ public RapidCombination3Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination4Test.cs b/.Lib9c.Tests/Action/RapidCombination4Test.cs index ad00e974e..9874e37b9 100644 --- a/.Lib9c.Tests/Action/RapidCombination4Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination4Test.cs @@ -41,10 +41,10 @@ public RapidCombination4Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination5Test.cs b/.Lib9c.Tests/Action/RapidCombination5Test.cs index 74d435df6..0f35acdc2 100644 --- a/.Lib9c.Tests/Action/RapidCombination5Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination5Test.cs @@ -41,10 +41,10 @@ public RapidCombination5Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination6Test.cs b/.Lib9c.Tests/Action/RapidCombination6Test.cs index 8661ecc2a..d43a6dea8 100644 --- a/.Lib9c.Tests/Action/RapidCombination6Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination6Test.cs @@ -43,10 +43,10 @@ public RapidCombination6Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination7Test.cs b/.Lib9c.Tests/Action/RapidCombination7Test.cs index 4b3e410f8..de60d1dc1 100644 --- a/.Lib9c.Tests/Action/RapidCombination7Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination7Test.cs @@ -43,10 +43,10 @@ public RapidCombination7Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination8Test.cs b/.Lib9c.Tests/Action/RapidCombination8Test.cs index e7b0bf69c..52f0bd614 100644 --- a/.Lib9c.Tests/Action/RapidCombination8Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination8Test.cs @@ -45,10 +45,10 @@ public RapidCombination8Test() _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/RapidCombination9Test.cs b/.Lib9c.Tests/Action/RapidCombination9Test.cs index feed6308f..25833ae3d 100644 --- a/.Lib9c.Tests/Action/RapidCombination9Test.cs +++ b/.Lib9c.Tests/Action/RapidCombination9Test.cs @@ -60,10 +60,10 @@ public RapidCombination9Test() _initialState.SetState(Addresses.TableSheet.Derive(key), value.Serialize()); } - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, diff --git a/.Lib9c.Tests/Action/ReRegisterProduct0Test.cs b/.Lib9c.Tests/Action/ReRegisterProduct0Test.cs index 65d5c1566..326ebdebc 100644 --- a/.Lib9c.Tests/Action/ReRegisterProduct0Test.cs +++ b/.Lib9c.Tests/Action/ReRegisterProduct0Test.cs @@ -57,10 +57,10 @@ public ReRegisterProduct0Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); _avatarState = new AvatarState( _avatarAddress, @@ -236,7 +236,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); @@ -283,7 +282,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/ReRegisterProductTest.cs b/.Lib9c.Tests/Action/ReRegisterProductTest.cs index f240de2b7..544d143e9 100644 --- a/.Lib9c.Tests/Action/ReRegisterProductTest.cs +++ b/.Lib9c.Tests/Action/ReRegisterProductTest.cs @@ -57,10 +57,10 @@ public ReRegisterProductTest(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); _avatarState = new AvatarState( _avatarAddress, @@ -236,7 +236,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); @@ -283,7 +282,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/RedeemCode0Test.cs b/.Lib9c.Tests/Action/RedeemCode0Test.cs index 1e3cb7bb3..55bc78664 100644 --- a/.Lib9c.Tests/Action/RedeemCode0Test.cs +++ b/.Lib9c.Tests/Action/RedeemCode0Test.cs @@ -93,7 +93,6 @@ public void Execute() BlockIndex = 1, Miner = default, PreviousState = initialState, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/RedeemCodeTest.cs b/.Lib9c.Tests/Action/RedeemCodeTest.cs index 63a732fa1..d84c25057 100644 --- a/.Lib9c.Tests/Action/RedeemCodeTest.cs +++ b/.Lib9c.Tests/Action/RedeemCodeTest.cs @@ -108,7 +108,6 @@ public void Execute(bool backward) BlockIndex = 1, Miner = default, PreviousState = initialState, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/RegisterProduct0Test.cs b/.Lib9c.Tests/Action/RegisterProduct0Test.cs index f1c9a16a4..83c6997f0 100644 --- a/.Lib9c.Tests/Action/RegisterProduct0Test.cs +++ b/.Lib9c.Tests/Action/RegisterProduct0Test.cs @@ -34,9 +34,9 @@ public class RegisterProduct0Test public RegisterProduct0Test() { - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; _tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); _avatarState = new AvatarState( @@ -77,11 +77,11 @@ public static IEnumerable Execute_Validate_MemberData() { new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, new AssetInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, }, Exc = typeof(InvalidAddressException), diff --git a/.Lib9c.Tests/Action/RegisterProduct2Test.cs b/.Lib9c.Tests/Action/RegisterProduct2Test.cs index e6ef9b82f..fa54caa94 100644 --- a/.Lib9c.Tests/Action/RegisterProduct2Test.cs +++ b/.Lib9c.Tests/Action/RegisterProduct2Test.cs @@ -34,9 +34,9 @@ public class RegisterProduct2Test public RegisterProduct2Test() { - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; _tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); _avatarState = new AvatarState( @@ -77,11 +77,11 @@ public static IEnumerable Execute_Validate_MemberData() { new RegisterInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, new AssetInfo { - AvatarAddress = new PrivateKey().ToAddress(), + AvatarAddress = new PrivateKey().Address, }, }, Exc = typeof(InvalidAddressException), diff --git a/.Lib9c.Tests/Action/RenewAdminStateTest.cs b/.Lib9c.Tests/Action/RenewAdminStateTest.cs index 652c9f308..7d7caad35 100644 --- a/.Lib9c.Tests/Action/RenewAdminStateTest.cs +++ b/.Lib9c.Tests/Action/RenewAdminStateTest.cs @@ -21,7 +21,7 @@ public RenewAdminStateTest() { _adminPrivateKey = new PrivateKey(); _validUntil = 1_500_000L; - _adminState = new AdminState(_adminPrivateKey.ToAddress(), _validUntil); + _adminState = new AdminState(_adminPrivateKey.Address, _validUntil); _stateDelta = new Account( MockState.Empty .SetState(Addresses.Admin, _adminState.Serialize())); @@ -35,7 +35,7 @@ public void Execute() var stateDelta = action.Execute(new ActionContext { PreviousState = _stateDelta, - Signer = _adminPrivateKey.ToAddress(), + Signer = _adminPrivateKey.Address, }); var adminState = new AdminState((Bencodex.Types.Dictionary)stateDelta.GetState(Addresses.Admin)); @@ -54,7 +54,7 @@ public void RejectSignerExceptAdminAddress() action.Execute(new ActionContext { PreviousState = _stateDelta, - Signer = userPrivateKey.ToAddress(), + Signer = userPrivateKey.Address, }); }); } @@ -68,7 +68,7 @@ public void RenewAdminStateEvenAlreadyExpired() { BlockIndex = _validUntil + 1, PreviousState = _stateDelta, - Signer = _adminPrivateKey.ToAddress(), + Signer = _adminPrivateKey.Address, }); var adminState = new AdminState((Bencodex.Types.Dictionary)stateDelta.GetState(Addresses.Admin)); @@ -104,7 +104,7 @@ public void CreatePendingActivationsAfterRenewAdminState() { BlockIndex = blockIndex, PreviousState = _stateDelta, - Signer = _adminPrivateKey.ToAddress(), + Signer = _adminPrivateKey.Address, })); var newValidUntil = _validUntil + 1000; @@ -113,7 +113,7 @@ public void CreatePendingActivationsAfterRenewAdminState() { BlockIndex = blockIndex, PreviousState = _stateDelta, - Signer = _adminPrivateKey.ToAddress(), + Signer = _adminPrivateKey.Address, }); // After 100 blocks. @@ -124,7 +124,7 @@ public void CreatePendingActivationsAfterRenewAdminState() { BlockIndex = blockIndex, PreviousState = stateDelta, - Signer = _adminPrivateKey.ToAddress(), + Signer = _adminPrivateKey.Address, }); Address expectedPendingActivationStateAddress = diff --git a/.Lib9c.Tests/Action/RequestPledgeTest.cs b/.Lib9c.Tests/Action/RequestPledgeTest.cs index cf5a34f82..f61f56b56 100644 --- a/.Lib9c.Tests/Action/RequestPledgeTest.cs +++ b/.Lib9c.Tests/Action/RequestPledgeTest.cs @@ -18,10 +18,10 @@ public class RequestPledgeTest public void Execute(int contractedMead) { Currency mead = Currencies.Mead; - Address patron = new PrivateKey().ToAddress(); + Address patron = new PrivateKey().Address; var context = new ActionContext(); IAccount states = new Account(MockState.Empty).MintAsset(context, patron, 2 * mead); - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var action = new RequestPledge { AgentAddress = address, @@ -48,8 +48,8 @@ public void Execute(int contractedMead) [Fact] public void Execute_Throw_AlreadyContractedException() { - Address patron = new PrivateKey().ToAddress(); - var address = new PrivateKey().ToAddress(); + Address patron = new PrivateKey().Address; + var address = new PrivateKey().Address; Address contractAddress = address.GetPledgeAddress(); IAccount states = new Account(MockState.Empty).SetState(contractAddress, List.Empty); var action = new RequestPledge diff --git a/.Lib9c.Tests/Action/RewardGoldTest.cs b/.Lib9c.Tests/Action/RewardGoldTest.cs index 0563c25aa..63f8c7d92 100644 --- a/.Lib9c.Tests/Action/RewardGoldTest.cs +++ b/.Lib9c.Tests/Action/RewardGoldTest.cs @@ -49,7 +49,7 @@ public RewardGoldTest() "100010,전사,S,0,300,20,10,10,90,70,12,0.8,0.4,0,3.6,2.8,2,3"); var privateKey = new PrivateKey(); - var agentAddress = privateKey.PublicKey.ToAddress(); + var agentAddress = privateKey.PublicKey.Address; var avatarAddress = agentAddress.Derive("avatar"); _tableSheets = new TableSheets(sheets); @@ -64,7 +64,7 @@ public RewardGoldTest() ); _avatarState2 = new AvatarState( - new PrivateKey().ToAddress(), + new PrivateKey().Address, agentAddress, 0, _tableSheets.GetAvatarSheets(), @@ -98,9 +98,9 @@ public void WeeklyArenaRankingBoard(bool resetCount, bool updateNext) ArenaScoreHelper.GetScoreV4); var gameConfigState = new GameConfigState(); gameConfigState.Set(_tableSheets.GameConfigSheet); - var state = _baseState + IAccount state = new Account(_baseState .SetState(weekly.address, weekly.Serialize()) - .SetState(gameConfigState.address, gameConfigState.Serialize()); + .SetState(gameConfigState.address, gameConfigState.Serialize())); var blockIndex = 0; if (resetCount) @@ -114,9 +114,9 @@ public void WeeklyArenaRankingBoard(bool resetCount, bool updateNext) blockIndex = gameConfigState.WeeklyArenaInterval; // Avoid NRE in test case. var nextWeekly = new WeeklyArenaState(1); - state = state + state = new Account(state .SetState(weekly.address, weekly.Serialize()) - .SetState(nextWeekly.address, nextWeekly.Serialize()); + .SetState(nextWeekly.address, nextWeekly.Serialize())); } Assert.False(weekly.Ended); @@ -142,12 +142,28 @@ public void WeeklyArenaRankingBoard(bool resetCount, bool updateNext) var currentWeeklyState = nextState.GetWeeklyArenaState(0); var nextWeeklyState = nextState.GetWeeklyArenaState(1); - Assert.Contains(WeeklyArenaState.DeriveAddress(0), nextState.Delta.UpdatedAddresses); - Assert.Contains(WeeklyArenaState.DeriveAddress(1), nextState.Delta.UpdatedAddresses); + if (resetCount || updateNext) + { + Assert.NotEqual( + state.GetState(WeeklyArenaState.DeriveAddress(0)), + nextState.GetState(WeeklyArenaState.DeriveAddress(0))); + } + else + { + Assert.Equal( + state.GetState(WeeklyArenaState.DeriveAddress(0)), + nextState.GetState(WeeklyArenaState.DeriveAddress(0))); + } + + Assert.NotEqual( + state.GetState(WeeklyArenaState.DeriveAddress(1)), + nextState.GetState(WeeklyArenaState.DeriveAddress(1))); if (updateNext) { - Assert.Contains(WeeklyArenaState.DeriveAddress(2), nextState.Delta.UpdatedAddresses); + Assert.NotEqual( + state.GetState(WeeklyArenaState.DeriveAddress(2)), + nextState.GetState(WeeklyArenaState.DeriveAddress(2))); Assert.Equal(blockIndex, nextWeeklyState.ResetIndex); } @@ -497,7 +513,7 @@ public async Task Genesis_StateRootHash(bool mainnet) else { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var activatedAccounts = ImmutableHashSet
.Empty; var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); @@ -565,8 +581,8 @@ public async Task Genesis_StateRootHash(bool mainnet) [InlineData(1, 0)] public void TransferMead(int patronMead, int balance) { - var agentAddress = new PrivateKey().ToAddress(); - var patronAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var patronAddress = new PrivateKey().Address; var contractAddress = agentAddress.GetPledgeAddress(); IActionContext context = new ActionContext(); IAccount states = new Account(MockState.Empty) diff --git a/.Lib9c.Tests/Action/RuneEnhancement0Test.cs b/.Lib9c.Tests/Action/RuneEnhancement0Test.cs index 70db188fc..c3c658353 100644 --- a/.Lib9c.Tests/Action/RuneEnhancement0Test.cs +++ b/.Lib9c.Tests/Action/RuneEnhancement0Test.cs @@ -28,8 +28,8 @@ public RuneEnhancement0Test() [InlineData(1)] public void Execute(int seed) { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values @@ -120,7 +120,6 @@ public void Execute(int seed) BlockIndex = blockIndex, PreviousState = state, RandomSeed = rand.Seed, - Rehearsal = false, Signer = agentAddress, }; @@ -181,8 +180,8 @@ public void Execute(int seed) [Fact] public void Execute_RuneCostNotFoundException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values @@ -234,8 +233,8 @@ public void Execute_RuneCostNotFoundException() [Fact] public void Execute_RuneCostDataNotFoundException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values @@ -302,8 +301,8 @@ public void Execute_RuneCostDataNotFoundException() [InlineData(true, false, true)] public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, bool rune) { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values @@ -384,7 +383,6 @@ public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -416,8 +414,8 @@ public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, [Fact] public void Execute_TryCountIsZeroException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values diff --git a/.Lib9c.Tests/Action/RuneEnhancementTest.cs b/.Lib9c.Tests/Action/RuneEnhancementTest.cs index 48bdd085f..f3c1466b1 100644 --- a/.Lib9c.Tests/Action/RuneEnhancementTest.cs +++ b/.Lib9c.Tests/Action/RuneEnhancementTest.cs @@ -29,8 +29,8 @@ public RuneEnhancementTest() [InlineData(1)] public void Execute(int seed) { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var inventoryAddress = avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddress = avatarAddress.Derive(LegacyWorldInformationKey); var questListAddress = avatarAddress.Derive(LegacyQuestListKey); @@ -130,7 +130,6 @@ public void Execute(int seed) BlockIndex = blockIndex, PreviousState = state, RandomSeed = rand.Seed, - Rehearsal = false, Signer = agentAddress, }; @@ -191,8 +190,8 @@ public void Execute(int seed) [Fact] public void Execute_RuneCostNotFoundException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var inventoryAddress = avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddress = avatarAddress.Derive(LegacyWorldInformationKey); var questListAddress = avatarAddress.Derive(LegacyQuestListKey); @@ -253,8 +252,8 @@ public void Execute_RuneCostNotFoundException() [Fact] public void Execute_RuneCostDataNotFoundException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var inventoryAddress = avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddress = avatarAddress.Derive(LegacyWorldInformationKey); var questListAddress = avatarAddress.Derive(LegacyQuestListKey); @@ -330,8 +329,8 @@ public void Execute_RuneCostDataNotFoundException() [InlineData(true, false, true)] public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, bool rune) { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var inventoryAddress = avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddress = avatarAddress.Derive(LegacyWorldInformationKey); var questListAddress = avatarAddress.Derive(LegacyQuestListKey); @@ -421,7 +420,6 @@ public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -453,8 +451,8 @@ public void Execute_NotEnoughFungibleAssetValueException(bool ncg, bool crystal, [Fact] public void Execute_TryCountIsZeroException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var inventoryAddress = avatarAddress.Derive(LegacyInventoryKey); var worldInformationAddress = avatarAddress.Derive(LegacyWorldInformationKey); var questListAddress = avatarAddress.Derive(LegacyQuestListKey); @@ -516,8 +514,8 @@ public void Execute_TryCountIsZeroException() [Fact] public void Execute_FailedLoadStateException() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); var blockIndex = tableSheets.WorldBossListSheet.Values diff --git a/.Lib9c.Tests/Action/Scenario/ArenaScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/ArenaScenarioTest.cs index 4ba759280..64ec2fc03 100644 --- a/.Lib9c.Tests/Action/Scenario/ArenaScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/ArenaScenarioTest.cs @@ -53,7 +53,7 @@ public ArenaScenarioTest(ITestOutputHelper outputHelper) _ncg = Currency.Legacy("NCG", 2, null); #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(_ncg); - _rankingMapAddress = new PrivateKey().ToAddress(); + _rankingMapAddress = new PrivateKey().Address; var clearStageId = Math.Max( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); @@ -116,7 +116,6 @@ public IAccount JoinArena( PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = roundData.StartBlockIndex, }); return _state; @@ -147,7 +146,6 @@ public IAccount BattleArena( PreviousState = _state, Signer = signer, RandomSeed = random.Seed, - Rehearsal = false, BlockIndex = blockIndex, }); return _state; @@ -159,7 +157,7 @@ public IAccount BattleArena( _tableSheets.StageSheet.First?.Id ?? 1, GameConfig.RequireClearedStageLevel.ActionsInRankingBoard); - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); var avatarAddress = agentAddress.Derive("avatar"); @@ -364,7 +362,7 @@ private bool TryGetTarget( } } - targetAddress = new PrivateKey().ToAddress(); + targetAddress = new PrivateKey().Address; return false; } diff --git a/.Lib9c.Tests/Action/Scenario/AuraScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/AuraScenarioTest.cs index 86f14af05..4085442ce 100644 --- a/.Lib9c.Tests/Action/Scenario/AuraScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/AuraScenarioTest.cs @@ -35,10 +35,10 @@ public class AuraScenarioTest public AuraScenarioTest() { - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - _enemyAvatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + _enemyAvatarAddress = new PrivateKey().Address; var rankingMapAddress = _avatarAddress.Derive("ranking_map"); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); diff --git a/.Lib9c.Tests/Action/Scenario/MarketScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/MarketScenarioTest.cs index 70f3d3f84..d58d01530 100644 --- a/.Lib9c.Tests/Action/Scenario/MarketScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/MarketScenarioTest.cs @@ -44,10 +44,10 @@ public MarketScenarioTest(ITestOutputHelper outputHelper) .WriteTo.TestOutput(outputHelper) .CreateLogger(); - _sellerAgentAddress = new PrivateKey().ToAddress(); + _sellerAgentAddress = new PrivateKey().Address; var agentState = new AgentState(_sellerAgentAddress); - _sellerAvatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _sellerAvatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); _sellerAvatarState = new AvatarState( @@ -65,9 +65,9 @@ public MarketScenarioTest(ITestOutputHelper outputHelper) }; agentState.avatarAddresses[0] = _sellerAvatarAddress; - _sellerAgentAddress2 = new PrivateKey().ToAddress(); + _sellerAgentAddress2 = new PrivateKey().Address; var agentState2 = new AgentState(_sellerAgentAddress2); - _sellerAvatarAddress2 = new PrivateKey().ToAddress(); + _sellerAvatarAddress2 = new PrivateKey().Address; _sellerAvatarState2 = new AvatarState( _sellerAvatarAddress2, _sellerAgentAddress2, @@ -83,9 +83,9 @@ public MarketScenarioTest(ITestOutputHelper outputHelper) }; agentState2.avatarAddresses[0] = _sellerAvatarAddress2; - _buyerAgentAddress = new PrivateKey().ToAddress(); + _buyerAgentAddress = new PrivateKey().Address; var agentState3 = new AgentState(_buyerAgentAddress); - _buyerAvatarAddress = new PrivateKey().ToAddress(); + _buyerAvatarAddress = new PrivateKey().Address; var buyerAvatarState = new AvatarState( _buyerAvatarAddress, _buyerAgentAddress, diff --git a/.Lib9c.Tests/Action/Scenario/MeadScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/MeadScenarioTest.cs index 45ad143a2..a802dfba7 100644 --- a/.Lib9c.Tests/Action/Scenario/MeadScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/MeadScenarioTest.cs @@ -17,11 +17,11 @@ public class MeadScenarioTest public void Contract() { Currency mead = Currencies.Mead; - var patron = new PrivateKey().ToAddress(); + var patron = new PrivateKey().Address; IActionContext context = new ActionContext(); IAccount states = new Account(MockState.Empty).MintAsset(context, patron, 10 * mead); - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var requestPledge = new RequestPledge { AgentAddress = agentAddress, diff --git a/.Lib9c.Tests/Action/Scenario/RuneScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/RuneScenarioTest.cs index 694d31b12..52bbecc37 100644 --- a/.Lib9c.Tests/Action/Scenario/RuneScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/RuneScenarioTest.cs @@ -21,9 +21,9 @@ public class RuneScenarioTest [Fact] public void Craft_And_Equip() { - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var rankingMapAddress = avatarAddress.Derive("ranking_map"); var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); diff --git a/.Lib9c.Tests/Action/Scenario/SellAndCancellationAndSellTest.cs b/.Lib9c.Tests/Action/Scenario/SellAndCancellationAndSellTest.cs index 55dfd1d9c..0981ab85e 100644 --- a/.Lib9c.Tests/Action/Scenario/SellAndCancellationAndSellTest.cs +++ b/.Lib9c.Tests/Action/Scenario/SellAndCancellationAndSellTest.cs @@ -40,7 +40,7 @@ public SellAndCancellationAndSellTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var gameConfigState = new GameConfigState(sheets[nameof(GameConfigSheet)]); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; _avatarAddress = _agentAddress.Derive("avatar"); var agentState = new AgentState(_agentAddress); agentState.avatarAddresses[0] = _avatarAddress; @@ -114,7 +114,6 @@ public void Execute_With_TradableMaterial() PreviousState = nextStates, BlockIndex = sellBlockIndex, RandomSeed = random.Seed, - Rehearsal = false, }); // TODO: Check state.. inventory, orders.. } @@ -142,7 +141,6 @@ public void Execute_With_TradableMaterial() PreviousState = nextStates, BlockIndex = sellBlockIndex + 1L, RandomSeed = random.Seed, - Rehearsal = false, }); // TODO: Check state.. inventory, orders.. } @@ -163,7 +161,6 @@ public void Execute_With_TradableMaterial() PreviousState = nextStates, BlockIndex = sellBlockIndex + 2L, RandomSeed = random.Seed, - Rehearsal = false, }); // Check inventory does not have ap stones. diff --git a/.Lib9c.Tests/Action/Scenario/StakeAndClaimScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/StakeAndClaimScenarioTest.cs index 593b1eb32..58e7d5d21 100644 --- a/.Lib9c.Tests/Action/Scenario/StakeAndClaimScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/StakeAndClaimScenarioTest.cs @@ -165,7 +165,6 @@ private static IAccount MintAsset( PreviousState = state, Signer = Addresses.Admin, BlockIndex = blockIndex, - Rehearsal = false, }, recipient, amount); @@ -183,7 +182,6 @@ private static IAccount Stake2( PreviousState = state, Signer = agentAddr, BlockIndex = blockIndex, - Rehearsal = false, }); } @@ -199,7 +197,6 @@ private static IAccount Stake3( PreviousState = state, Signer = agentAddr, BlockIndex = blockIndex, - Rehearsal = false, }); } @@ -215,7 +212,6 @@ private static IAccount ClaimStakeReward9( PreviousState = state, Signer = agentAddr, BlockIndex = blockIndex, - Rehearsal = false, }); } diff --git a/.Lib9c.Tests/Action/Scenario/StakeAndClaimStakeReward2ScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/StakeAndClaimStakeReward2ScenarioTest.cs index c39785cc4..74afc3852 100644 --- a/.Lib9c.Tests/Action/Scenario/StakeAndClaimStakeReward2ScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/StakeAndClaimStakeReward2ScenarioTest.cs @@ -59,10 +59,10 @@ public StakeAndClaimStakeReward2ScenarioTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(_currency); - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; var stakeStateAddress = StakeState.DeriveAddress(_signerAddress); var agentState = new AgentState(_signerAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; var rankingMapAddress = _avatarAddress.Derive("ranking_map"); agentState.avatarAddresses.Add(0, _avatarAddress); var avatarState = new AvatarState( diff --git a/.Lib9c.Tests/Action/Scenario/WorldUnlockScenarioTest.cs b/.Lib9c.Tests/Action/Scenario/WorldUnlockScenarioTest.cs index 2b6d63213..88c9330d4 100644 --- a/.Lib9c.Tests/Action/Scenario/WorldUnlockScenarioTest.cs +++ b/.Lib9c.Tests/Action/Scenario/WorldUnlockScenarioTest.cs @@ -29,7 +29,7 @@ public WorldUnlockScenarioTest() _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -106,7 +106,6 @@ public void UnlockWorldByHackAndSlashAfterPatchTableWithAddRow( PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); Assert.True(hackAndSlash.Result.IsClear); @@ -138,7 +137,6 @@ public void UnlockWorldByHackAndSlashAfterPatchTableWithAddRow( PreviousState = nextState, Signer = AdminState.Address, RandomSeed = 0, - Rehearsal = false, }); var nextTableCsv = nextState.GetSheetCsv(); @@ -149,7 +147,6 @@ public void UnlockWorldByHackAndSlashAfterPatchTableWithAddRow( PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); Assert.True(hackAndSlash.Result.IsClear); @@ -228,7 +225,6 @@ public void UnlockWorldByMimisbrunnrBattleAfterPatchTableWithChangeRow( PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); }); @@ -248,7 +244,6 @@ public void UnlockWorldByMimisbrunnrBattleAfterPatchTableWithChangeRow( PreviousState = nextState, Signer = AdminState.Address, RandomSeed = 0, - Rehearsal = false, }); var nextTableCsv = nextState.GetSheetCsv(); @@ -259,7 +254,6 @@ public void UnlockWorldByMimisbrunnrBattleAfterPatchTableWithChangeRow( PreviousState = nextState, Signer = _agentAddress, RandomSeed = 0, - Rehearsal = false, }); avatarState = nextState.GetAvatarState(_avatarAddress); diff --git a/.Lib9c.Tests/Action/SecureMiningRewardTest.cs b/.Lib9c.Tests/Action/SecureMiningRewardTest.cs index 7e4c49c1d..7b62d3eb8 100644 --- a/.Lib9c.Tests/Action/SecureMiningRewardTest.cs +++ b/.Lib9c.Tests/Action/SecureMiningRewardTest.cs @@ -51,7 +51,6 @@ public void Execute() { PreviousState = _previousState, Signer = _admin, - Rehearsal = false, BlockIndex = 1, } ); @@ -81,7 +80,6 @@ public void Execute_InvalidSigner() { PreviousState = _previousState, Signer = invalidSigner, - Rehearsal = false, BlockIndex = 1, } )); diff --git a/.Lib9c.Tests/Action/Sell0Test.cs b/.Lib9c.Tests/Action/Sell0Test.cs index 50dff16b7..ff77f3d83 100644 --- a/.Lib9c.Tests/Action/Sell0Test.cs +++ b/.Lib9c.Tests/Action/Sell0Test.cs @@ -48,10 +48,10 @@ public Sell0Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -104,7 +104,6 @@ public void Execute() { BlockIndex = 0, PreviousState = _initialState, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell10Test.cs b/.Lib9c.Tests/Action/Sell10Test.cs index 16819ff04..fbb4adaf9 100644 --- a/.Lib9c.Tests/Action/Sell10Test.cs +++ b/.Lib9c.Tests/Action/Sell10Test.cs @@ -56,10 +56,10 @@ public Sell10Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -164,7 +164,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell11Test.cs b/.Lib9c.Tests/Action/Sell11Test.cs index 3fa850351..a2f62134b 100644 --- a/.Lib9c.Tests/Action/Sell11Test.cs +++ b/.Lib9c.Tests/Action/Sell11Test.cs @@ -56,10 +56,10 @@ public Sell11Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -164,7 +164,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell2Test.cs b/.Lib9c.Tests/Action/Sell2Test.cs index b79719436..b745d5300 100644 --- a/.Lib9c.Tests/Action/Sell2Test.cs +++ b/.Lib9c.Tests/Action/Sell2Test.cs @@ -48,10 +48,10 @@ public Sell2Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -121,7 +121,6 @@ public void Execute() { BlockIndex = 0, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, }; ctx.SetRandom(random); diff --git a/.Lib9c.Tests/Action/Sell3Test.cs b/.Lib9c.Tests/Action/Sell3Test.cs index eef9d02c1..d91450ac8 100644 --- a/.Lib9c.Tests/Action/Sell3Test.cs +++ b/.Lib9c.Tests/Action/Sell3Test.cs @@ -50,10 +50,10 @@ public Sell3Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -132,7 +132,6 @@ public void Execute() { BlockIndex = 0, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, }; ctx.SetRandom(random); diff --git a/.Lib9c.Tests/Action/Sell4Test.cs b/.Lib9c.Tests/Action/Sell4Test.cs index 1ca54164d..afec08473 100644 --- a/.Lib9c.Tests/Action/Sell4Test.cs +++ b/.Lib9c.Tests/Action/Sell4Test.cs @@ -53,10 +53,10 @@ public Sell4Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -159,7 +159,6 @@ public void Execute(ItemType itemType, bool shopItemExist, int blockIndex) { BlockIndex = 1, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell5Test.cs b/.Lib9c.Tests/Action/Sell5Test.cs index b574dd77e..98f075225 100644 --- a/.Lib9c.Tests/Action/Sell5Test.cs +++ b/.Lib9c.Tests/Action/Sell5Test.cs @@ -52,10 +52,10 @@ public Sell5Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -179,7 +179,6 @@ int expectedProductsCount { BlockIndex = 1, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell6Test.cs b/.Lib9c.Tests/Action/Sell6Test.cs index d251e64b7..b7701e760 100644 --- a/.Lib9c.Tests/Action/Sell6Test.cs +++ b/.Lib9c.Tests/Action/Sell6Test.cs @@ -52,10 +52,10 @@ public Sell6Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -180,7 +180,6 @@ int expectedProductsCount { BlockIndex = 1, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); @@ -511,7 +510,6 @@ public void Execute_20210604( { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell7Test.cs b/.Lib9c.Tests/Action/Sell7Test.cs index 8db0beade..5c6be1efc 100644 --- a/.Lib9c.Tests/Action/Sell7Test.cs +++ b/.Lib9c.Tests/Action/Sell7Test.cs @@ -56,10 +56,10 @@ public Sell7Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -194,7 +194,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell8Test.cs b/.Lib9c.Tests/Action/Sell8Test.cs index 04299495e..eb2011ddc 100644 --- a/.Lib9c.Tests/Action/Sell8Test.cs +++ b/.Lib9c.Tests/Action/Sell8Test.cs @@ -56,10 +56,10 @@ public Sell8Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -194,7 +194,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Sell9Test.cs b/.Lib9c.Tests/Action/Sell9Test.cs index 295387c8d..ec6b7de05 100644 --- a/.Lib9c.Tests/Action/Sell9Test.cs +++ b/.Lib9c.Tests/Action/Sell9Test.cs @@ -56,10 +56,10 @@ public Sell9Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -164,7 +164,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/SellCancellation0Test.cs b/.Lib9c.Tests/Action/SellCancellation0Test.cs index 0671a7cbf..3a066c0c4 100644 --- a/.Lib9c.Tests/Action/SellCancellation0Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation0Test.cs @@ -43,10 +43,10 @@ public SellCancellation0Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -105,7 +105,6 @@ public void Execute() BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellation2Test.cs b/.Lib9c.Tests/Action/SellCancellation2Test.cs index ceeb63105..3e1f383ee 100644 --- a/.Lib9c.Tests/Action/SellCancellation2Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation2Test.cs @@ -45,10 +45,10 @@ public SellCancellation2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -122,7 +122,6 @@ public void Execute() BlockIndex = 0, PreviousState = _initialState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellation3Test.cs b/.Lib9c.Tests/Action/SellCancellation3Test.cs index 1a22e1591..3af69b482 100644 --- a/.Lib9c.Tests/Action/SellCancellation3Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation3Test.cs @@ -43,10 +43,10 @@ public SellCancellation3Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -132,7 +132,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); productsCount--; @@ -162,7 +161,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); productsCount--; diff --git a/.Lib9c.Tests/Action/SellCancellation4Test.cs b/.Lib9c.Tests/Action/SellCancellation4Test.cs index ed27848ef..fb77e8640 100644 --- a/.Lib9c.Tests/Action/SellCancellation4Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation4Test.cs @@ -43,10 +43,10 @@ public SellCancellation4Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 var goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -132,7 +132,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); productsCount--; @@ -162,7 +161,6 @@ public void Execute() BlockIndex = 0, PreviousState = previousStates, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); productsCount--; diff --git a/.Lib9c.Tests/Action/SellCancellation5Test.cs b/.Lib9c.Tests/Action/SellCancellation5Test.cs index 963021864..b5cd00bdb 100644 --- a/.Lib9c.Tests/Action/SellCancellation5Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation5Test.cs @@ -47,10 +47,10 @@ public SellCancellation5Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -159,7 +159,6 @@ public void Execute(ItemType itemType, string guid, bool contain) BlockIndex = 1, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellation6Test.cs b/.Lib9c.Tests/Action/SellCancellation6Test.cs index d92b37378..99c9dea96 100644 --- a/.Lib9c.Tests/Action/SellCancellation6Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation6Test.cs @@ -49,10 +49,10 @@ public SellCancellation6Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -194,7 +194,6 @@ public void Execute(ItemType itemType, string guid, bool contain, int itemCount, BlockIndex = 1, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellation7Test.cs b/.Lib9c.Tests/Action/SellCancellation7Test.cs index e7ff54683..562854645 100644 --- a/.Lib9c.Tests/Action/SellCancellation7Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation7Test.cs @@ -52,10 +52,10 @@ public SellCancellation7Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -228,7 +228,6 @@ bool backward BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellation8Test.cs b/.Lib9c.Tests/Action/SellCancellation8Test.cs index f44991a04..126064b70 100644 --- a/.Lib9c.Tests/Action/SellCancellation8Test.cs +++ b/.Lib9c.Tests/Action/SellCancellation8Test.cs @@ -52,10 +52,10 @@ public SellCancellation8Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -230,7 +230,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); @@ -640,7 +639,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellCancellationTest.cs b/.Lib9c.Tests/Action/SellCancellationTest.cs index 97c76c617..f300ee7c1 100644 --- a/.Lib9c.Tests/Action/SellCancellationTest.cs +++ b/.Lib9c.Tests/Action/SellCancellationTest.cs @@ -54,11 +54,11 @@ public SellCancellationTest(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(currency); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; _gameConfigState = new GameConfigState((Text)_tableSheets.GameConfigSheet.Serialize()); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; var avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -234,7 +234,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); @@ -262,7 +261,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); @@ -675,7 +673,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/SellTest.cs b/.Lib9c.Tests/Action/SellTest.cs index 22255b68f..4ebac7590 100644 --- a/.Lib9c.Tests/Action/SellTest.cs +++ b/.Lib9c.Tests/Action/SellTest.cs @@ -55,10 +55,10 @@ public SellTest(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -163,7 +163,6 @@ bool backward { BlockIndex = blockIndex, PreviousState = previousStates, - Rehearsal = false, Signer = _agentAddress, RandomSeed = 0, }); diff --git a/.Lib9c.Tests/Action/Snapshot/TransferAsset0SnapshotTest.cs b/.Lib9c.Tests/Action/Snapshot/TransferAsset0SnapshotTest.cs index 610e04283..c3ae23cee 100644 --- a/.Lib9c.Tests/Action/Snapshot/TransferAsset0SnapshotTest.cs +++ b/.Lib9c.Tests/Action/Snapshot/TransferAsset0SnapshotTest.cs @@ -1,12 +1,12 @@ namespace Lib9c.Tests.Action.Snapshot { - using System.Collections.Immutable; - using System.Numerics; + using System.Linq; using System.Threading.Tasks; using Bencodex.Types; using Libplanet.Action.State; using Libplanet.Common; using Libplanet.Crypto; + using Libplanet.Store; using Libplanet.Store.Trie; using Libplanet.Types.Assets; using Nekoyume.Action; @@ -46,11 +46,18 @@ public Task TransferCrystal() var recipientPrivateKey = new PrivateKey(ByteUtil.ParseHex( "f8960846e9ae4ad1c23686f74c8e5f80f22336b6f2175be21db82afa8823c92d")); - var senderAddress = senderPrivateKey.ToAddress(); - var recipientAddress = recipientPrivateKey.ToAddress(); + var senderAddress = senderPrivateKey.Address; + var recipientAddress = recipientPrivateKey.Address; var crystal = CrystalCalculator.CRYSTAL; var context = new ActionContext(); - IAccount state = new Account(MockState.Empty).MintAsset(context, senderAddress, crystal * 100); + + var stateStore = new TrieStateStore(new MemoryKeyValueStore()); + var inputTrie = stateStore.GetStateRoot(null); + IAccount state = new Account(new AccountState(inputTrie)) + .MintAsset(context, senderAddress, crystal * 100); + inputTrie = stateStore.Commit(state.Trie); + state = new Account(new AccountState(inputTrie)); + var actionContext = new ActionContext { Signer = senderAddress, @@ -59,22 +66,27 @@ public Task TransferCrystal() var action = new TransferAsset0( senderAddress, recipientAddress, - crystal * 100); + crystal * 20); + var outputState = action.Execute(actionContext); + var outputTrie = stateStore.Commit(outputState.Trie); + + var trieDiff = outputTrie.Diff(inputTrie) + .Select(elem => new object[] + { + ByteUtil.Hex(elem.Path.ByteArray), + elem.TargetValue?.ToString(), + elem.SourceValue.ToString(), + }) + .ToArray(); + var accountDiff = AccountDiff.Create(inputTrie, outputTrie); // Verifier does not handle tuples well when nested. - var summary = Verifier - .Verify(outputState) - .IgnoreMembersWithType>() - .IgnoreMembersWithType>() - .IgnoreMembersWithType() - .UseTypeName((Text)GetActionTypeId()) - .UseMethodName($"{nameof(TransferCrystal)}.summary"); - var fungibles = Verifier - .Verify(outputState.Delta.Fungibles) + var diff = Verifier + .Verify(trieDiff) .UseTypeName((Text)GetActionTypeId()) - .UseMethodName($"{nameof(TransferCrystal)}.fungibles"); - return Task.WhenAll(summary, fungibles); + .UseMethodName($"{nameof(TransferCrystal)}.diff"); + return diff; } [Fact] @@ -86,11 +98,18 @@ public Task TransferWithMemo() var recipientPrivateKey = new PrivateKey(ByteUtil.ParseHex( "f8960846e9ae4ad1c23686f74c8e5f80f22336b6f2175be21db82afa8823c92d")); - var senderAddress = senderPrivateKey.ToAddress(); - var recipientAddress = recipientPrivateKey.ToAddress(); + var senderAddress = senderPrivateKey.Address; + var recipientAddress = recipientPrivateKey.Address; var crystal = CrystalCalculator.CRYSTAL; var context = new ActionContext(); - var state = new Account(MockState.Empty).MintAsset(context, senderAddress, crystal * 100); + + var stateStore = new TrieStateStore(new MemoryKeyValueStore()); + var inputTrie = stateStore.GetStateRoot(null); + IAccount state = new Account(new AccountState(inputTrie)) + .MintAsset(context, senderAddress, crystal * 100); + inputTrie = stateStore.Commit(state.Trie); + state = new Account(new AccountState(inputTrie)); + var actionContext = new ActionContext { Signer = senderAddress, @@ -99,23 +118,26 @@ public Task TransferWithMemo() var action = new TransferAsset0( senderAddress, recipientAddress, - crystal * 100, + crystal * 20, "MEMO"); var outputState = action.Execute(actionContext); + var outputTrie = stateStore.Commit(outputState.Trie); + + var trieDiff = outputTrie.Diff(inputTrie) + .Select(elem => new object[] + { + ByteUtil.Hex(elem.Path.ByteArray), + elem.TargetValue?.ToString(), + elem.SourceValue.ToString(), + }) + .ToArray(); // Verifier does not handle tuples well when nested. - var summary = Verifier - .Verify(outputState) - .IgnoreMembersWithType>() - .IgnoreMembersWithType>() - .IgnoreMembersWithType() - .UseTypeName((Text)GetActionTypeId()) - .UseMethodName($"{nameof(TransferWithMemo)}.summary"); - var fungibles = Verifier - .Verify(outputState.Delta.Fungibles) + var diff = Verifier + .Verify(trieDiff) .UseTypeName((Text)GetActionTypeId()) - .UseMethodName($"{nameof(TransferWithMemo)}.fungibles"); - return Task.WhenAll(summary, fungibles); + .UseMethodName($"{nameof(TransferWithMemo)}.diff"); + return diff; } } } diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.PlainValue.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.PlainValue.verified.txt index 3694f6213..9aee25684 100644 --- a/.Lib9c.Tests/Action/Snapshot/transfer_asset.PlainValue.verified.txt +++ b/.Lib9c.Tests/Action/Snapshot/transfer_asset.PlainValue.verified.txt @@ -1,26 +1,6 @@ { Bencodex.Types.Text "type_id": { EncodingLength: 18, - Fingerprint: { - Digest: [ - 116, - 114, - 97, - 110, - 115, - 102, - 101, - 114, - 95, - 97, - 115, - 115, - 101, - 116 - ], - EncodingLength: 18, - Kind: Text - }, Kind: Text, Value: transfer_asset }, @@ -31,36 +11,16 @@ 2 ], Bencodex.Types.Text "minters": { - EncodingLength: 1, - Fingerprint: { - EncodingLength: 1 - } + EncodingLength: 1 }, Bencodex.Types.Text "ticker": { EncodingLength: 6, - Fingerprint: { - Digest: [ - 78, - 78, - 78 - ], - EncodingLength: 6, - Kind: Text - }, Kind: Text, Value: NNN } }, { EncodingLength: 7, - Fingerprint: { - Digest: [ - 16, - 39 - ], - EncodingLength: 7, - Kind: Integer - }, Kind: Integer, Value: 10000 } diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.diff.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.diff.verified.txt new file mode 100644 index 000000000..35aff764e --- /dev/null +++ b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.diff.verified.txt @@ -0,0 +1,12 @@ +[ + [ + 5f393961303663326264373166306561613831393666653435626535636134323465653830393733335f64656564663762343337363963303635656263396563376162653636613838336466303234303762, + null, + Bencodex.Types.Integer 20000000000000000000 + ], + [ + 5f633631633337363639336536623236373137633965653961636135613234353330323866366666615f64656564663762343337363963303635656263396563376162653636613838336466303234303762, + Bencodex.Types.Integer 100000000000000000000, + Bencodex.Types.Integer 80000000000000000000 + ] +] \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.fungibles.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.fungibles.verified.txt deleted file mode 100644 index abc9592fb..000000000 --- a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.fungibles.verified.txt +++ /dev/null @@ -1,4 +0,0 @@ -{ - (0x99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, CRYSTAL (deedf7b43769c065ebc9ec7abe66a883df02407b)): 100000000000000000000, - (0xC61C376693E6B26717C9ee9aCA5A2453028f6ffA, CRYSTAL (deedf7b43769c065ebc9ec7abe66a883df02407b)): 0 -} \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.summary.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.summary.verified.txt deleted file mode 100644 index 1a74723cb..000000000 --- a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferCrystal.summary.verified.txt +++ /dev/null @@ -1,12 +0,0 @@ -{ - Delta: { - FungibleUpdatedAddresses: [ - 99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, - C61C376693E6B26717C9ee9aCA5A2453028f6ffA - ], - UpdatedAddresses: [ - 99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, - C61C376693E6B26717C9ee9aCA5A2453028f6ffA - ] - } -} \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.diff.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.diff.verified.txt new file mode 100644 index 000000000..35aff764e --- /dev/null +++ b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.diff.verified.txt @@ -0,0 +1,12 @@ +[ + [ + 5f393961303663326264373166306561613831393666653435626535636134323465653830393733335f64656564663762343337363963303635656263396563376162653636613838336466303234303762, + null, + Bencodex.Types.Integer 20000000000000000000 + ], + [ + 5f633631633337363639336536623236373137633965653961636135613234353330323866366666615f64656564663762343337363963303635656263396563376162653636613838336466303234303762, + Bencodex.Types.Integer 100000000000000000000, + Bencodex.Types.Integer 80000000000000000000 + ] +] \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.fungibles.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.fungibles.verified.txt deleted file mode 100644 index abc9592fb..000000000 --- a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.fungibles.verified.txt +++ /dev/null @@ -1,4 +0,0 @@ -{ - (0x99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, CRYSTAL (deedf7b43769c065ebc9ec7abe66a883df02407b)): 100000000000000000000, - (0xC61C376693E6B26717C9ee9aCA5A2453028f6ffA, CRYSTAL (deedf7b43769c065ebc9ec7abe66a883df02407b)): 0 -} \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.summary.verified.txt b/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.summary.verified.txt deleted file mode 100644 index 1a74723cb..000000000 --- a/.Lib9c.Tests/Action/Snapshot/transfer_asset.TransferWithMemo.summary.verified.txt +++ /dev/null @@ -1,12 +0,0 @@ -{ - Delta: { - FungibleUpdatedAddresses: [ - 99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, - C61C376693E6B26717C9ee9aCA5A2453028f6ffA - ], - UpdatedAddresses: [ - 99A06c2Bd71f0EAa8196fE45BE5ca424eE809733, - C61C376693E6B26717C9ee9aCA5A2453028f6ffA - ] - } -} \ No newline at end of file diff --git a/.Lib9c.Tests/Action/Stake0Test.cs b/.Lib9c.Tests/Action/Stake0Test.cs index 4b2ab6e25..07286cfba 100644 --- a/.Lib9c.Tests/Action/Stake0Test.cs +++ b/.Lib9c.Tests/Action/Stake0Test.cs @@ -45,7 +45,7 @@ public Stake0Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(_currency); - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; _initialState = _initialState .SetState(GoldCurrencyState.Address, _goldCurrencyState.Serialize()) .MintAsset(context, _signerAddress, _currency * 100); @@ -71,7 +71,7 @@ public void Execute_Throws_WhenThereIsMonsterCollection() MonsterCollectionState.DeriveAddress(_signerAddress, 0); var agentState = new AgentState(_signerAddress) { - avatarAddresses = { [0] = new PrivateKey().ToAddress(), }, + avatarAddresses = { [0] = new PrivateKey().Address, }, }; var states = _initialState .SetState(_signerAddress, agentState.Serialize()) diff --git a/.Lib9c.Tests/Action/Stake2Test.cs b/.Lib9c.Tests/Action/Stake2Test.cs index 18b8d6377..c599d2ed5 100644 --- a/.Lib9c.Tests/Action/Stake2Test.cs +++ b/.Lib9c.Tests/Action/Stake2Test.cs @@ -46,7 +46,7 @@ public Stake2Test(ITestOutputHelper outputHelper) #pragma warning restore CS0618 _goldCurrencyState = new GoldCurrencyState(_currency); - _signerAddress = new PrivateKey().ToAddress(); + _signerAddress = new PrivateKey().Address; var context = new ActionContext(); _initialState = _initialState .SetState(GoldCurrencyState.Address, _goldCurrencyState.Serialize()) @@ -73,7 +73,7 @@ public void Execute_Throws_WhenThereIsMonsterCollection() MonsterCollectionState.DeriveAddress(_signerAddress, 0); var agentState = new AgentState(_signerAddress) { - avatarAddresses = { [0] = new PrivateKey().ToAddress(), }, + avatarAddresses = { [0] = new PrivateKey().Address, }, }; var states = _initialState .SetState(_signerAddress, agentState.Serialize()) diff --git a/.Lib9c.Tests/Action/StakeTest.cs b/.Lib9c.Tests/Action/StakeTest.cs index 61652ce59..7306545b9 100644 --- a/.Lib9c.Tests/Action/StakeTest.cs +++ b/.Lib9c.Tests/Action/StakeTest.cs @@ -491,7 +491,6 @@ private IAccount Execute( BlockIndex = blockIndex, PreviousState = previousState, RandomSeed = random.Seed, - Rehearsal = false, Signer = signer, }); diff --git a/.Lib9c.Tests/Action/Summon/AuraSummonTest.cs b/.Lib9c.Tests/Action/Summon/AuraSummonTest.cs index 547aa528a..7f7ebfce4 100644 --- a/.Lib9c.Tests/Action/Summon/AuraSummonTest.cs +++ b/.Lib9c.Tests/Action/Summon/AuraSummonTest.cs @@ -13,6 +13,7 @@ namespace Lib9c.Tests.Action.Summon using Nekoyume.Action.Exceptions; using Nekoyume.Model.Item; using Nekoyume.Model.State; + using Nekoyume.TableData; using Nekoyume.TableData.Summon; using Xunit; using static SerializeKeys; @@ -31,7 +32,7 @@ public AuraSummonTest() var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; var agentState = new AgentState(_agentAddress); _avatarAddress = _agentAddress.Derive("avatar"); @@ -176,6 +177,8 @@ public void CumulativeRatio(string version, int groupId) [InlineData("V1", 10001, 11, 800201, 22, 1, new int[] { }, typeof(InvalidSummonCountException))] // 15 recipes [InlineData("V2", 10002, 1, 600201, 1, 5341, new[] { 10650006 }, null)] + // 15 recipes + [InlineData("V3", 20001, 1, 600201, 1, 5341, new int[] { }, typeof(SheetRowNotFoundException))] public void Execute( string version, int groupId, @@ -189,10 +192,14 @@ Type expectedExc { var random = new TestRandom(seed); var state = _initialState; - state = state.SetState( - Addresses.TableSheet.Derive(nameof(SummonSheet)), - version == "V1" ? SummonSheetFixtures.V1.Serialize() : SummonSheetFixtures.V2.Serialize() - ); + var sheet = version switch + { + "V1" => SummonSheetFixtures.V1.Serialize(), + "V2" => SummonSheetFixtures.V2.Serialize(), + "V3" => SummonSheetFixtures.V3.Serialize(), + _ => throw new ArgumentOutOfRangeException(nameof(version), version, null) + }; + state = state.SetState(Addresses.TableSheet.Derive(nameof(SummonSheet)), sheet); if (!(materialId is null)) { diff --git a/.Lib9c.Tests/Action/Summon/RuneSummonTest.cs b/.Lib9c.Tests/Action/Summon/RuneSummonTest.cs new file mode 100644 index 000000000..6dd8c8e02 --- /dev/null +++ b/.Lib9c.Tests/Action/Summon/RuneSummonTest.cs @@ -0,0 +1,261 @@ +namespace Lib9c.Tests.Action.Summon +{ + using System; + using System.Collections; + using System.Collections.Generic; + using System.Data; + using System.Linq; + using Libplanet.Action.State; + using Libplanet.Crypto; + using Libplanet.Types.Assets; + using Nekoyume; + using Nekoyume.Action; + using Nekoyume.Action.Exceptions; + using Nekoyume.Model.Item; + using Nekoyume.Model.State; + using Nekoyume.TableData; + using Nekoyume.TableData.Summon; + using Xunit; + using static SerializeKeys; + + public class RuneSummonTest + { + private readonly Address _agentAddress; + private readonly Address _avatarAddress; + private readonly AvatarState _avatarState; + private readonly Currency _currency; + private TableSheets _tableSheets; + private IAccount _initialState; + + public RuneSummonTest() + { + var sheets = TableSheetsImporter.ImportSheets(); + _tableSheets = new TableSheets(sheets); + var privateKey = new PrivateKey(); + _agentAddress = privateKey.PublicKey.Address; + var agentState = new AgentState(_agentAddress); + + _avatarAddress = _agentAddress.Derive("avatar"); + _avatarState = new AvatarState( + _avatarAddress, + _agentAddress, + 0, + _tableSheets.GetAvatarSheets(), + new GameConfigState(), + default + ); + + agentState.avatarAddresses.Add(0, _avatarAddress); + +#pragma warning disable CS0618 + // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 + _currency = Currency.Legacy("NCG", 2, null); +#pragma warning restore CS0618 + var gold = new GoldCurrencyState(_currency); + + var context = new ActionContext(); + _initialState = new Account(MockState.Empty) + .SetState(_agentAddress, agentState.Serialize()) + .SetState(_avatarAddress, _avatarState.Serialize()) + .SetState(GoldCurrencyState.Address, gold.Serialize()) + .MintAsset(context, GoldCurrencyState.Address, gold.Currency * 100000000000) + .MintAsset(context, _avatarAddress, 100 * Currencies.GetRune("RUNESTONE_FENRIR1")) + .TransferAsset( + context, + Addresses.GoldCurrency, + _agentAddress, + gold.Currency * 1000 + ); + + Assert.Equal( + gold.Currency * 99999999000, + _initialState.GetBalance(Addresses.GoldCurrency, gold.Currency) + ); + Assert.Equal( + gold.Currency * 1000, + _initialState.GetBalance(_agentAddress, gold.Currency) + ); + + foreach (var (key, value) in sheets) + { + _initialState = + _initialState.SetState(Addresses.TableSheet.Derive(key), value.Serialize()); + } + } + + [Theory] + [InlineData(20001)] + public void CumulativeRatio(int groupId) + { + var sheet = _tableSheets.SummonSheet; + var targetRow = sheet.OrderedList.First(r => r.GroupId == groupId); + + for (var i = 1; i <= SummonSheet.Row.MaxRecipeCount; i++) + { + var sum = 0; + for (var j = 0; j < i; j++) + { + if (j < targetRow.Recipes.Count) + { + sum += targetRow.Recipes[j].Item2; + } + } + + Assert.Equal(sum, targetRow.CumulativeRatio(i)); + } + } + + [Theory] + [ClassData(typeof(ExecuteMemeber))] + public void Execute( + int groupId, + int summonCount, + int? materialId, + int materialCount, + int seed, + Type expectedExc + ) + { + var random = new TestRandom(seed); + var state = _initialState; + state = state.SetState( + Addresses.TableSheet.Derive(nameof(SummonSheet)), + _tableSheets.SummonSheet.Serialize() + ); + + if (!(materialId is null)) + { + var materialSheet = _tableSheets.MaterialItemSheet; + var material = materialSheet.OrderedList.FirstOrDefault(m => m.Id == materialId); + _avatarState.inventory.AddItem( + ItemFactory.CreateItem(material, random), + materialCount * _tableSheets.SummonSheet[groupId].CostMaterialCount + ); + state = state + .SetState(_avatarAddress, _avatarState.SerializeV2()) + .SetState( + _avatarAddress.Derive(LegacyInventoryKey), + _avatarState.inventory.Serialize() + ) + .SetState( + _avatarAddress.Derive(LegacyWorldInformationKey), + _avatarState.worldInformation.Serialize() + ) + .SetState( + _avatarAddress.Derive(LegacyQuestListKey), + _avatarState.questList.Serialize() + ) + ; + } + + var action = new RuneSummon + { + AvatarAddress = _avatarAddress, + GroupId = groupId, + SummonCount = summonCount, + }; + + if (expectedExc == null) + { + // Success + var ctx = new ActionContext + { + PreviousState = state, + Signer = _agentAddress, + BlockIndex = 1, + }; + ctx.SetRandom(random); + var nextState = action.Execute(ctx); + var result = RuneSummon.SimulateSummon( + _tableSheets.RuneSheet, + _tableSheets.SummonSheet[groupId], + summonCount, + new TestRandom(seed) + ); + foreach (var pair in result) + { + var currency = pair.Key; + var prevBalance = state.GetBalance(_avatarAddress, currency); + var balance = nextState.GetBalance(_avatarAddress, currency); + Assert.Equal(currency * pair.Value, balance - prevBalance); + } + + nextState.GetAvatarStateV2(_avatarAddress).inventory + .TryGetItem((int)materialId!, out var resultMaterial); + Assert.Equal(0, resultMaterial?.count ?? 0); + } + else + { + // Failure + Assert.Throws(expectedExc, () => + { + action.Execute(new ActionContext + { + PreviousState = state, + Signer = _agentAddress, + BlockIndex = 1, + RandomSeed = random.Seed, + }); + }); + } + } + + private class ExecuteMemeber : IEnumerable + { + private readonly List _data = new () + { + new object[] + { + 20001, 1, 600201, 1, 1, null, + }, + new object[] + { + 20001, 2, 600201, 2, 54, null, + }, + // Nine plus zero + new object[] + { + 20001, + 9, + 600201, + 9, + 0, + null, + }, + // Ten plus one + new object[] + { + 20001, + 10, + 600201, + 10, + 0, + null, + }, + // fail by invalid group + new object[] + { + 100003, 1, null, 0, 0, typeof(RowNotInTableException), + }, + // fail by not enough material + new object[] + { + 20001, 1, 600201, 0, 0, typeof(NotEnoughMaterialException), + }, + // Fail by exceeding summon limit + new object[] + { + 20001, 11, 600201, 22, 1, typeof(InvalidSummonCountException), + }, + new object[] + { + 10002, 1, 600201, 1, 1, typeof(SheetRowNotFoundException), + }, + }; + + public IEnumerator GetEnumerator() => _data.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => _data.GetEnumerator(); + } + } +} diff --git a/.Lib9c.Tests/Action/TransferAsset2Test.cs b/.Lib9c.Tests/Action/TransferAsset2Test.cs index e3257f6ce..8bf8a7c72 100644 --- a/.Lib9c.Tests/Action/TransferAsset2Test.cs +++ b/.Lib9c.Tests/Action/TransferAsset2Test.cs @@ -61,7 +61,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -89,7 +88,6 @@ public void ExecuteWithInvalidSigner() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -117,7 +115,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -127,7 +124,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 380001, }); }); @@ -155,7 +151,6 @@ public void ExecuteWithInsufficientBalance() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -183,7 +178,6 @@ public void ExecuteWithMinterAsSender() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -215,7 +209,6 @@ public void ExecuteWithMinterAsRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -228,7 +221,7 @@ public void ExecuteWithMinterAsRecipient() [Fact] public void ExecuteWithUnactivatedRecipient() { - var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().ToAddress()); + var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().Address); var prevState = new Account( MockState.Empty .SetState(_sender.Derive(ActivationKey.DeriveKey), true.Serialize()) @@ -246,7 +239,6 @@ public void ExecuteWithUnactivatedRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -348,7 +340,6 @@ public void CheckObsolete() { PreviousState = new Account(MockState.Empty), Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, }); }); diff --git a/.Lib9c.Tests/Action/TransferAsset3Test.cs b/.Lib9c.Tests/Action/TransferAsset3Test.cs index 00e49e17d..cb74a2f45 100644 --- a/.Lib9c.Tests/Action/TransferAsset3Test.cs +++ b/.Lib9c.Tests/Action/TransferAsset3Test.cs @@ -87,7 +87,6 @@ public void Execute(bool activate, bool legacyActivate, bool stateExist) { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -115,7 +114,6 @@ public void ExecuteWithInvalidSigner() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -147,7 +145,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -176,7 +173,6 @@ public void ExecuteWithInsufficientBalance() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -205,7 +201,6 @@ public void ExecuteWithMinterAsSender() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -238,7 +233,6 @@ public void ExecuteWithMinterAsRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -251,7 +245,7 @@ public void ExecuteWithMinterAsRecipient() [Fact] public void ExecuteWithUnactivatedRecipient() { - var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().ToAddress()); + var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().Address); var prevState = new Account( MockState.Empty .SetState(_sender.Derive(ActivationKey.DeriveKey), true.Serialize()) @@ -269,7 +263,6 @@ public void ExecuteWithUnactivatedRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -341,7 +334,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } diff --git a/.Lib9c.Tests/Action/TransferAsset4Test.cs b/.Lib9c.Tests/Action/TransferAsset4Test.cs index 089638dee..1877f65a4 100644 --- a/.Lib9c.Tests/Action/TransferAsset4Test.cs +++ b/.Lib9c.Tests/Action/TransferAsset4Test.cs @@ -49,7 +49,7 @@ public void Constructor_ThrowsMemoLengthOverflowException() public void Execute() { var contractAddress = _sender.Derive(nameof(RequestPledge)); - var patronAddress = new PrivateKey().ToAddress(); + var patronAddress = new PrivateKey().Address; var prevState = new Account( MockState.Empty .SetBalance(_sender, _currency * 1000) @@ -63,7 +63,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -92,7 +91,6 @@ public void Execute_Throw_InvalidTransferSignerException() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -122,7 +120,6 @@ public void Execute_Throw_InvalidTransferRecipientException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -151,7 +148,6 @@ public void Execute_Throw_InsufficientBalanceException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -187,7 +183,6 @@ public void Execute_Throw_InvalidTransferMinterException(bool minterAsSender) { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -262,7 +257,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } diff --git a/.Lib9c.Tests/Action/TransferAssetTest.cs b/.Lib9c.Tests/Action/TransferAssetTest.cs index 9b8ed9a1f..9f4c153ff 100644 --- a/.Lib9c.Tests/Action/TransferAssetTest.cs +++ b/.Lib9c.Tests/Action/TransferAssetTest.cs @@ -52,7 +52,7 @@ public void Constructor_ThrowsMemoLengthOverflowException() public void Execute() { var contractAddress = _sender.Derive(nameof(RequestPledge)); - var patronAddress = new PrivateKey().ToAddress(); + var patronAddress = new PrivateKey().Address; var prevState = new Account( MockState.Empty .SetBalance(_sender, _currency * 1000) @@ -66,7 +66,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -95,7 +94,6 @@ public void Execute_Throw_InvalidTransferSignerException() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -125,7 +123,6 @@ public void Execute_Throw_InvalidTransferRecipientException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -154,7 +151,6 @@ public void Execute_Throw_InsufficientBalanceException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -190,7 +186,6 @@ public void Execute_Throw_InvalidTransferMinterException(bool minterAsSender) { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -265,7 +260,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } @@ -306,7 +300,6 @@ public void Execute_Throw_ArgumentException() StakeState.DeriveAddress(_recipient), new StakeState(StakeState.DeriveAddress(_recipient), 0).SerializeV2()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); Assert.Throws("recipient", () => action.Execute(new ActionContext() @@ -322,7 +315,6 @@ public void Execute_Throw_ArgumentException() 201600), 0).Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); Assert.Throws("recipient", () => action.Execute(new ActionContext() @@ -336,7 +328,6 @@ public void Execute_Throw_ArgumentException() 0) .Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); var monsterCollectionRewardSheet = new MonsterCollectionRewardSheet(); @@ -354,7 +345,6 @@ public void Execute_Throw_ArgumentException() monsterCollectionRewardSheet) .Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); } diff --git a/.Lib9c.Tests/Action/TransferAssetTest0.cs b/.Lib9c.Tests/Action/TransferAssetTest0.cs index 791fd24ff..46cfb33ed 100644 --- a/.Lib9c.Tests/Action/TransferAssetTest0.cs +++ b/.Lib9c.Tests/Action/TransferAssetTest0.cs @@ -59,7 +59,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -87,7 +86,6 @@ public void ExecuteWithInvalidSigner() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -115,7 +113,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -125,7 +122,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 380001, }); }); @@ -153,7 +149,6 @@ public void ExecuteWithInsufficientBalance() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -181,7 +176,6 @@ public void ExecuteWithMinterAsSender() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -213,7 +207,6 @@ public void ExecuteWithMinterAsRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); diff --git a/.Lib9c.Tests/Action/TransferAssets0Test.cs b/.Lib9c.Tests/Action/TransferAssets0Test.cs index 66d918937..c79251109 100644 --- a/.Lib9c.Tests/Action/TransferAssets0Test.cs +++ b/.Lib9c.Tests/Action/TransferAssets0Test.cs @@ -111,7 +111,6 @@ public void Execute(bool activate, bool legacyActivate, bool stateExist) { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -142,7 +141,6 @@ public void ExecuteWithInvalidSigner() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -173,7 +171,6 @@ public void ExecuteWithInvalidRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -204,7 +201,6 @@ public void ExecuteWithInsufficientBalance() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -235,7 +231,6 @@ public void ExecuteWithMinterAsSender() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -270,7 +265,6 @@ public void ExecuteWithMinterAsRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -283,7 +277,7 @@ public void ExecuteWithMinterAsRecipient() [Fact] public void ExecuteWithUnactivatedRecipient() { - var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().ToAddress()); + var activatedAddress = new ActivatedAccountsState().AddAccount(new PrivateKey().Address); var prevState = new Account( MockState.Empty .SetState(_sender.Derive(ActivationKey.DeriveKey), true.Serialize()) @@ -303,7 +297,6 @@ public void ExecuteWithUnactivatedRecipient() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -427,7 +420,6 @@ public void Execute_Throw_ArgumentOutOfRangeException() { PreviousState = new Account(MockState.Empty), Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -453,7 +445,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } diff --git a/.Lib9c.Tests/Action/TransferAssets2Test.cs b/.Lib9c.Tests/Action/TransferAssets2Test.cs index 0573f4050..1bd683d9d 100644 --- a/.Lib9c.Tests/Action/TransferAssets2Test.cs +++ b/.Lib9c.Tests/Action/TransferAssets2Test.cs @@ -65,7 +65,7 @@ public void Constructor_ThrowsMemoLengthOverflowException() public void Execute() { var contractAddress = _sender.Derive(nameof(RequestPledge)); - var patronAddress = new PrivateKey().ToAddress(); + var patronAddress = new PrivateKey().Address; var prevState = new Account( MockState.Empty .SetBalance(_sender, _currency * 1000) @@ -82,7 +82,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -115,7 +114,6 @@ public void Execute_Throw_InvalidTransferSignerException() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -146,7 +144,6 @@ public void Execute_Throw_InvalidTransferRecipientException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -177,7 +174,6 @@ public void Execute_Throw_InsufficientBalanceException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -211,7 +207,6 @@ public void Execute_Throw_InvalidTransferMinterException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -337,7 +332,6 @@ public void Execute_Throw_ArgumentOutOfRangeException() { PreviousState = new Account(MockState.Empty), Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -363,7 +357,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } diff --git a/.Lib9c.Tests/Action/TransferAssetsTest.cs b/.Lib9c.Tests/Action/TransferAssetsTest.cs index 89757df3d..8800d5fc2 100644 --- a/.Lib9c.Tests/Action/TransferAssetsTest.cs +++ b/.Lib9c.Tests/Action/TransferAssetsTest.cs @@ -67,7 +67,7 @@ public void Constructor_ThrowsMemoLengthOverflowException() public void Execute() { var contractAddress = _sender.Derive(nameof(RequestPledge)); - var patronAddress = new PrivateKey().ToAddress(); + var patronAddress = new PrivateKey().Address; var prevState = new Account( MockState.Empty .SetBalance(_sender, _currency * 1000) @@ -84,7 +84,6 @@ public void Execute() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); @@ -117,7 +116,6 @@ public void Execute_Throw_InvalidTransferSignerException() PreviousState = prevState, // 송금자가 직접 사인하지 않으면 실패해야 합니다. Signer = _recipient, - Rehearsal = false, BlockIndex = 1, }); }); @@ -148,7 +146,6 @@ public void Execute_Throw_InvalidTransferRecipientException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -179,7 +176,6 @@ public void Execute_Throw_InsufficientBalanceException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -213,7 +209,6 @@ public void Execute_Throw_InvalidTransferMinterException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -339,7 +334,6 @@ public void Execute_Throw_ArgumentOutOfRangeException() { PreviousState = new Account(MockState.Empty), Signer = _sender, - Rehearsal = false, BlockIndex = 1, }); }); @@ -365,7 +359,6 @@ public void Execute_Throw_InvalidTransferCurrencyException() { PreviousState = prevState, Signer = _sender, - Rehearsal = false, BlockIndex = TransferAsset3.CrystalTransferringRestrictionStartIndex, })); } @@ -392,7 +385,6 @@ public void Execute_Throw_ArgumentException() StakeState.DeriveAddress(_recipient), new StakeState(StakeState.DeriveAddress(_recipient), 0).SerializeV2()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); Assert.Throws("recipient", () => action.Execute(new ActionContext() @@ -408,7 +400,6 @@ public void Execute_Throw_ArgumentException() 201600), 0).Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); Assert.Throws("recipient", () => action.Execute(new ActionContext() @@ -422,7 +413,6 @@ public void Execute_Throw_ArgumentException() 0) .Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); var monsterCollectionRewardSheet = new MonsterCollectionRewardSheet(); @@ -440,7 +430,6 @@ public void Execute_Throw_ArgumentException() monsterCollectionRewardSheet) .Serialize()), Signer = _sender, - Rehearsal = false, BlockIndex = 1, })); } diff --git a/.Lib9c.Tests/Action/UnlockEquipmentRecipe1Test.cs b/.Lib9c.Tests/Action/UnlockEquipmentRecipe1Test.cs index db324c7e8..6d4d55db1 100644 --- a/.Lib9c.Tests/Action/UnlockEquipmentRecipe1Test.cs +++ b/.Lib9c.Tests/Action/UnlockEquipmentRecipe1Test.cs @@ -31,8 +31,8 @@ public UnlockEquipmentRecipe1Test() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _currency = Currency.Legacy("CRYSTAL", 18, null); @@ -206,7 +206,7 @@ public void UnlockedIds(ItemSubType itemSubType) } // Unlock All recipe by ItemSubType - UnlockEquipmentRecipe1.UnlockedIds(_initialState, new PrivateKey().ToAddress(), _tableSheets.EquipmentItemRecipeSheet, worldInformation, rows.Select(i => i.Id).ToList()); + UnlockEquipmentRecipe1.UnlockedIds(_initialState, new PrivateKey().Address, _tableSheets.EquipmentItemRecipeSheet, worldInformation, rows.Select(i => i.Id).ToList()); } } } diff --git a/.Lib9c.Tests/Action/UnlockEquipmentRecipeTest.cs b/.Lib9c.Tests/Action/UnlockEquipmentRecipeTest.cs index a7f8bf388..90305c724 100644 --- a/.Lib9c.Tests/Action/UnlockEquipmentRecipeTest.cs +++ b/.Lib9c.Tests/Action/UnlockEquipmentRecipeTest.cs @@ -31,8 +31,8 @@ public UnlockEquipmentRecipeTest() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 _currency = Currency.Legacy("CRYSTAL", 18, null); @@ -206,7 +206,7 @@ public void UnlockedIds(ItemSubType itemSubType) } // Unlock All recipe by ItemSubType - UnlockEquipmentRecipe.UnlockedIds(_initialState, new PrivateKey().ToAddress(), _tableSheets.EquipmentItemRecipeSheet, worldInformation, rows.Select(i => i.Id).ToList()); + UnlockEquipmentRecipe.UnlockedIds(_initialState, new PrivateKey().Address, _tableSheets.EquipmentItemRecipeSheet, worldInformation, rows.Select(i => i.Id).ToList()); } } } diff --git a/.Lib9c.Tests/Action/UnlockRuneSlotTest.cs b/.Lib9c.Tests/Action/UnlockRuneSlotTest.cs index 75a706749..7f18abbd1 100644 --- a/.Lib9c.Tests/Action/UnlockRuneSlotTest.cs +++ b/.Lib9c.Tests/Action/UnlockRuneSlotTest.cs @@ -24,8 +24,8 @@ public UnlockRuneSlotTest() public IAccount Init(out Address agentAddress, out Address avatarAddress, out long blockIndex) { - agentAddress = new PrivateKey().ToAddress(); - avatarAddress = new PrivateKey().ToAddress(); + agentAddress = new PrivateKey().Address; + avatarAddress = new PrivateKey().Address; var sheets = TableSheetsImporter.ImportSheets(); var tableSheets = new TableSheets(sheets); blockIndex = tableSheets.WorldBossListSheet.Values @@ -79,7 +79,6 @@ public void Execute(int slotIndex) BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -130,7 +129,6 @@ public void Execute_InsufficientBalanceException() BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -159,7 +157,6 @@ public void Execute_SlotNotFoundException() BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -188,7 +185,6 @@ public void Execute_MismatchRuneSlotTypeException() BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; @@ -221,7 +217,6 @@ public void Execute_SlotIsAlreadyUnlockedException() BlockIndex = blockIndex, PreviousState = state, RandomSeed = 0, - Rehearsal = false, Signer = agentAddress, }; diff --git a/.Lib9c.Tests/Action/UnlockWorld1Test.cs b/.Lib9c.Tests/Action/UnlockWorld1Test.cs index a7a4747b0..087c960bf 100644 --- a/.Lib9c.Tests/Action/UnlockWorld1Test.cs +++ b/.Lib9c.Tests/Action/UnlockWorld1Test.cs @@ -32,8 +32,8 @@ public UnlockWorld1Test() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; _currency = CrystalCalculator.CRYSTAL; var gameConfigState = new GameConfigState(sheets[nameof(GameConfigSheet)]); diff --git a/.Lib9c.Tests/Action/UnlockWorldTest.cs b/.Lib9c.Tests/Action/UnlockWorldTest.cs index acbbd01d4..e77687363 100644 --- a/.Lib9c.Tests/Action/UnlockWorldTest.cs +++ b/.Lib9c.Tests/Action/UnlockWorldTest.cs @@ -32,8 +32,8 @@ public UnlockWorldTest() _random = new TestRandom(); var sheets = TableSheetsImporter.ImportSheets(); _tableSheets = new TableSheets(sheets); - _agentAddress = new PrivateKey().ToAddress(); - _avatarAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; + _avatarAddress = new PrivateKey().Address; _currency = CrystalCalculator.CRYSTAL; var gameConfigState = new GameConfigState(sheets[nameof(GameConfigSheet)]); diff --git a/.Lib9c.Tests/Action/UpdateSell0Test.cs b/.Lib9c.Tests/Action/UpdateSell0Test.cs index e3f2e6478..3819505da 100644 --- a/.Lib9c.Tests/Action/UpdateSell0Test.cs +++ b/.Lib9c.Tests/Action/UpdateSell0Test.cs @@ -55,10 +55,10 @@ public UpdateSell0Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -245,7 +245,6 @@ bool legacy BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/UpdateSell2Test.cs b/.Lib9c.Tests/Action/UpdateSell2Test.cs index d6161ae5e..e34a73d72 100644 --- a/.Lib9c.Tests/Action/UpdateSell2Test.cs +++ b/.Lib9c.Tests/Action/UpdateSell2Test.cs @@ -55,10 +55,10 @@ public UpdateSell2Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -226,7 +226,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/UpdateSell3Test.cs b/.Lib9c.Tests/Action/UpdateSell3Test.cs index 0777a5f5e..91e0376e6 100644 --- a/.Lib9c.Tests/Action/UpdateSell3Test.cs +++ b/.Lib9c.Tests/Action/UpdateSell3Test.cs @@ -55,10 +55,10 @@ public UpdateSell3Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -232,7 +232,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/UpdateSell4Test.cs b/.Lib9c.Tests/Action/UpdateSell4Test.cs index 592c900be..15a963f37 100644 --- a/.Lib9c.Tests/Action/UpdateSell4Test.cs +++ b/.Lib9c.Tests/Action/UpdateSell4Test.cs @@ -55,10 +55,10 @@ public UpdateSell4Test(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -232,7 +232,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Action/UpdateSellTest.cs b/.Lib9c.Tests/Action/UpdateSellTest.cs index 7ba922a1c..111653f42 100644 --- a/.Lib9c.Tests/Action/UpdateSellTest.cs +++ b/.Lib9c.Tests/Action/UpdateSellTest.cs @@ -55,10 +55,10 @@ public UpdateSellTest(ITestOutputHelper outputHelper) var shopState = new ShopState(); - _agentAddress = new PrivateKey().ToAddress(); + _agentAddress = new PrivateKey().Address; var agentState = new AgentState(_agentAddress); - _avatarAddress = new PrivateKey().ToAddress(); - var rankingMapAddress = new PrivateKey().ToAddress(); + _avatarAddress = new PrivateKey().Address; + var rankingMapAddress = new PrivateKey().Address; _avatarState = new AvatarState( _avatarAddress, _agentAddress, @@ -232,7 +232,6 @@ bool fromPreviousAction BlockIndex = 101, PreviousState = prevState, RandomSeed = 0, - Rehearsal = false, Signer = _agentAddress, }); diff --git a/.Lib9c.Tests/Battle/EnemyPlayerDigestTest.cs b/.Lib9c.Tests/Battle/EnemyPlayerDigestTest.cs index 9706fd867..bb38e671b 100644 --- a/.Lib9c.Tests/Battle/EnemyPlayerDigestTest.cs +++ b/.Lib9c.Tests/Battle/EnemyPlayerDigestTest.cs @@ -20,12 +20,12 @@ public EnemyPlayerDigestTest() { _tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); var avatarState = new AvatarState( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, 1234, _tableSheets.GetAvatarSheets(), new GameConfigState(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, "test" ); avatarState.hair = 2; diff --git a/.Lib9c.Tests/CurrenciesTest.cs b/.Lib9c.Tests/CurrenciesTest.cs index 88adb36de..fe15f4346 100644 --- a/.Lib9c.Tests/CurrenciesTest.cs +++ b/.Lib9c.Tests/CurrenciesTest.cs @@ -205,12 +205,12 @@ public void GetSoulStones_With_Sheet_Throws_ArgumentNullException() [Fact] public void SelectRecipientAddress() { - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; Assert.Equal(agentAddress, Currencies.SelectRecipientAddress(Currencies.Crystal, agentAddress, avatarAddress)); Assert.Equal(agentAddress, Currencies.SelectRecipientAddress(Currencies.Garage, agentAddress, avatarAddress)); Assert.Equal(agentAddress, Currencies.SelectRecipientAddress(Currencies.Mead, agentAddress, avatarAddress)); - Assert.Equal(agentAddress, Currencies.SelectRecipientAddress(Currency.Legacy("NCG", decimalPlaces: 2, minter: new PrivateKey().ToAddress()), agentAddress, avatarAddress)); + Assert.Equal(agentAddress, Currencies.SelectRecipientAddress(Currency.Legacy("NCG", decimalPlaces: 2, minter: new PrivateKey().Address), agentAddress, avatarAddress)); Assert.Equal(avatarAddress, Currencies.SelectRecipientAddress(Currencies.DailyRewardRune, agentAddress, avatarAddress)); } } diff --git a/.Lib9c.Tests/Extensions/EquipmentExtensionsTest.cs b/.Lib9c.Tests/Extensions/EquipmentExtensionsTest.cs index dec062109..4b7c9f0c7 100644 --- a/.Lib9c.Tests/Extensions/EquipmentExtensionsTest.cs +++ b/.Lib9c.Tests/Extensions/EquipmentExtensionsTest.cs @@ -138,7 +138,7 @@ private Equipment CreateEquipment( if (!(subRecipeRow is null)) { CombinationEquipment16.AddAndUnlockOption( - new AgentState(new PrivateKey().ToAddress()), + new AgentState(new PrivateKey().Address), null, equipment, random, diff --git a/.Lib9c.Tests/Fixtures/TableCSV/Summon/SummonSheetFixtures.cs b/.Lib9c.Tests/Fixtures/TableCSV/Summon/SummonSheetFixtures.cs index 0c9338e61..338025e8b 100644 --- a/.Lib9c.Tests/Fixtures/TableCSV/Summon/SummonSheetFixtures.cs +++ b/.Lib9c.Tests/Fixtures/TableCSV/Summon/SummonSheetFixtures.cs @@ -11,5 +11,11 @@ public class SummonSheetFixtures @"groupID,cost_material,cost_material_count,cost_ncg,recipe1ID,recipe1ratio,recipe2ID,recipe2ratio,recipe3ID,recipe3ratio,recipe4ID,recipe4ratio,recipe5ID,recipe5ratio,recipe6ID,recipe6ratio,recipe7ID,recipe7ratio,recipe8ID,recipe8ratio,recipe9ID,recipe9ratio,recipe10ID,recipe10ratio,recipe11ID,recipe11ratio,recipe12ID,recipe12ratio,recipe13ID,recipe13ratio,recipe14ID,recipe14ratio,recipe15ID,recipe15ratio 10001,800201,10,0,171,70,172,29,173,1,,,,,,,,,,,,,,,,,,,,,,,, 10002,600201,20,0,174,6500,175,2940,176,510,177,45,178,5,179,6500,180,2940,181,510,182,45,183,5,184,6500,185,2940,186,510,187,45,188,5"; + + public const string V3 = @"groupID,cost_material,cost_material_count,cost_ncg,recipe1ID,recipe1ratio,recipe2ID,recipe2ratio,recipe3ID,recipe3ratio,recipe4ID,recipe4ratio,recipe5ID,recipe5ratio,recipe6ID,recipe6ratio,recipe7ID,recipe7ratio,recipe8ID,recipe8ratio,recipe9ID,recipe9ratio,recipe10ID,recipe10ratio,recipe11ID,recipe11ratio,recipe12ID,recipe12ratio,recipe13ID,recipe13ratio,recipe14ID,recipe14ratio,recipe15ID,recipe15ratio +10001,800201,10,0,171,70,172,29,173,1,,,,,,,,,,,,,,,,,,,,,,,, +10002,600201,20,0,174,6500,175,2940,176,510,177,45,178,5,179,6500,180,2940,181,510,182,45,183,5,184,6500,185,2940,186,510,187,45,188,5 +20001,600201,10,0,10021,20,10022,20,10023,20,10024,20,10025,60,10026,60,10027,60,10028,60,10001,40,10002,100,10003,200,10011,40,10012,100,10013,200,, +"; } } diff --git a/.Lib9c.Tests/Model/Arena/ArenaAvatarStateTest.cs b/.Lib9c.Tests/Model/Arena/ArenaAvatarStateTest.cs index 6633ebf07..53460da85 100644 --- a/.Lib9c.Tests/Model/Arena/ArenaAvatarStateTest.cs +++ b/.Lib9c.Tests/Model/Arena/ArenaAvatarStateTest.cs @@ -18,8 +18,8 @@ public ArenaAvatarStateTest() [Fact] public void Serialize() { - var avatarAddress = new PrivateKey().ToAddress(); - var agentAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; + var agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); var state = new ArenaAvatarState(avatarState); diff --git a/.Lib9c.Tests/Model/Arena/ArenaInformationTest.cs b/.Lib9c.Tests/Model/Arena/ArenaInformationTest.cs index ffc42af24..b5dfad9ff 100644 --- a/.Lib9c.Tests/Model/Arena/ArenaInformationTest.cs +++ b/.Lib9c.Tests/Model/Arena/ArenaInformationTest.cs @@ -10,7 +10,7 @@ public class ArenaInformationTest [Fact] public void Serialize() { - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var state = new ArenaInformation(avatarAddress, 1, 1); var serialized = (List)state.Serialize(); var deserialized = new ArenaInformation(serialized); diff --git a/.Lib9c.Tests/Model/Arena/ArenaScoreTest.cs b/.Lib9c.Tests/Model/Arena/ArenaScoreTest.cs index cd95f9306..96127eca0 100644 --- a/.Lib9c.Tests/Model/Arena/ArenaScoreTest.cs +++ b/.Lib9c.Tests/Model/Arena/ArenaScoreTest.cs @@ -10,7 +10,7 @@ public class ArenaScoreTest [Fact] public void Serialize() { - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var state = new ArenaScore(avatarAddress, 1, 1); var serialized = (List)state.Serialize(); var deserialized = new ArenaScore(serialized); diff --git a/.Lib9c.Tests/Model/Arena/PlayerDigestTest.cs b/.Lib9c.Tests/Model/Arena/PlayerDigestTest.cs index 8b477bf9a..fead415ac 100644 --- a/.Lib9c.Tests/Model/Arena/PlayerDigestTest.cs +++ b/.Lib9c.Tests/Model/Arena/PlayerDigestTest.cs @@ -22,12 +22,12 @@ public PlayerDigestTest() { _tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); var avatarState = new AvatarState( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, 1234, _tableSheets.GetAvatarSheets(), new GameConfigState(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, "test" ); avatarState.hair = 2; diff --git a/.Lib9c.Tests/Model/GrandFinale/GrandFinaleInformationTest.cs b/.Lib9c.Tests/Model/GrandFinale/GrandFinaleInformationTest.cs index 3132f7a13..4a948ebda 100644 --- a/.Lib9c.Tests/Model/GrandFinale/GrandFinaleInformationTest.cs +++ b/.Lib9c.Tests/Model/GrandFinale/GrandFinaleInformationTest.cs @@ -10,9 +10,9 @@ public class GrandFinaleInformationTest [Fact] public void Serialize() { - var avatarAddress = new PrivateKey().ToAddress(); - var addr1 = new PrivateKey().ToAddress(); - var addr2 = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; + var addr1 = new PrivateKey().Address; + var addr2 = new PrivateKey().Address; var state = new GrandFinaleInformation(avatarAddress, 1); state.UpdateRecord(addr1, true); state.UpdateRecord(addr2, false); @@ -32,9 +32,9 @@ public void Serialize() [Fact] public void UpdateBattleRecord() { - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var state = new GrandFinaleInformation(avatarAddress, 1); - var enemyAddr = new PrivateKey().ToAddress(); + var enemyAddr = new PrivateKey().Address; state.UpdateRecord(enemyAddr, true); var serialized = (List)state.Serialize(); var deserialized = new GrandFinaleInformation(serialized); @@ -42,7 +42,7 @@ public void UpdateBattleRecord() Assert.Equal(state.Address, deserialized.Address); Assert.True(state.TryGetBattleRecord(enemyAddr, out var win)); Assert.True(win); - Assert.False(state.TryGetBattleRecord(new PrivateKey().ToAddress(), out _)); + Assert.False(state.TryGetBattleRecord(new PrivateKey().Address, out _)); } } } diff --git a/.Lib9c.Tests/Model/Item/ShopItemTest.cs b/.Lib9c.Tests/Model/Item/ShopItemTest.cs index dd1b86f90..366d947f6 100644 --- a/.Lib9c.Tests/Model/Item/ShopItemTest.cs +++ b/.Lib9c.Tests/Model/Item/ShopItemTest.cs @@ -57,8 +57,8 @@ public void Serialize_With_ExpiredBlockIndex(long expiredBlockIndex, bool contai var equipmentRow = _tableSheets.EquipmentItemSheet.First; var equipment = ItemFactory.CreateItemUsable(equipmentRow, Guid.NewGuid(), 0); var shopItem = new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), expiredBlockIndex, @@ -79,8 +79,8 @@ public void ThrowArgumentOurOfRangeException() var equipmentRow = _tableSheets.EquipmentItemSheet.First; var equipment = ItemFactory.CreateItemUsable(equipmentRow, Guid.NewGuid(), 0); Assert.Throws(() => new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), -1, @@ -93,8 +93,8 @@ public void DeserializeThrowArgumentOurOfRangeException() var equipmentRow = _tableSheets.EquipmentItemSheet.First; var equipment = ItemFactory.CreateItemUsable(equipmentRow, Guid.NewGuid(), 0); var shopItem = new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), 0, @@ -116,8 +116,8 @@ private static ShopItem GetShopItemWithFirstCostume() var costumeRow = _tableSheets.CostumeItemSheet.First; var costume = ItemFactory.CreateCostume(costumeRow, Guid.NewGuid()); return new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), costume); @@ -128,8 +128,8 @@ private static ShopItem GetShopItemWithFirstEquipment() var equipmentRow = _tableSheets.EquipmentItemSheet.First; var equipment = ItemFactory.CreateItemUsable(equipmentRow, Guid.NewGuid(), 0); return new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), (ITradableItem)equipment); @@ -140,8 +140,8 @@ private static ShopItem GetShopItemWithFirstMaterial() var row = _tableSheets.MaterialItemSheet.First; var tradableMaterial = ItemFactory.CreateTradableMaterial(row); return new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), 1, @@ -158,8 +158,8 @@ private static IEnumerable GetShopItemsWithTradableMaterial() { var tradableMaterial = new TradableMaterial(row); var shopItem = new ShopItem( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, Guid.NewGuid(), new FungibleAssetValue(_currency, 100, 0), 1, diff --git a/.Lib9c.Tests/Model/ItemNotificationTest.cs b/.Lib9c.Tests/Model/ItemNotificationTest.cs index 3db69d4b4..65611f4cd 100644 --- a/.Lib9c.Tests/Model/ItemNotificationTest.cs +++ b/.Lib9c.Tests/Model/ItemNotificationTest.cs @@ -30,7 +30,7 @@ public ItemNotificationTest() var sheets = TableSheetsImporter.ImportSheets(); var privateKey = new PrivateKey(); - _agentAddress = privateKey.PublicKey.ToAddress(); + _agentAddress = privateKey.PublicKey.Address; _tableSheets = new TableSheets(sheets); } diff --git a/.Lib9c.Tests/Model/PlayerTest.cs b/.Lib9c.Tests/Model/PlayerTest.cs index f0d4ce02c..8458cb520 100644 --- a/.Lib9c.Tests/Model/PlayerTest.cs +++ b/.Lib9c.Tests/Model/PlayerTest.cs @@ -9,6 +9,7 @@ namespace Lib9c.Tests.Model using Nekoyume.Battle; using Nekoyume.Model; using Nekoyume.Model.BattleStatus; + using Nekoyume.Model.Buff; using Nekoyume.Model.Item; using Nekoyume.Model.Quest; using Nekoyume.Model.Skill; @@ -303,23 +304,23 @@ public void GetExp() _tableSheets.CharacterLevelSheet, _tableSheets.EquipmentItemSetEffectSheet ); + var baseHp = player.HP; player.SetCostumeStat(_tableSheets.CostumeStatSheet); - - Assert.Equal(27290, player.HP); - Assert.Equal(27290, player.CurrentHP); - + var expectedHp = baseHp + row.Stat; + Assert.Equal(expectedHp, player.HP); + Assert.Equal(expectedHp, player.CurrentHP); Assert.Equal(1, player.Level); player.CurrentHP -= 10; - - Assert.Equal(27280, player.CurrentHP); + var expectedCurrentHp = expectedHp - 10; + Assert.Equal(expectedCurrentHp, player.CurrentHP); var requiredExp = _tableSheets.CharacterLevelSheet[1].ExpNeed; player.GetExp2(requiredExp); - + var characterRow = _tableSheets.CharacterSheet[player.CharacterId]; Assert.Equal(2, player.Level); - Assert.Equal(27302, player.HP); - Assert.Equal(27280, player.CurrentHP); + Assert.Equal(expectedHp + characterRow.LvHP, player.HP); + Assert.Equal(expectedCurrentHp, player.CurrentHP); } [Theory] @@ -422,5 +423,246 @@ public void MaxLevelTest() Assert.Equal(maxLevel, player.Level); Assert.Equal(requiredExp - 1, player.Exp.Current - expRow.Exp); } + + [Fact] + public void GetStun() + { + var defaultAttack = SkillFactory.GetV1( + _tableSheets.SkillSheet.Values.First(r => r.Id == GameConfig.DefaultAttackId), + 100, + 100 + ); + + var simulator = new StageSimulator( + _random, + _avatarState, + new List(), + null, + new List(), + 1, + 1, + _tableSheets.StageSheet[1], + _tableSheets.StageWaveSheet[1], + false, + 20, + _tableSheets.GetSimulatorSheets(), + _tableSheets.EnemySkillSheet, + _tableSheets.CostumeStatSheet, + StageSimulator.GetWaveRewards( + _random, + _tableSheets.StageSheet[1], + _tableSheets.MaterialItemSheet) + ); + var player = simulator.Player; + var enemy = new Enemy(player, _tableSheets.CharacterSheet.Values.First(), 1); + player.Targets.Add(enemy); + simulator.Characters = new SimplePriorityQueue(); + simulator.Characters.Enqueue(enemy, 0); + player.InitAI(); + player.OverrideSkill(defaultAttack); + + var actionBuffSheet = _tableSheets.ActionBuffSheet; + // force add buff 'Stun' + // 704000 is ActionBuff id of Stun + player.AddBuff(BuffFactory.GetActionBuff(player.Stats, actionBuffSheet[704000])); + var row = actionBuffSheet.Values.First(); + var bleed = BuffFactory.GetActionBuff(enemy.Stats, row); + player.AddBuff(bleed); + player.Tick(); + player.Tick(); + Assert.NotEmpty(simulator.Log); + var log = simulator.Log; + var logCount = log.Count; + var logList = log.ToList(); + for (int i = 0; i < logCount; i++) + { + var currLog = logList[i]; + if (currLog is Tick) + { + var nextLog = logList[i + 1]; + + // 'Tick' does not give damage + Assert.Equal(currLog.Character.Targets.First().CurrentHP, nextLog.Character.Targets.First().CurrentHP); + Assert.True(nextLog is TickDamage); + } + else if (currLog is TickDamage) + { + var nextLog = logList[i + 1]; + Assert.True(currLog.Character.CurrentHP > nextLog.Character.CurrentHP); + } + } + + Assert.True(logList.Count > 0); + Assert.Contains(logList, e => e is Tick); + Assert.Contains(logList, e => e is TickDamage); + Assert.Contains(logList, e => e is RemoveBuffs); + } + + [Fact] + public void GiveStun() + { + var simulator = new StageSimulator( + _random, + _avatarState, + new List(), + null, + new List(), + 1, + 1, + _tableSheets.StageSheet[1], + _tableSheets.StageWaveSheet[1], + false, + 20, + _tableSheets.GetSimulatorSheets(), + _tableSheets.EnemySkillSheet, + _tableSheets.CostumeStatSheet, + StageSimulator.GetWaveRewards( + _random, + _tableSheets.StageSheet[1], + _tableSheets.MaterialItemSheet) + ); + var skill = SkillFactory.Get(_tableSheets.SkillSheet[700004], 0, 100, 0, StatType.NONE); + skill.CustomField = new SkillCustomField { BuffDuration = 2 }; + var player = simulator.Player; + var enemy = new Enemy(player, _tableSheets.CharacterSheet.Values.First(), 1); + player.Targets.Add(enemy); + simulator.Characters = new SimplePriorityQueue(); + simulator.Characters.Enqueue(enemy, 0); + player.InitAI(); + enemy.InitAI(); + player.AddSkill(skill); + player.Tick(); + var actionBuffSheet = _tableSheets.ActionBuffSheet; + var row = actionBuffSheet.Values.First(); + var bleed = BuffFactory.GetActionBuff(enemy.Stats, row); + enemy.AddBuff(bleed); + enemy.Tick(); + enemy.Tick(); + enemy.Tick(); + Assert.NotEmpty(simulator.Log); + var log = simulator.Log; + var logCount = log.Count; + var logList = log.ToList(); + for (int i = 0; i < logCount; i++) + { + var currLog = logList[i]; + if (currLog is Tick) + { + var nextLog = logList[i + 1]; + + // 'Tick' does not give damage + Assert.Equal(currLog.Character.Targets.First().CurrentHP, nextLog.Character.Targets.First().CurrentHP); + Assert.True(nextLog is TickDamage); + } + else if (currLog is TickDamage) + { + var nextLog = logList.ElementAtOrDefault(i + 1); + if (nextLog != null) + { + Assert.True(currLog.Character.CurrentHP > nextLog.Character.CurrentHP); + } + } + } + + Assert.True(logList.Count > 0); + Assert.Contains(logList, e => e is Tick); + Assert.Contains(logList, e => e is TickDamage); + Assert.Contains(logList, e => e is RemoveBuffs); + Assert.Contains(logList, e => e is Nekoyume.Model.BattleStatus.NormalAttack); + } + + [Theory] + [InlineData(1, 100)] + [InlineData(2, 10)] + [InlineData(1, 1)] + public void Vampiric(int duration, int percent) + { + var defaultAttack = SkillFactory.GetV1( + _tableSheets.SkillSheet.Values.First(r => r.Id == GameConfig.DefaultAttackId), + int.MaxValue / 2, + 100 + ); + + var simulator = new StageSimulator( + _random, + _avatarState, + new List(), + null, + new List(), + 1, + 1, + _tableSheets.StageSheet[1], + _tableSheets.StageWaveSheet[1], + false, + 20, + _tableSheets.GetSimulatorSheets(), + _tableSheets.EnemySkillSheet, + _tableSheets.CostumeStatSheet, + StageSimulator.GetWaveRewards( + _random, + _tableSheets.StageSheet[1], + _tableSheets.MaterialItemSheet) + ); + var player = simulator.Player; + var enemy = new Enemy( + player, + _tableSheets.CharacterSheet.Values.First(), + 1, + new[] { new StatModifier(StatType.HP, StatModifier.OperationType.Add, int.MaxValue / 2), } + ); + player.Targets.Add(enemy); + simulator.Characters = new SimplePriorityQueue(); + simulator.Characters.Enqueue(enemy, 0); + player.InitAI(); + player.OverrideSkill(defaultAttack); + + var actionBuffSheet = _tableSheets.ActionBuffSheet; + // force add buff 'Vampiric' + // 705000 is ActionBuff id of Vampiric + var vampiric = (Vampiric)BuffFactory.GetCustomActionBuff( + new SkillCustomField { BuffDuration = duration, BuffValue = percent }, actionBuffSheet[705000]); + player.AddBuff(vampiric); + var row = actionBuffSheet.Values.First(); + var bleed = BuffFactory.GetActionBuff(enemy.Stats, row); + player.AddBuff(bleed); + player.Tick(); + player.Tick(); + Assert.NotEmpty(simulator.Log); + var log = simulator.Log; + var logCount = log.Count; + var logList = log.ToList(); + for (int i = 0; i < logCount; i++) + { + var currLog = logList[i]; + if (currLog is Nekoyume.Model.BattleStatus.NormalAttack) + { + var nextLog = logList[i + 1]; + if (currLog.Character.ActionBuffs.Any(actionBuff => actionBuff is Vampiric)) + { + Assert.True(nextLog is Tick); + } + else + { + Assert.True(nextLog is TickDamage); + } + } + else if (currLog is Tick healSkill) + { + Assert.Equal(vampiric.RowData.Id, healSkill.SkillId); + var healInfo = healSkill.SkillInfos.First(); + var prevAttack = logList.Take(i).OfType() + .Last(); + Assert.Equal( + (int)(prevAttack.SkillInfos.First().Effect * (vampiric.BasisPoint / 10000m)), + healInfo.Effect); + } + } + + Assert.True(logList.Count > 0); + Assert.Contains(logList, e => e is Nekoyume.Model.BattleStatus.NormalAttack); + Assert.Contains(logList, e => e is TickDamage); + Assert.Contains(logList, e => e is RemoveBuffs); + Assert.Contains(logList, e => e is Tick); + } } } diff --git a/.Lib9c.Tests/Model/Skill/NormalAttackTest.cs b/.Lib9c.Tests/Model/Skill/NormalAttackTest.cs index 3ebd7afd3..bf73f2aa1 100644 --- a/.Lib9c.Tests/Model/Skill/NormalAttackTest.cs +++ b/.Lib9c.Tests/Model/Skill/NormalAttackTest.cs @@ -37,12 +37,12 @@ public void Use(bool copyCharacter) var normalAttack = new NormalAttack(skillRow, 100, 100, default, StatType.NONE); var avatarState = new AvatarState( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, 0, tableSheets.GetAvatarSheets(), new GameConfigState(), - new PrivateKey().ToAddress()); + new PrivateKey().Address); var worldRow = tableSheets.WorldSheet.First; Assert.NotNull(worldRow); diff --git a/.Lib9c.Tests/Model/Stake/StakeStateUtilsTest.cs b/.Lib9c.Tests/Model/Stake/StakeStateUtilsTest.cs index c5f98be64..1fa158d24 100644 --- a/.Lib9c.Tests/Model/Stake/StakeStateUtilsTest.cs +++ b/.Lib9c.Tests/Model/Stake/StakeStateUtilsTest.cs @@ -32,7 +32,7 @@ public void TryMigrate_Return_False_When_IValue_Null() public void TryMigrate_Return_False_When_Staking_State_Null() { var state = new Account(MockState.Empty); - Assert.False(StakeStateUtils.TryMigrate(state, new PrivateKey().ToAddress(), out _)); + Assert.False(StakeStateUtils.TryMigrate(state, new PrivateKey().Address, out _)); } [Theory] @@ -111,7 +111,7 @@ public void TryMigrate_Return_True_With_StakeState( state = state.SetState( Addresses.GameConfig, new GameConfigState(GameConfigSheetFixtures.Default).Serialize()); - var stakeAddr = new PrivateKey().ToAddress(); + var stakeAddr = new PrivateKey().Address; var stakeState = new StakeState(stakeAddr, startedBlockIndex); if (receivedBlockIndex is not null) { @@ -143,7 +143,7 @@ public void TryMigrate_Return_True_With_StakeStateV2( state = state.SetState( Addresses.GameConfig, new GameConfigState(GameConfigSheetFixtures.Default).Serialize()); - var stakeAddr = new PrivateKey().ToAddress(); + var stakeAddr = new PrivateKey().Address; var stakePolicySheet = new StakePolicySheet(); stakePolicySheet.Set(StakePolicySheetFixtures.V2); var contract = new Contract(stakePolicySheet); diff --git a/.Lib9c.Tests/Model/Stake/StakeStateV2Test.cs b/.Lib9c.Tests/Model/Stake/StakeStateV2Test.cs index 924baefb0..e2470170e 100644 --- a/.Lib9c.Tests/Model/Stake/StakeStateV2Test.cs +++ b/.Lib9c.Tests/Model/Stake/StakeStateV2Test.cs @@ -11,7 +11,7 @@ public class StakeStateV2Test [Fact] public void DeriveAddress() { - var agentAddr = new PrivateKey().ToAddress(); + var agentAddr = new PrivateKey().Address; var expectedStakeStateAddr = StakeState.DeriveAddress(agentAddr); Assert.Equal(expectedStakeStateAddr, StakeStateV2.DeriveAddress(agentAddr)); } @@ -63,7 +63,7 @@ public void Constructor_Throw_ArgumentOutOfRangeException( public void Constructor_With_StakeState(long startedBlockIndex, long? receivedBlockIndex) { var stakeState = new StakeState( - new PrivateKey().ToAddress(), + new PrivateKey().Address, startedBlockIndex); if (receivedBlockIndex.HasValue) { @@ -84,7 +84,7 @@ public void Constructor_With_StakeState(long startedBlockIndex, long? receivedBl [Fact] public void Constructor_With_StakeState_Throw_ArgumentNullException() { - var stakeState = new StakeState(new PrivateKey().ToAddress(), 0); + var stakeState = new StakeState(new PrivateKey().Address, 0); var contract = new Contract( Contract.StakeRegularFixedRewardSheetPrefix, Contract.StakeRegularRewardSheetPrefix, diff --git a/.Lib9c.Tests/Model/State/AdminStateTest.cs b/.Lib9c.Tests/Model/State/AdminStateTest.cs index 2531019b0..adb3d5695 100644 --- a/.Lib9c.Tests/Model/State/AdminStateTest.cs +++ b/.Lib9c.Tests/Model/State/AdminStateTest.cs @@ -11,7 +11,7 @@ public class AdminStateTest [Fact] public void Serialize() { - var adminStateAddress = new PrivateKey().ToAddress(); + var adminStateAddress = new PrivateKey().Address; var validUntil = 100; var adminState = new AdminState(adminStateAddress, validUntil); @@ -25,7 +25,7 @@ public void Serialize() [Fact] public void SerializeWithDotNetAPI() { - var adminStateAddress = new PrivateKey().ToAddress(); + var adminStateAddress = new PrivateKey().Address; var validUntil = 100; var adminState = new AdminState(adminStateAddress, validUntil); diff --git a/.Lib9c.Tests/Model/State/AgentStateTest.cs b/.Lib9c.Tests/Model/State/AgentStateTest.cs index 27e4566ee..b9ae3568d 100644 --- a/.Lib9c.Tests/Model/State/AgentStateTest.cs +++ b/.Lib9c.Tests/Model/State/AgentStateTest.cs @@ -11,7 +11,7 @@ public class AgentStateTest [Fact] public void Serialize() { - var agentStateAddress = new PrivateKey().ToAddress(); + var agentStateAddress = new PrivateKey().Address; var agentState = new AgentState(agentStateAddress); var serialized = agentState.Serialize(); @@ -23,7 +23,7 @@ public void Serialize() [Fact] public void SerializeWithDotNetAPI() { - var agentStateAddress = new PrivateKey().ToAddress(); + var agentStateAddress = new PrivateKey().Address; var agentState = new AgentState(agentStateAddress); var formatter = new BinaryFormatter(); diff --git a/.Lib9c.Tests/Model/State/AvatarStateTest.cs b/.Lib9c.Tests/Model/State/AvatarStateTest.cs index c86d2078d..69b6b5f25 100644 --- a/.Lib9c.Tests/Model/State/AvatarStateTest.cs +++ b/.Lib9c.Tests/Model/State/AvatarStateTest.cs @@ -32,8 +32,8 @@ public AvatarStateTest() [Fact] public void Serialize() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); var serialized = avatarState.Serialize(); @@ -59,8 +59,8 @@ public void Serialize() [InlineData(4)] public async Task ConstructDeterministic(int waitMilliseconds) { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; AvatarState avatarStateA = GetNewAvatarState(avatarAddress, agentAddress); await Task.Delay(waitMilliseconds); AvatarState avatarStateB = GetNewAvatarState(avatarAddress, agentAddress); @@ -74,8 +74,8 @@ HashDigest Hash(AvatarState avatarState) => public void UpdateFromQuestRewardDeterministic() { var rankingState = new RankingState1(); - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, agentAddress, @@ -121,8 +121,8 @@ public void UpdateFromQuestRewardDeterministic() [InlineData(5, GameConfig.RequireCharacterLevel.CharacterConsumableSlot5)] public void ValidateConsumable(int count, int level) { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = level; @@ -142,8 +142,8 @@ public void ValidateConsumable(int count, int level) [Fact] public void ValidateConsumableThrowRequiredBlockIndexException() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); var consumableIds = new List(); @@ -158,8 +158,8 @@ public void ValidateConsumableThrowRequiredBlockIndexException() [Fact] public void ValidateConsumableThrowConsumableSlotOutOfRangeException() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = GameConfig.RequireCharacterLevel.CharacterConsumableSlot5; @@ -184,8 +184,8 @@ public void ValidateConsumableThrowConsumableSlotOutOfRangeException() [InlineData(5, GameConfig.RequireCharacterLevel.CharacterConsumableSlot5)] public void ValidateConsumableSlotThrowConsumableSlotUnlockException(int count, int level) { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = level - 1; @@ -205,8 +205,8 @@ public void ValidateConsumableSlotThrowConsumableSlotUnlockException(int count, [Fact] public void ValidateCostume() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = 100; @@ -240,8 +240,8 @@ public void ValidateCostume() [InlineData(ItemSubType.Title)] public void ValidateCostumeThrowDuplicateCostumeException(ItemSubType type) { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = 100; @@ -265,8 +265,8 @@ public void ValidateCostumeThrowDuplicateCostumeException(ItemSubType type) [Fact] public void ValidateCostumeThrowInvalidItemTypeException() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = 100; @@ -290,8 +290,8 @@ public void ValidateCostumeThrowInvalidItemTypeException() [InlineData(ItemSubType.Title, GameConfig.RequireCharacterLevel.CharacterTitleSlot)] public void ValidateCostumeThrowCostumeSlotUnlockException(ItemSubType type, int level) { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); avatarState.level = level - 1; @@ -306,8 +306,8 @@ public void ValidateCostumeThrowCostumeSlotUnlockException(ItemSubType type, int [Fact] public void UpdateV2() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); var result = new CombinationConsumable5.ResultModel() { @@ -331,8 +331,8 @@ public void UpdateV2() [Fact] public void UpdateV4() { - Address avatarAddress = new PrivateKey().ToAddress(); - Address agentAddress = new PrivateKey().ToAddress(); + Address avatarAddress = new PrivateKey().Address; + Address agentAddress = new PrivateKey().Address; var avatarState = GetNewAvatarState(avatarAddress, agentAddress); var result = new CombinationConsumable5.ResultModel() { @@ -384,7 +384,7 @@ public void CleanUpMail() [Fact] public void EquipItems() { - var avatarState = GetNewAvatarState(new PrivateKey().ToAddress(), new PrivateKey().ToAddress()); + var avatarState = GetNewAvatarState(new PrivateKey().Address, new PrivateKey().Address); avatarState.inventory.AddItem(EquipmentTest.CreateFirstEquipment(_tableSheets)); avatarState.inventory.AddItem(CostumeTest.CreateFirstCostume(_tableSheets)); @@ -456,7 +456,7 @@ public void UseAp(int ap, int requiredAp, bool chargeAp, bool materialExist, Typ [InlineData(ItemSubType.Ring, 3, GameConfig.MaxEquipmentSlotCount.Ring, 0, 0)] private void ValidateEquipmentsV2(ItemSubType type, int count, int maxCount, long blockIndex, long requiredBlockIndex) { - var avatarState = GetNewAvatarState(new PrivateKey().ToAddress(), new PrivateKey().ToAddress()); + var avatarState = GetNewAvatarState(new PrivateKey().Address, new PrivateKey().Address); var maxLevel = _tableSheets.CharacterLevelSheet.Max(row => row.Value.Level); var expRow = _tableSheets.CharacterLevelSheet[maxLevel]; var maxLevelExp = expRow.Exp; diff --git a/.Lib9c.Tests/Model/State/CrystalCostStateTest.cs b/.Lib9c.Tests/Model/State/CrystalCostStateTest.cs index 8efe51add..a094149b6 100644 --- a/.Lib9c.Tests/Model/State/CrystalCostStateTest.cs +++ b/.Lib9c.Tests/Model/State/CrystalCostStateTest.cs @@ -12,7 +12,7 @@ public class CrystalCostStateTest public void Serialize() { var crystal = 100 * CrystalCalculator.CRYSTAL; - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var state = new CrystalCostState(address, crystal); state.Count++; var serialized = state.Serialize(); diff --git a/.Lib9c.Tests/Model/State/CrystalRandomSkillStateTest.cs b/.Lib9c.Tests/Model/State/CrystalRandomSkillStateTest.cs index 17990c37e..f3c279745 100644 --- a/.Lib9c.Tests/Model/State/CrystalRandomSkillStateTest.cs +++ b/.Lib9c.Tests/Model/State/CrystalRandomSkillStateTest.cs @@ -19,7 +19,7 @@ public CrystalRandomSkillStateTest() [Fact] public void Serialize() { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var state = new CrystalRandomSkillState(address, 1); state.Update(100_000_000, _tableSheets.CrystalStageBuffGachaSheet); state.Update(new List { 1, 2, 3 }); diff --git a/.Lib9c.Tests/Model/State/HammerPointStateTest.cs b/.Lib9c.Tests/Model/State/HammerPointStateTest.cs index ecaaef02b..cc257c391 100644 --- a/.Lib9c.Tests/Model/State/HammerPointStateTest.cs +++ b/.Lib9c.Tests/Model/State/HammerPointStateTest.cs @@ -19,7 +19,7 @@ public HammerPointStateTest() [Fact] public void Serialize() { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var state = new HammerPointState(address, 1); state.AddHammerPoint(3, _tableSheets.CrystalHammerPointSheet); var serialized = state.Serialize(); @@ -33,7 +33,7 @@ public void Serialize() [Fact] public void ResetHammerPoint() { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var state = new HammerPointState(address, 1); state.AddHammerPoint(3, _tableSheets.CrystalHammerPointSheet); var serialized = state.Serialize(); @@ -52,7 +52,7 @@ public void ResetHammerPoint() [Fact] public void AddHammerPoint() { - var address = new PrivateKey().ToAddress(); + var address = new PrivateKey().Address; var state = new HammerPointState(address, 1); var sheet = _tableSheets.CrystalHammerPointSheet; state.AddHammerPoint(3, sheet); diff --git a/.Lib9c.Tests/Model/State/LazyStateTest.cs b/.Lib9c.Tests/Model/State/LazyStateTest.cs index ca77f5fbf..d02660c79 100644 --- a/.Lib9c.Tests/Model/State/LazyStateTest.cs +++ b/.Lib9c.Tests/Model/State/LazyStateTest.cs @@ -55,7 +55,7 @@ public void Serialize() _unloaded.State.Foo = 456L; Assert.Equal( 456L, - (long)((Dictionary)_unloaded.Serialize()).GetValue("foo") + (long)(Integer)((Dictionary)_unloaded.Serialize())["foo"] ); Assert.True(_unloaded.GetStateOrSerializedEncoding(out _, out _)); } @@ -107,8 +107,8 @@ public SampleState(Address address, long foo, string bar) public SampleState(Dictionary serialized) : base(serialized) { - Foo = serialized.GetValue("foo"); - Bar = serialized.GetValue("bar"); + Foo = (Integer)serialized["foo"]; + Bar = (Text)serialized["bar"]; } public SampleState(IValue iValue) diff --git a/.Lib9c.Tests/Model/State/PetStateTest.cs b/.Lib9c.Tests/Model/State/PetStateTest.cs index 35a25793a..38e1a050a 100644 --- a/.Lib9c.Tests/Model/State/PetStateTest.cs +++ b/.Lib9c.Tests/Model/State/PetStateTest.cs @@ -57,7 +57,7 @@ public void LevelUp(int initialLevel, bool shouldThrow) [InlineData(int.MaxValue)] public void DeriveAddress(int petId) { - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var expectedAddress = avatarAddress.Derive($"pet-{petId}"); Assert.Equal(expectedAddress, PetState.DeriveAddress(avatarAddress, petId)); } diff --git a/.Lib9c.Tests/Model/State/RankingState1Test.cs b/.Lib9c.Tests/Model/State/RankingState1Test.cs index 33c8b0456..98e99ce56 100644 --- a/.Lib9c.Tests/Model/State/RankingState1Test.cs +++ b/.Lib9c.Tests/Model/State/RankingState1Test.cs @@ -26,7 +26,7 @@ public void Derive(int index, string expected) public void Serialize() { var state = new RankingState1(); - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; state.UpdateRankingMap(avatarAddress); var serialized = state.Serialize(); @@ -42,7 +42,7 @@ public void Deterministic_Between_SerializeV1_And_SerializeV1_With_Deterministic var state = new RankingState1(); for (var i = 0; i < 1000; i++) { - state.UpdateRankingMap(new PrivateKey().ToAddress()); + state.UpdateRankingMap(new PrivateKey().Address); } var serializedV1 = state.Serialize(); diff --git a/.Lib9c.Tests/Model/State/RankingStateTest.cs b/.Lib9c.Tests/Model/State/RankingStateTest.cs index 40caf6e42..36f02b1e9 100644 --- a/.Lib9c.Tests/Model/State/RankingStateTest.cs +++ b/.Lib9c.Tests/Model/State/RankingStateTest.cs @@ -26,7 +26,7 @@ public void Derive(int index, string expected) public void Serialize() { var state = new RankingState(); - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; state.UpdateRankingMap(avatarAddress); var serialized = state.Serialize(); @@ -42,7 +42,7 @@ public void Deterministic_Between_SerializeV1_And_SerializeV1_With_Deterministic var state = new RankingState(); for (var i = 0; i < 1000; i++) { - state.UpdateRankingMap(new PrivateKey().ToAddress()); + state.UpdateRankingMap(new PrivateKey().Address); } var serializedV1 = state.Serialize(); diff --git a/.Lib9c.Tests/Model/State/ShopStateTest.cs b/.Lib9c.Tests/Model/State/ShopStateTest.cs index d31abcc9e..bc27bb918 100644 --- a/.Lib9c.Tests/Model/State/ShopStateTest.cs +++ b/.Lib9c.Tests/Model/State/ShopStateTest.cs @@ -15,8 +15,8 @@ public class ShopStateTest public void Serialization() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] @@ -51,8 +51,8 @@ public void Serialization() public void Register() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] @@ -85,8 +85,8 @@ public void Register() public void RegisterThrowShopStateAlreadyContainsException() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] @@ -117,8 +117,8 @@ public void RegisterThrowShopStateAlreadyContainsException() public void Unregister() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] @@ -153,8 +153,8 @@ public void Unregister() public void TryUnregister() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] @@ -193,8 +193,8 @@ public void TryUnregister() public void TryGet() { var shopState = new ShopState(); - var agentAddress = new PrivateKey().ToAddress(); - var avatarAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; + var avatarAddress = new PrivateKey().Address; var productId = Guid.NewGuid(); var weaponRow = new EquipmentItemSheet.Row(); weaponRow.Set(new[] diff --git a/.Lib9c.Tests/Model/State/StakeStateTest.cs b/.Lib9c.Tests/Model/State/StakeStateTest.cs index 654374b69..82cb4366e 100644 --- a/.Lib9c.Tests/Model/State/StakeStateTest.cs +++ b/.Lib9c.Tests/Model/State/StakeStateTest.cs @@ -63,7 +63,7 @@ public void SerializeV2() [InlineData(long.MinValue)] public void Claim(long blockIndex) { - var stakeState = new StakeState(new PrivateKey().ToAddress(), 0L); + var stakeState = new StakeState(new PrivateKey().Address, 0L); stakeState.Claim(blockIndex); Assert.Equal(blockIndex, stakeState.ReceivedBlockIndex); } @@ -121,7 +121,7 @@ public void GetRewardStepV1( int expectedStep) { var stakeState = new StakeState( - new PrivateKey().ToAddress(), + new PrivateKey().Address, startedBlockIndex); stakeState.Claim(receivedBlockIndex); var actualStep = stakeState.GetRewardStepV1(currentBlockIndex, rewardStartBlockIndex); @@ -167,7 +167,7 @@ public void GetRewardStep( int expectedStep) { var stakeState = new StakeState( - new PrivateKey().ToAddress(), + new PrivateKey().Address, startedBlockIndex); stakeState.Claim(receivedBlockIndex); var actualStep = stakeState.GetRewardStep(currentBlockIndex, rewardStartBlockIndex); diff --git a/.Lib9c.Tests/Model/State/StateExtensionsTest.cs b/.Lib9c.Tests/Model/State/StateExtensionsTest.cs index 445795d1e..5f1e99d73 100644 --- a/.Lib9c.Tests/Model/State/StateExtensionsTest.cs +++ b/.Lib9c.Tests/Model/State/StateExtensionsTest.cs @@ -25,7 +25,7 @@ public static IEnumerable Get_BigInteger_MemberData() [Fact] public void Address() { - var addr = new PrivateKey().ToAddress(); + var addr = new PrivateKey().Address; var ser = addr.Serialize(); var de = ser.ToAddress(); Assert.Equal(addr, de); @@ -36,7 +36,7 @@ public void Address() [Fact] public void NullableAddress() { - Address? addr = new PrivateKey().ToAddress(); + Address? addr = new PrivateKey().Address; var ser = addr.Serialize(); var de = ser.ToNullableAddress(); Assert.Equal(addr, de); diff --git a/.Lib9c.Tests/Model/State/WeeklyArenaStateTest.cs b/.Lib9c.Tests/Model/State/WeeklyArenaStateTest.cs index 74a5360dc..39cd5fecf 100644 --- a/.Lib9c.Tests/Model/State/WeeklyArenaStateTest.cs +++ b/.Lib9c.Tests/Model/State/WeeklyArenaStateTest.cs @@ -92,22 +92,22 @@ public void GetArenaInfosByFirstRankAndCount( int count, int expectedCount) { - var weeklyArenaState = new WeeklyArenaState(new PrivateKey().ToAddress()); + var weeklyArenaState = new WeeklyArenaState(new PrivateKey().Address); var characterSheet = new CharacterSheet(); characterSheet.Set(_sheets[nameof(CharacterSheet)]); for (var i = 0; i < infoCount; i++) { var avatarState = new AvatarState( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, 0L, _tableSheets.GetAvatarSheets(), new GameConfigState(), default, i.ToString()); weeklyArenaState.Add( - new PrivateKey().ToAddress(), + new PrivateKey().Address, new ArenaInfo(avatarState, characterSheet, new CostumeStatSheet(), true)); } @@ -126,22 +126,22 @@ public void GetArenaInfosByFirstRankAndCount( [InlineData(10, 11)] public void GetArenaInfosByFirstRankAndCountThrow(int infoCount, int firstRank) { - var weeklyArenaState = new WeeklyArenaState(new PrivateKey().ToAddress()); + var weeklyArenaState = new WeeklyArenaState(new PrivateKey().Address); var characterSheet = new CharacterSheet(); characterSheet.Set(_sheets[nameof(CharacterSheet)]); for (var i = 0; i < infoCount; i++) { var avatarState = new AvatarState( - new PrivateKey().ToAddress(), - new PrivateKey().ToAddress(), + new PrivateKey().Address, + new PrivateKey().Address, 0L, _tableSheets.GetAvatarSheets(), new GameConfigState(), default, i.ToString()); weeklyArenaState.Add( - new PrivateKey().ToAddress(), + new PrivateKey().Address, new ArenaInfo(avatarState, characterSheet, new CostumeStatSheet(), true)); } @@ -160,13 +160,13 @@ public void GetArenaInfosByUpperAndLowerRange( int lowerRange, int expectedCount) { - var weeklyArenaState = new WeeklyArenaState(new PrivateKey().ToAddress()); + var weeklyArenaState = new WeeklyArenaState(new PrivateKey().Address); Address targetAddress = default; var characterSheet = new CharacterSheet(); characterSheet.Set(_sheets[nameof(CharacterSheet)]); for (var i = 0; i < infoCount; i++) { - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; if (i + 1 == targetRank) { targetAddress = avatarAddress; @@ -174,14 +174,14 @@ public void GetArenaInfosByUpperAndLowerRange( var avatarState = new AvatarState( avatarAddress, - new PrivateKey().ToAddress(), + new PrivateKey().Address, 0L, _tableSheets.GetAvatarSheets(), new GameConfigState(), default, i.ToString()); weeklyArenaState.Add( - new PrivateKey().ToAddress(), + new PrivateKey().Address, new ArenaInfo(avatarState, characterSheet, new CostumeStatSheet(), true)); } diff --git a/.Lib9c.Tests/Policy/BlockPolicyTest.cs b/.Lib9c.Tests/Policy/BlockPolicyTest.cs index 5fb6fd111..4ec350c38 100644 --- a/.Lib9c.Tests/Policy/BlockPolicyTest.cs +++ b/.Lib9c.Tests/Policy/BlockPolicyTest.cs @@ -36,7 +36,7 @@ public BlockPolicyTest() _privateKey = new PrivateKey(); #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - _currency = Currency.Legacy("NCG", 2, _privateKey.ToAddress()); + _currency = Currency.Legacy("NCG", 2, _privateKey.Address); #pragma warning restore CS0618 } @@ -44,7 +44,7 @@ public BlockPolicyTest() public void ValidateNextBlockTx() { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var blockPolicySource = new BlockPolicySource(); IBlockPolicy policy = blockPolicySource.GetPolicy(null, null, null, null); @@ -82,7 +82,7 @@ public void ValidateNextBlockTx() Assert.NotNull(policy.ValidateNextBlockTx(blockChain, txByStranger)); var newActivatedPrivateKey = new PrivateKey(); - var newActivatedAddress = newActivatedPrivateKey.ToAddress(); + var newActivatedAddress = newActivatedPrivateKey.Address; // Activate with admin account. blockChain.MakeTransaction( @@ -136,7 +136,7 @@ public void ValidateNextBlockTx() public void ValidateNextBlockTx_Mead() { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var blockPolicySource = new BlockPolicySource(); var actionTypeLoader = new NCActionLoader(); IBlockPolicy policy = blockPolicySource.GetPolicy(null, null, null, null); @@ -241,7 +241,7 @@ public void ValidateNextBlockTx_Mead() public void BlockCommitFromNonValidator() { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var nonValidator = new PrivateKey(); var blockPolicySource = new BlockPolicySource(); @@ -270,7 +270,7 @@ public void BlockCommitFromNonValidator() ); blockChain.MakeTransaction( adminPrivateKey, - new ActionBase[] { new AddActivatedAccount(adminPrivateKey.ToAddress()) } + new ActionBase[] { new AddActivatedAccount(adminPrivateKey.Address) } ); Block block1 = blockChain.ProposeBlock(adminPrivateKey); Assert.Throws( @@ -281,7 +281,7 @@ public void BlockCommitFromNonValidator() public void MustNotIncludeBlockActionAtTransaction() { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var authorizedMinerPrivateKey = new PrivateKey(); (ActivationKey ak, PendingActivationState ps) = ActivationKey.Create( @@ -300,7 +300,7 @@ public void MustNotIncludeBlockActionAtTransaction() adminAddress, ImmutableHashSet.Create(adminAddress), new AuthorizedMinersState( - new[] { authorizedMinerPrivateKey.ToAddress() }, + new[] { authorizedMinerPrivateKey.Address }, 5, 10 ), @@ -333,7 +333,7 @@ public void MustNotIncludeBlockActionAtTransaction() public void EarnMiningGoldWhenSuccessMining() { var adminPrivateKey = new PrivateKey(); - var adminAddress = adminPrivateKey.ToAddress(); + var adminAddress = adminPrivateKey.Address; var authorizedMinerPrivateKey = new PrivateKey(); (ActivationKey ak, PendingActivationState ps) = ActivationKey.Create( @@ -352,7 +352,7 @@ public void EarnMiningGoldWhenSuccessMining() adminAddress, ImmutableHashSet.Create(adminAddress), new AuthorizedMinersState( - new[] { authorizedMinerPrivateKey.ToAddress() }, + new[] { authorizedMinerPrivateKey.Address }, 5, 10 ), @@ -404,7 +404,7 @@ public void ValidateNextBlockWithManyTransactions() IStagePolicy stagePolicy = new VolatileStagePolicy(); Block genesis = MakeGenesisBlock( - adminPublicKey.ToAddress(), + adminPublicKey.Address, ImmutableHashSet
.Empty, initialValidators: new Dictionary { { adminPrivateKey.PublicKey, BigInteger.One } }); @@ -505,7 +505,7 @@ public void ValidateNextBlockWithManyTransactionsPerSigner() IStagePolicy stagePolicy = new VolatileStagePolicy(); Block genesis = MakeGenesisBlock( - adminPublicKey.ToAddress(), + adminPublicKey.Address, ImmutableHashSet
.Empty, initialValidators: new Dictionary { { adminPrivateKey.PublicKey, BigInteger.One } }); diff --git a/.Lib9c.Tests/StagePolicyTest.cs b/.Lib9c.Tests/StagePolicyTest.cs index 506b134d7..f1d736b96 100644 --- a/.Lib9c.Tests/StagePolicyTest.cs +++ b/.Lib9c.Tests/StagePolicyTest.cs @@ -33,7 +33,7 @@ public StagePolicyTest() new PrivateKey(), }; _txs = _accounts.ToDictionary( - acc => acc.ToAddress(), + acc => acc.Address, acc => Enumerable .Range(0, 10) .Select( @@ -54,18 +54,18 @@ public void Stage() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][0]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][1]); - stagePolicy.Stage(chain, _txs[_accounts[1].ToAddress()][0]); - stagePolicy.Stage(chain, _txs[_accounts[2].ToAddress()][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][1]); + stagePolicy.Stage(chain, _txs[_accounts[1].Address][0]); + stagePolicy.Stage(chain, _txs[_accounts[2].Address][0]); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1], - _txs[_accounts[1].ToAddress()][0], - _txs[_accounts[2].ToAddress()][0] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1], + _txs[_accounts[1].Address][0], + _txs[_accounts[2].Address][0] ); } @@ -75,16 +75,16 @@ public void StageOverQuota() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][0]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][1]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][2]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][3]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][1]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][2]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][3]); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1] ); } @@ -94,16 +94,16 @@ public void StageOverQuotaInverseOrder() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][3]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][2]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][1]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][3]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][2]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][1]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][0]); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1] ); } @@ -113,16 +113,16 @@ public void StageOverQuotaOutOfOrder() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][2]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][1]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][3]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][2]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][1]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][3]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][0]); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1] ); } @@ -153,20 +153,20 @@ await Task.WhenAll( .Range(0, 40) .Select(i => Task.Run(() => { - stagePolicy.Stage(chain, _txs[_accounts[i / 10].ToAddress()][i % 10]); + stagePolicy.Stage(chain, _txs[_accounts[i / 10].Address][i % 10]); })) ); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1], - _txs[_accounts[1].ToAddress()][0], - _txs[_accounts[1].ToAddress()][1], - _txs[_accounts[2].ToAddress()][0], - _txs[_accounts[2].ToAddress()][1], - _txs[_accounts[3].ToAddress()][0], - _txs[_accounts[3].ToAddress()][1] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1], + _txs[_accounts[1].Address][0], + _txs[_accounts[1].Address][1], + _txs[_accounts[2].Address][0], + _txs[_accounts[2].Address][1], + _txs[_accounts[3].Address][0], + _txs[_accounts[3].Address][1] ); } @@ -176,25 +176,25 @@ public void IterateAfterUnstage() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][0]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][1]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][2]); - stagePolicy.Stage(chain, _txs[_accounts[0].ToAddress()][3]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][0]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][1]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][2]); + stagePolicy.Stage(chain, _txs[_accounts[0].Address][3]); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][0], - _txs[_accounts[0].ToAddress()][1] + _txs[_accounts[0].Address][0], + _txs[_accounts[0].Address][1] ); - stagePolicy.Unstage(chain, _txs[_accounts[0].ToAddress()][0].Id); + stagePolicy.Unstage(chain, _txs[_accounts[0].Address][0].Id); AssertTxs( chain, stagePolicy, - _txs[_accounts[0].ToAddress()][1], - _txs[_accounts[0].ToAddress()][2] + _txs[_accounts[0].Address][1], + _txs[_accounts[0].Address][2] ); } @@ -204,22 +204,22 @@ public void CalculateNextTxNonceCorrectWhenTxOverQuota() NCStagePolicy stagePolicy = new NCStagePolicy(TimeSpan.FromHours(1), 2); BlockChain chain = MakeChainWithStagePolicy(stagePolicy); - long nextTxNonce = chain.GetNextTxNonce(_accounts[0].ToAddress()); + long nextTxNonce = chain.GetNextTxNonce(_accounts[0].Address); Assert.Equal(0, nextTxNonce); var txA = Transaction.Create(nextTxNonce, _accounts[0], default, new ActionBase[0].ToPlainValues()); stagePolicy.Stage(chain, txA); - nextTxNonce = chain.GetNextTxNonce(_accounts[0].ToAddress()); + nextTxNonce = chain.GetNextTxNonce(_accounts[0].Address); Assert.Equal(1, nextTxNonce); var txB = Transaction.Create(nextTxNonce, _accounts[0], default, new ActionBase[0].ToPlainValues()); stagePolicy.Stage(chain, txB); - nextTxNonce = chain.GetNextTxNonce(_accounts[0].ToAddress()); + nextTxNonce = chain.GetNextTxNonce(_accounts[0].Address); Assert.Equal(2, nextTxNonce); var txC = Transaction.Create(nextTxNonce, _accounts[0], default, new ActionBase[0].ToPlainValues()); stagePolicy.Stage(chain, txC); - nextTxNonce = chain.GetNextTxNonce(_accounts[0].ToAddress()); + nextTxNonce = chain.GetNextTxNonce(_accounts[0].Address); Assert.Equal(3, nextTxNonce); AssertTxs( diff --git a/.Lib9c.Tests/TestHelper/BlockChainHelper.cs b/.Lib9c.Tests/TestHelper/BlockChainHelper.cs index eddde7d10..f3ab233af 100644 --- a/.Lib9c.Tests/TestHelper/BlockChainHelper.cs +++ b/.Lib9c.Tests/TestHelper/BlockChainHelper.cs @@ -38,7 +38,7 @@ public static BlockChain MakeBlockChain( stagePolicy ??= new VolatileStagePolicy(); store ??= new DefaultStore(null); stateStore ??= new TrieStateStore(new DefaultKeyValueStore(null)); - Block genesis = MakeGenesisBlock(adminPrivateKey.ToAddress(), ImmutableHashSet
.Empty); + Block genesis = MakeGenesisBlock(adminPrivateKey.Address, ImmutableHashSet
.Empty); return BlockChain.Create( policy, stagePolicy, @@ -117,12 +117,12 @@ public static MakeInitialStateResult MakeInitialState() } var tableSheets = new TableSheets(sheets); - var rankingMapAddress = new PrivateKey().ToAddress(); + var rankingMapAddress = new PrivateKey().Address; - var agentAddress = new PrivateKey().ToAddress(); + var agentAddress = new PrivateKey().Address; var agentState = new AgentState(agentAddress); - var avatarAddress = new PrivateKey().ToAddress(); + var avatarAddress = new PrivateKey().Address; var avatarState = new AvatarState( avatarAddress, agentAddress, @@ -158,7 +158,6 @@ public static MakeInitialStateResult MakeInitialState() BlockIndex = 0, PreviousState = initialState, RandomSeed = 0, - Rehearsal = false, }); return new MakeInitialStateResult( diff --git a/.Lib9c.Tests/Types/BencodexTypesListTest.cs b/.Lib9c.Tests/Types/BencodexTypesListTest.cs index f5f1c7bc6..f5de250cb 100644 --- a/.Lib9c.Tests/Types/BencodexTypesListTest.cs +++ b/.Lib9c.Tests/Types/BencodexTypesListTest.cs @@ -30,9 +30,9 @@ public BencodexTypesListTest() _addressList = new Bencodex.Types.List(new List { - new PrivateKey().ToAddress().Serialize(), - new PrivateKey().ToAddress().Serialize(), - new PrivateKey().ToAddress().Serialize(), + new PrivateKey().Address.Serialize(), + new PrivateKey().Address.Serialize(), + new PrivateKey().Address.Serialize(), }); _descendingAddressList = (Bencodex.Types.List)_addressList .OrderByDescending(element => element.ToAddress()) diff --git a/.Lib9c.Tests/Util/InitializeUtil.cs b/.Lib9c.Tests/Util/InitializeUtil.cs index 54e0d70f7..ebce667c0 100644 --- a/.Lib9c.Tests/Util/InitializeUtil.cs +++ b/.Lib9c.Tests/Util/InitializeUtil.cs @@ -26,7 +26,7 @@ IAccount initialStatesWithAvatarStateV2 bool isDevEx = false, Dictionary sheetsOverride = null) { - adminAddr ??= new PrivateKey().ToAddress(); + adminAddr ??= new PrivateKey().Address; var context = new ActionContext(); var states = new Account(MockState.Empty).SetState( Addresses.Admin, @@ -48,7 +48,7 @@ IAccount initialStatesWithAvatarStateV2 var gameConfigState = new GameConfigState(tuple.sheets[nameof(GameConfigSheet)]); states = states.SetState(gameConfigState.address, gameConfigState.Serialize()); - agentAddr ??= new PrivateKey().ToAddress(); + agentAddr ??= new PrivateKey().Address; var avatarAddr = Addresses.GetAvatarAddress(agentAddr.Value, avatarIndex); var agentState = new AgentState(agentAddr.Value); var avatarState = new AvatarState( diff --git a/.Lib9c.Tools/SubCommand/State.cs b/.Lib9c.Tools/SubCommand/State.cs index b5349186c..f987c8815 100644 --- a/.Lib9c.Tools/SubCommand/State.cs +++ b/.Lib9c.Tools/SubCommand/State.cs @@ -418,76 +418,5 @@ public bool Exists(in KeyBytes key) => IEnumerable IKeyValueStore.ListKeys() => _dictionary.Keys; } - - private static ImmutableDictionary GetTotalDelta( - IReadOnlyList actionEvaluations, - Func toStateKey, - Func<(Address, Currency), string> toFungibleAssetKey, - Func toTotalSupplyKey, - string validatorSetKey) - { - IImmutableSet
stateUpdatedAddresses = actionEvaluations - .SelectMany(a => a.OutputState.Delta.StateUpdatedAddresses) - .ToImmutableHashSet(); - IImmutableSet<(Address, Currency)> updatedFungibleAssets = actionEvaluations - .SelectMany(a => a.OutputState.Delta.UpdatedFungibleAssets) - .ToImmutableHashSet(); - IImmutableSet updatedTotalSupplies = actionEvaluations - .SelectMany(a => a.OutputState.Delta.UpdatedTotalSupplyCurrencies) - .ToImmutableHashSet(); - - IAccount lastStates = actionEvaluations.Count > 0 - ? actionEvaluations[actionEvaluations.Count - 1].OutputState - : null; - ImmutableDictionary totalDelta = - stateUpdatedAddresses.ToImmutableDictionary( - toStateKey, - a => lastStates?.GetState(a) - ).SetItems( - updatedFungibleAssets.Select(pair => - new KeyValuePair( - toFungibleAssetKey(pair), - new Bencodex.Types.Integer( - lastStates?.GetBalance(pair.Item1, pair.Item2).RawValue ?? 0 - ) - ) - ) - ); - - foreach (var currency in updatedTotalSupplies) - { - if (lastStates?.GetTotalSupply(currency).RawValue is { } rawValue) - { - totalDelta = totalDelta.SetItem( - toTotalSupplyKey(currency), - new Bencodex.Types.Integer(rawValue) - ); - } - } - - if (lastStates?.GetValidatorSet() is { } validatorSet && validatorSet.Validators.Any()) - { - totalDelta = totalDelta.SetItem( - validatorSetKey, - validatorSet.Bencoded - ); - } - - return totalDelta; - } - - private const string ValidatorSetKey = "___"; - - private static string ToStateKey(Address address) => ByteUtil.Hex(address.ByteArray); - - private static string ToFungibleAssetKey(Address address, Currency currency) => - "_" + ByteUtil.Hex(address.ByteArray) + - "_" + ByteUtil.Hex(currency.Hash.ByteArray); - - private static string ToFungibleAssetKey((Address, Currency) pair) => - ToFungibleAssetKey(pair.Item1, pair.Item2); - - private static string ToTotalSupplyKey(Currency currency) => - "__" + ByteUtil.Hex(currency.Hash.ByteArray); } } diff --git a/.Libplanet b/.Libplanet index 5cc74a89f..d049d46d1 160000 --- a/.Libplanet +++ b/.Libplanet @@ -1 +1 @@ -Subproject commit 5cc74a89fb99e1bdb908452acd61ba8458802aeb +Subproject commit d049d46d1b7373a90c74d6d51795f3292fb27c25 diff --git a/.Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests/ActionEvaluationSerializerTest.cs b/.Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests/ActionEvaluationSerializerTest.cs index dd5389095..b19d73938 100644 --- a/.Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests/ActionEvaluationSerializerTest.cs +++ b/.Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests/ActionEvaluationSerializerTest.cs @@ -12,7 +12,7 @@ public class ActionEvaluationSerializerTest [Fact] public void Serialization() { - var addresses = Enumerable.Repeat(0, 4).Select(_ => new PrivateKey().ToAddress()).ToImmutableList(); + var addresses = Enumerable.Repeat(0, 4).Select(_ => new PrivateKey().Address).ToImmutableList(); var random = new System.Random(); var buffer = new byte[HashDigest.Size]; @@ -20,6 +20,8 @@ public void Serialization() var prevState = new HashDigest(buffer); random.NextBytes(buffer); var outputState = new HashDigest(buffer); + random.NextBytes(buffer); + var preEvalHash = new HashDigest(buffer); var committed = new CommittedActionEvaluation( action: Null.Value, @@ -27,17 +29,16 @@ public void Serialization() signer: addresses[0], txId: null, miner: addresses[1], - blockIndex: 0, + blockIndex: 456, blockProtocolVersion: 0, - rehearsal: false, previousState: prevState, randomSeed: 123, blockAction: true), outputState: outputState, exception: new UnexpectedlyTerminatedActionException( "", - null, - null, + preEvalHash, + 456, null, null, new NullAction(), @@ -47,7 +48,7 @@ public void Serialization() Assert.Equal(Null.Value, deserialized.Action); Assert.Equal(123, deserialized.InputContext.RandomSeed); - Assert.Equal(0, deserialized.InputContext.BlockIndex); + Assert.Equal(456, deserialized.InputContext.BlockIndex); Assert.Equal(0, deserialized.InputContext.BlockProtocolVersion); Assert.Equal(addresses[0], deserialized.InputContext.Signer); Assert.Equal(addresses[1], deserialized.InputContext.Miner); diff --git a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionContextMarshaller.cs b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionContextMarshaller.cs index d9cf9b6ea..f7a610a16 100644 --- a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionContextMarshaller.cs +++ b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionContextMarshaller.cs @@ -26,7 +26,6 @@ public static Dictionary Marshal(this ICommittedActionContext actionContext) .Add("miner", actionContext.Miner.ToHex()) .Add("block_index", actionContext.BlockIndex) .Add("block_protocol_version", actionContext.BlockProtocolVersion) - .Add("rehearsal", actionContext.Rehearsal) .Add("previous_states", actionContext.PreviousState.ByteArray) .Add("random_seed", actionContext.RandomSeed) .Add("block_action", actionContext.BlockAction); @@ -50,8 +49,7 @@ txIdValue is Binary txIdBinaryValue miner: new Address(((Text)dictionary["miner"]).Value), blockIndex: (Integer)dictionary["block_index"], blockProtocolVersion: (Integer)dictionary["block_protocol_version"], - rehearsal: (Boolean)dictionary["rehearsal"], - previousState: new HashDigest(((Binary)dictionary["previous_states"]).ByteArray), + previousState: new HashDigest(dictionary["previous_states"]), randomSeed: (Integer)dictionary["random_seed"], blockAction: (Boolean)dictionary["block_action"] ); diff --git a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionEvaluationMarshaller.cs b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionEvaluationMarshaller.cs index 79be7c239..408843b61 100644 --- a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionEvaluationMarshaller.cs +++ b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/ActionEvaluationMarshaller.cs @@ -32,7 +32,7 @@ public static ICommittedActionEvaluation Unmarshal(IValue value) return new CommittedActionEvaluation( dictionary["action"], ActionContextMarshaller.Unmarshal((Dictionary)dictionary["input_context"]), - new HashDigest((Binary)dictionary["output_states"]), + new HashDigest(dictionary["output_states"]), dictionary["exception"] is Text typeName ? new Exception(typeName) : null ); } diff --git a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/TransactionMarshaller.cs b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/TransactionMarshaller.cs index a203f523d..06dfbcb5e 100644 --- a/.Libplanet.Extensions.ActionEvaluatorCommonComponents/TransactionMarshaller.cs +++ b/.Libplanet.Extensions.ActionEvaluatorCommonComponents/TransactionMarshaller.cs @@ -9,7 +9,7 @@ public static class TransactionMarshaller private static readonly Codec Codec = new Codec(); // Copied from Libplanet/Tx/TxMarshaler.cs - private static readonly Binary SignatureKey = new byte[] { 0x53 }; // 'S' + private static readonly Binary SignatureKey = new Binary(new byte[] { 0x53 }); // 'S' public static Dictionary Marshal(this ITransaction transaction) { diff --git a/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Libplanet.Extensions.RemoteActionEvaluator.Tests.csproj b/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Libplanet.Extensions.RemoteActionEvaluator.Tests.csproj deleted file mode 100644 index bf79b854e..000000000 --- a/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Libplanet.Extensions.RemoteActionEvaluator.Tests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - - net6.0 - enable - enable - - false - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - diff --git a/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Usings.cs b/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Usings.cs deleted file mode 100644 index c802f4480..000000000 --- a/.Libplanet.Extensions.RemoteActionEvaluator.Tests/Usings.cs +++ /dev/null @@ -1 +0,0 @@ -global using Xunit; diff --git a/.Libplanet.Extensions.RemoteActionEvaluator/AssemblyInfo.cs b/.Libplanet.Extensions.RemoteActionEvaluator/AssemblyInfo.cs deleted file mode 100644 index 632c7b018..000000000 --- a/.Libplanet.Extensions.RemoteActionEvaluator/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("Libplanet.Extensions.RemoteActionEvaluator.Tests")] diff --git a/.Libplanet.Extensions.RemoteActionEvaluator/Libplanet.Extensions.RemoteActionEvaluator.csproj b/.Libplanet.Extensions.RemoteActionEvaluator/Libplanet.Extensions.RemoteActionEvaluator.csproj deleted file mode 100644 index 3e68102fe..000000000 --- a/.Libplanet.Extensions.RemoteActionEvaluator/Libplanet.Extensions.RemoteActionEvaluator.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - net6.0 - enable - enable - - - - - - - - - diff --git a/.Libplanet.Extensions.RemoteActionEvaluator/RemoteActionEvaluator.cs b/.Libplanet.Extensions.RemoteActionEvaluator/RemoteActionEvaluator.cs deleted file mode 100644 index 1b2ec2afe..000000000 --- a/.Libplanet.Extensions.RemoteActionEvaluator/RemoteActionEvaluator.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Immutable; -using System.Net.Http.Json; -using System.Security.Cryptography; -using Lib9c.StateService.Shared; -using Libplanet.Action; -using Libplanet.Action.Loader; -using Libplanet.Types.Blocks; -using Libplanet.Extensions.ActionEvaluatorCommonComponents; -using Libplanet.Common; - -namespace Libplanet.Extensions.RemoteActionEvaluator; - -public class RemoteActionEvaluator : IActionEvaluator -{ - private readonly Uri _endpoint; - - public RemoteActionEvaluator(Uri endpoint) - { - _endpoint = endpoint; - } - - public IActionLoader ActionLoader => throw new NotSupportedException(); - - public IReadOnlyList Evaluate( - IPreEvaluationBlock block, HashDigest? baseStateRootHash) - { - using var httpClient = new HttpClient(); - var response = httpClient.PostAsJsonAsync(_endpoint, new RemoteEvaluationRequest - { - PreEvaluationBlock = PreEvaluationBlockMarshaller.Serialize(block), - BaseStateRootHash = baseStateRootHash is null - ? new byte[]{} - : baseStateRootHash.Value.ToByteArray(), - }).Result; - var evaluationResponse = response.Content.ReadFromJsonAsync().Result; - - var actionEvaluations = evaluationResponse.Evaluations.Select(ActionEvaluationMarshaller.Deserialize) - .ToImmutableList(); - - return actionEvaluations; - } -} diff --git a/.gitallowed b/.gitallowed index 8015d188f..fc39bc3af 100644 --- a/.gitallowed +++ b/.gitallowed @@ -15,3 +15,6 @@ f8960846e9ae4ad1c23686f74c8e5f80f22336b6f2175be21db82afa8823c92d # For NCStagePolicy.cs 300826da62b595d8cd663dadf04995a7411534d1cdc17dac75ce88754472f774 210d1374d8f068de657de6b991e63888da9cadbc68e505ac917b35568b5340f8 + +# For MintAssetsTest +7f5d25371e58c0f3d5a33511450f73c2e0fa4fac32a92e1cbe64d3bf2fef6328 \ No newline at end of file diff --git a/.github/workflows/lib9c_plugin_build_and_push_s3.yaml b/.github/workflows/lib9c_plugin_build_and_push_s3.yaml index 4634826a6..041d349df 100644 --- a/.github/workflows/lib9c_plugin_build_and_push_s3.yaml +++ b/.github/workflows/lib9c_plugin_build_and_push_s3.yaml @@ -1,6 +1,10 @@ name: lib9c plugin build and push s3 on: + push: + branches: + - development + - main workflow_dispatch: jobs: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8191a59ac..9de2193ed 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -41,27 +41,3 @@ jobs: fi env: NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} - s3-lib9c-stateservice: - strategy: - matrix: - runtime: ["osx-arm64", "linux-arm64", "linux-x64", "win-x64"] - name: Publish Lib9c.StateService (${{ matrix.runtime }}) - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 6.0.400 - - name: Publish Lib9c.StateService - run: dotnet publish ./.Lib9c.StateService/Lib9c.StateService.csproj -o out -r ${{ matrix.runtime }} - - name: Compress the build result - run: zip -r ../${{ matrix.runtime }}.zip . - working-directory: ./out - - name: Upload S3 - run: aws s3 cp ${{ matrix.runtime }}.zip s3://9c-dx/lib9c-stateservices/${{ github.sha }}/ - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_REGION: "us-east-2" diff --git a/.github/workflows/push_docker_image.yaml b/.github/workflows/push_docker_image.yaml deleted file mode 100644 index 632139460..000000000 --- a/.github/workflows/push_docker_image.yaml +++ /dev/null @@ -1,100 +0,0 @@ -name: push docker image - -on: - push: - branches: - - main - - rc-* - - development - - previewnet - - release/* - tags: - - "*" - workflow_dispatch: - inputs: - imageTag: - description: 'Custom docker image tag if needed' - default: '' - -jobs: - build_and_push: - name: build_and_push (${{ matrix.docker.repo }}) - strategy: - matrix: - docker: - - repo: planetariumhq/lib9c-stateservice - dockerfile: Dockerfile - if: github.ref_type == 'branch' - runs-on: ubuntu-latest - steps: - - name: checkout - uses: actions/checkout@v3 - with: - submodules: recursive - - name: login - run: | - docker login \ - --username '${{ secrets.DOCKER_USERNAME }}' \ - --password '${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}' - - name: setup-qemu - run: | - docker run --rm --privileged multiarch/qemu-user-static \ - --reset \ - -p yes - - name: build-and-push-amd64 - run: | - docker build . \ - -f ${{ matrix.docker.dockerfile }}.amd64 \ - -t ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \ - --build-arg COMMIT=git-${{ github.sha }} - docker push ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 - - name: build-and-push-arm64v8 - run: | - docker build . \ - -f ${{ matrix.docker.dockerfile }}.arm64v8 \ - -t ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 \ - --build-arg COMMIT=git-${{ github.sha }} - docker push ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 - - name: merge-manifest-and-push - run: | - docker manifest create ${{ matrix.docker.repo }}:git-${{ github.sha }} \ - --amend ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \ - --amend ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 - docker manifest push ${{ matrix.docker.repo }}:git-${{ github.sha }} - - tag: - name: tag (${{ matrix.docker.repo }}) - strategy: - matrix: - docker: - - repo: planetariumhq/lib9c-stateservice - if: github.ref_type == 'tag' || github.event.inputs.imageTag != '' - runs-on: ubuntu-latest - steps: - - name: login - run: | - docker login \ - --username '${{ secrets.DOCKER_USERNAME }}' \ - --password '${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}' - - name: push git tagged version - run: | - docker pull ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 - if [[ -z "${{ github.event.inputs.imageTag }}" ]]; then - export IMAGE_TAG=${{ github.ref_name }} - else - export IMAGE_TAG=${{ github.event.inputs.imageTag }} - fi - - docker tag \ - ${{ matrix.docker.repo }}:git-${{ github.sha }}-amd64 \ - ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64 - docker push ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64 - docker pull ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 - docker tag \ - ${{ matrix.docker.repo }}:git-${{ github.sha }}-arm64v8 \ - ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8 - docker push ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8 - docker manifest create ${{ matrix.docker.repo }}:$IMAGE_TAG \ - --amend ${{ matrix.docker.repo }}:$IMAGE_TAG-amd64 \ - --amend ${{ matrix.docker.repo }}:$IMAGE_TAG-arm64v8 - docker manifest push ${{ matrix.docker.repo }}:$IMAGE_TAG diff --git a/Dockerfile.amd64 b/Dockerfile.amd64 deleted file mode 100644 index 3dbce3ebd..000000000 --- a/Dockerfile.amd64 +++ /dev/null @@ -1,32 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy AS build-env -WORKDIR /app - -# Copy csproj and restore as distinct layers -COPY ./Lib9c/Lib9c.csproj ./Lib9c/ -COPY ./.Libplanet.Extensions.RemoteActionEvaluator/Libplanet.Extensions.RemoteActionEvaluator.csproj ./Libplanet.Extensions.RemoteActionEvaluator/ -RUN dotnet restore Lib9c -RUN dotnet restore Libplanet.Extensions.RemoteActionEvaluator - -# Copy everything else and build -COPY . ./ -RUN dotnet publish .Lib9c.StateService/Lib9c.StateService.csproj \ - -c Release \ - -r linux-x64 \ - -o out \ - --self-contained - -# Build runtime image -FROM mcr.microsoft.com/dotnet/aspnet:6.0 -WORKDIR /app -RUN apt-get update && apt-get install -y libc6-dev -COPY --from=build-env /app/out . - -# Install native deps & utilities for production -RUN apt-get update \ - && apt-get install -y --allow-unauthenticated \ - libc6-dev jq curl \ - && rm -rf /var/lib/apt/lists/* - -VOLUME /data - -ENTRYPOINT ["dotnet", "Lib9c.StateService.dll"] diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8 deleted file mode 100644 index 32223cc5d..000000000 --- a/Dockerfile.arm64v8 +++ /dev/null @@ -1,32 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy AS build-env -WORKDIR /app - -# Copy csproj and restore as distinct layers -COPY ./Lib9c/Lib9c.csproj ./Lib9c/ -COPY ./.Libplanet.Extensions.RemoteActionEvaluator/Libplanet.Extensions.RemoteActionEvaluator.csproj ./Libplanet.Extensions.RemoteActionEvaluator/ -RUN dotnet restore Lib9c -RUN dotnet restore Libplanet.Extensions.RemoteActionEvaluator - -# Copy everything else and build -COPY . ./ -RUN dotnet publish .Lib9c.StateService/Lib9c.StateService.csproj \ - -c Release \ - -r linux-arm64 \ - -o out \ - --self-contained - -# Build runtime image -FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim-arm64v8 -WORKDIR /app -RUN apt-get update && apt-get install -y libc6-dev -COPY --from=build-env /app/out . - -# Install native deps & utilities for production -RUN apt-get update \ - && apt-get install -y --allow-unauthenticated \ - libc6-dev jq curl \ - && rm -rf /var/lib/apt/lists/* - -VOLUME /data - -ENTRYPOINT ["dotnet", "Lib9c.StateService.dll"] diff --git a/Lib9c.Abstractions/IRuneSummonV1.cs b/Lib9c.Abstractions/IRuneSummonV1.cs new file mode 100644 index 000000000..2ae332e5b --- /dev/null +++ b/Lib9c.Abstractions/IRuneSummonV1.cs @@ -0,0 +1,12 @@ +using Libplanet.Crypto; + +namespace Lib9c.Abstractions +{ + public interface IRuneSummonV1 + { + Address AvatarAddress { get; } + int GroupId { get; } + + int SummonCount { get; } + } +} diff --git a/Lib9c.DevExtensions/Action/CreateArenaDummy.cs b/Lib9c.DevExtensions/Action/CreateArenaDummy.cs index ef74b1a78..3fedeb9d0 100644 --- a/Lib9c.DevExtensions/Action/CreateArenaDummy.cs +++ b/Lib9c.DevExtensions/Action/CreateArenaDummy.cs @@ -61,7 +61,7 @@ public override IAccount Execute(IActionContext context) for (var i = 0; i < accountCount; i++) { var privateKey = new PrivateKey(); - var agentAddress = privateKey.PublicKey.ToAddress(); + var agentAddress = privateKey.PublicKey.Address; var avatarAddress = agentAddress.Derive( string.Format( CultureInfo.InvariantCulture, diff --git a/Lib9c.DevExtensions/Action/CreateTestbed.cs b/Lib9c.DevExtensions/Action/CreateTestbed.cs index da77b7f94..211819ab9 100644 --- a/Lib9c.DevExtensions/Action/CreateTestbed.cs +++ b/Lib9c.DevExtensions/Action/CreateTestbed.cs @@ -79,7 +79,7 @@ public override IAccount Execute(IActionContext context) random.GenerateRandomGuid())) .ToList(); - var agentAddress = _privateKey.PublicKey.ToAddress(); + var agentAddress = _privateKey.PublicKey.Address; var states = context.PreviousState; var avatarAddress = agentAddress.Derive( diff --git a/Lib9c.DevExtensions/Utils.cs b/Lib9c.DevExtensions/Utils.cs index 1c84a2848..5e2dcc1a7 100644 --- a/Lib9c.DevExtensions/Utils.cs +++ b/Lib9c.DevExtensions/Utils.cs @@ -210,7 +210,7 @@ public static void CreateActivationKey( Parallel.For(0, countOfKeys, _ => { var pendingKey = new PrivateKey(); - var nonce = pendingKey.PublicKey.ToAddress().ToByteArray(); + var nonce = pendingKey.PublicKey.Address.ToByteArray(); (ActivationKey ak, PendingActivationState s) = ActivationKey.Create(pendingKey, nonce); ps.Add(s); diff --git a/Lib9c.MessagePack/AccountStateDelta.cs b/Lib9c.MessagePack/AccountStateDelta.cs index 864d8eea5..1c5515758 100644 --- a/Lib9c.MessagePack/AccountStateDelta.cs +++ b/Lib9c.MessagePack/AccountStateDelta.cs @@ -19,7 +19,6 @@ public struct AccountStateDelta : IAccount private IImmutableDictionary _states; private IImmutableDictionary<(Address, Currency), BigInteger> _balances; private IImmutableDictionary _totalSupplies; - private MockAccountDelta _delta; public IImmutableSet<(Address, Currency)> TotalUpdatedFungibleAssets => ImmutableHashSet<(Address, Currency)>.Empty; @@ -30,7 +29,6 @@ public AccountStateDelta( IImmutableDictionary totalSupplies ) { - _delta = new MockAccountDelta(states, balances, totalSupplies); _states = states; _balances = balances; _totalSupplies = totalSupplies; @@ -42,10 +40,10 @@ public AccountStateDelta(Dictionary states, List balances, Dictionary totalSuppl kv => new Address(kv.Key), kv => kv.Value), balances.Cast().ToImmutableDictionary( - record => (new Address(((Binary)record["address"]).ByteArray), new Currency((Dictionary)record["currency"])), + record => (new Address(record["address"]), new Currency((Dictionary)record["currency"])), record => (BigInteger)(Integer)record["amount"]), totalSupplies.ToImmutableDictionary( - kv => new Currency(new Codec().Decode((Binary)kv.Key)), + kv => new Currency(new Codec().Decode(((Binary)kv.Key).ToByteArray())), kv => (BigInteger)(Integer)kv.Value)) { } @@ -66,8 +64,6 @@ public AccountStateDelta(byte[] bytes) public ITrie Trie => throw new NotSupportedException(); - public IAccountDelta Delta => _delta; - public IValue? GetState(Address address) => _states.ContainsKey(address) ? _states[address] @@ -231,32 +227,5 @@ public ValidatorSet GetValidatorSet() { return new ValidatorSet(); } - - private class MockAccountDelta : IAccountDelta - { - private IImmutableDictionary _states; - private IImmutableDictionary<(Address, Currency), BigInteger> _fungibles; - private IImmutableDictionary _totalSupplies; - - public MockAccountDelta( - IImmutableDictionary states, - IImmutableDictionary<(Address, Currency), BigInteger> balances, - IImmutableDictionary totalSupplies) - { - _states = states; - _fungibles = balances; - _totalSupplies = totalSupplies; - } - - public IImmutableSet
UpdatedAddresses => StateUpdatedAddresses.Union(FungibleUpdatedAddresses); - public IImmutableSet
StateUpdatedAddresses => _states.Keys.ToImmutableHashSet(); - public IImmutableDictionary States => _states; - public IImmutableSet
FungibleUpdatedAddresses => _fungibles.Keys.Select(pair => pair.Item1).ToImmutableHashSet(); - public IImmutableSet<(Address, Currency)> UpdatedFungibleAssets => _fungibles.Keys.ToImmutableHashSet(); - public IImmutableDictionary<(Address, Currency), BigInteger> Fungibles => _fungibles; - public IImmutableSet UpdatedTotalSupplyCurrencies => _totalSupplies.Keys.ToImmutableHashSet(); - public IImmutableDictionary TotalSupplies => _totalSupplies; - public ValidatorSet? ValidatorSet => null; - } } } diff --git a/Lib9c.MessagePack/Formatters/AccountStateDeltaFormatter.cs b/Lib9c.MessagePack/Formatters/AccountStateDeltaFormatter.cs deleted file mode 100644 index 107078807..000000000 --- a/Lib9c.MessagePack/Formatters/AccountStateDeltaFormatter.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Buffers; -using System.Collections.Generic; -using System.Linq; -using Bencodex; -using Bencodex.Types; -using Libplanet.Action.State; -using MessagePack; -using MessagePack.Formatters; - -namespace Lib9c.Formatters -{ - public class AccountStateDeltaFormatter : IMessagePackFormatter - { - public void Serialize(ref MessagePackWriter writer, IAccount value, - MessagePackSerializerOptions options) - { - var state = new Dictionary( - value.Delta.UpdatedAddresses.Select(addr => new KeyValuePair( - (Binary)addr.ToByteArray(), - value.GetState(addr) ?? new Bencodex.Types.Null() - )) - ); - var balance = new Bencodex.Types.List( -#pragma warning disable LAA1002 - value.Delta.UpdatedFungibleAssets.Select(pair => -#pragma warning restore LAA1002 - new Bencodex.Types.Dictionary(new[] - { - new KeyValuePair((Text) "address", (Binary) pair.Item1.ByteArray), - new KeyValuePair((Text) "currency", pair.Item2.Serialize()), - new KeyValuePair((Text) "amount", (Integer) value.GetBalance(pair.Item1, pair.Item2).RawValue), - }) - ).Cast() - ); - var totalSupply = new Dictionary( - value.Delta.UpdatedTotalSupplyCurrencies.Select(currency => - new KeyValuePair( - (Binary)new Codec().Encode(currency.Serialize()), - (Integer)value.GetTotalSupply(currency).RawValue))); - - var bdict = new Dictionary(new[] - { - new KeyValuePair((Text) "states", state), - new KeyValuePair((Text) "balances", balance), - new KeyValuePair((Text) "totalSupplies", totalSupply), - }); - - writer.Write(new Codec().Encode(bdict)); - } - - public IAccount Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options) - { - options.Security.DepthStep(ref reader); - - var bytes = reader.ReadBytes(); - if (bytes is null) - { - throw new NullReferenceException($"ReadBytes from serialized {nameof(IAccount)} is null."); - } - - return new AccountStateDelta(new Codec().Decode(bytes.Value.ToArray())); - } - } -} diff --git a/Lib9c.MessagePack/Formatters/NineChroniclesResolverGetFormatterHelper.cs b/Lib9c.MessagePack/Formatters/NineChroniclesResolverGetFormatterHelper.cs index 0a466d925..c87c3e394 100644 --- a/Lib9c.MessagePack/Formatters/NineChroniclesResolverGetFormatterHelper.cs +++ b/Lib9c.MessagePack/Formatters/NineChroniclesResolverGetFormatterHelper.cs @@ -17,7 +17,6 @@ public static class NineChroniclesResolverGetFormatterHelper {typeof(Address), new AddressFormatter()}, {typeof(Exception), new ExceptionFormatter()}, {typeof(FungibleAssetValue), new FungibleAssetValueFormatter()}, - {typeof(IAccount), new AccountStateDeltaFormatter()}, {typeof(PublicKey), new PublicKeyFormatter()}, {typeof(Dictionary), new BencodexFormatter()}, {typeof(IValue), new BencodexFormatter()}, diff --git a/Lib9c.Policy/Policy/BlockPolicySource.cs b/Lib9c.Policy/Policy/BlockPolicySource.cs index 28df6ce2e..634274d7b 100644 --- a/Lib9c.Policy/Policy/BlockPolicySource.cs +++ b/Lib9c.Policy/Policy/BlockPolicySource.cs @@ -229,12 +229,21 @@ internal static TxPolicyViolationException ValidateNextBlockTxRaw( return null; } } - if (transaction.MaxGasPrice is null || transaction.GasLimit is null) + + if (!(transaction.MaxGasPrice is { } gasPrice && transaction.GasLimit is { } gasLimit)) + { + return new TxPolicyViolationException( + "Transaction has no gas price or limit.", + transaction.Id); + } + + if (gasPrice.Sign < 0 || gasLimit < 0) { - return new - TxPolicyViolationException("Transaction has no gas price or limit.", + return new TxPolicyViolationException( + "Transaction has negative gas price or limit.", transaction.Id); } + if (transaction.MaxGasPrice * transaction.GasLimit > blockChain.GetBalance(transaction.Signer, Currencies.Mead)) { return new TxPolicyViolationException( diff --git a/Lib9c.Policy/Policy/MaxTransactionsBytesPolicy.cs b/Lib9c.Policy/Policy/MaxTransactionsBytesPolicy.cs index c61a80a29..b6401c48b 100644 --- a/Lib9c.Policy/Policy/MaxTransactionsBytesPolicy.cs +++ b/Lib9c.Policy/Policy/MaxTransactionsBytesPolicy.cs @@ -58,9 +58,6 @@ private MaxTransactionsBytesPolicy( .Add(new SpannedSubPolicy( startIndex: 0L, value: 1024L * 1024L * 15L)) // 15 MiB - .Add(new SpannedSubPolicy( - startIndex: 1L, - value: 1024L * 100L)) // 100 KiB .Add(new SpannedSubPolicy( startIndex: 2_000_001L, value: 1024L * 1024L * 10L)) // 10 MiB diff --git a/Lib9c.Utils/BlockHelper.cs b/Lib9c.Utils/BlockHelper.cs index 4a3a80333..a28fa9c51 100644 --- a/Lib9c.Utils/BlockHelper.cs +++ b/Lib9c.Utils/BlockHelper.cs @@ -54,7 +54,7 @@ public static Block ProposeGenesisBlock( activatedAccounts ??= ImmutableHashSet
.Empty; #pragma warning disable CS0618 // Use of obsolete method Currency.Legacy(): https://github.com/planetarium/lib9c/discussions/1319 - goldCurrency ??= Currency.Legacy("NCG", 2, privateKey.ToAddress()); + goldCurrency ??= Currency.Legacy("NCG", 2, privateKey.Address); #pragma warning restore CS0618 var initialStatesAction = new InitializeStates diff --git a/Lib9c.sln b/Lib9c.sln index b2c1c6bf7..79f6d8b41 100644 --- a/Lib9c.sln +++ b/Lib9c.sln @@ -64,16 +64,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.Action EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests", ".Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests\Libplanet.Extensions.ActionEvaluatorCommonComponents.Tests.csproj", "{EACB2E8D-9A13-491C-BACD-5D79C6C13783}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.RemoteActionEvaluator", ".Libplanet.Extensions.RemoteActionEvaluator\Libplanet.Extensions.RemoteActionEvaluator.csproj", "{0ED5DBA2-C334-40F2-8EB6-2B4D15C1AB4B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.RemoteActionEvaluator.Tests", ".Libplanet.Extensions.RemoteActionEvaluator.Tests\Libplanet.Extensions.RemoteActionEvaluator.Tests.csproj", "{3608A63A-A52D-4EB5-A96D-36C8F11CE603}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.RemoteBlockChainStates", ".Libplanet.Extensions.RemoteBlockChainStates\Libplanet.Extensions.RemoteBlockChainStates.csproj", "{63544447-4FCD-48D1-898C-974FBA6834AD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.StateService", ".Lib9c.StateService\Lib9c.StateService.csproj", "{EB97AB26-1C8F-48F5-97FF-8A6DF8FAB879}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.StateService.Shared", ".Lib9c.StateService.Shared\Lib9c.StateService.Shared.csproj", "{5D3489AE-A403-4ADD-94E9-48463A42643E}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.Plugin", ".Lib9c.Plugin\Lib9c.Plugin.csproj", "{484A5A5B-D610-42D4-9CAC-B19EA1A71281}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.Plugin.Shared", ".Lib9c.Plugin.Shared\Lib9c.Plugin.Shared.csproj", "{76F6C25E-94D2-4EA9-B88D-0249F44D1D16}" @@ -192,26 +184,10 @@ Global {EACB2E8D-9A13-491C-BACD-5D79C6C13783}.Debug|Any CPU.Build.0 = Debug|Any CPU {EACB2E8D-9A13-491C-BACD-5D79C6C13783}.Release|Any CPU.ActiveCfg = Release|Any CPU {EACB2E8D-9A13-491C-BACD-5D79C6C13783}.Release|Any CPU.Build.0 = Release|Any CPU - {0ED5DBA2-C334-40F2-8EB6-2B4D15C1AB4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0ED5DBA2-C334-40F2-8EB6-2B4D15C1AB4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0ED5DBA2-C334-40F2-8EB6-2B4D15C1AB4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0ED5DBA2-C334-40F2-8EB6-2B4D15C1AB4B}.Release|Any CPU.Build.0 = Release|Any CPU - {3608A63A-A52D-4EB5-A96D-36C8F11CE603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3608A63A-A52D-4EB5-A96D-36C8F11CE603}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3608A63A-A52D-4EB5-A96D-36C8F11CE603}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3608A63A-A52D-4EB5-A96D-36C8F11CE603}.Release|Any CPU.Build.0 = Release|Any CPU {63544447-4FCD-48D1-898C-974FBA6834AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63544447-4FCD-48D1-898C-974FBA6834AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {63544447-4FCD-48D1-898C-974FBA6834AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {63544447-4FCD-48D1-898C-974FBA6834AD}.Release|Any CPU.Build.0 = Release|Any CPU - {EB97AB26-1C8F-48F5-97FF-8A6DF8FAB879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB97AB26-1C8F-48F5-97FF-8A6DF8FAB879}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB97AB26-1C8F-48F5-97FF-8A6DF8FAB879}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB97AB26-1C8F-48F5-97FF-8A6DF8FAB879}.Release|Any CPU.Build.0 = Release|Any CPU - {5D3489AE-A403-4ADD-94E9-48463A42643E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D3489AE-A403-4ADD-94E9-48463A42643E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D3489AE-A403-4ADD-94E9-48463A42643E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D3489AE-A403-4ADD-94E9-48463A42643E}.Release|Any CPU.Build.0 = Release|Any CPU {484A5A5B-D610-42D4-9CAC-B19EA1A71281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {484A5A5B-D610-42D4-9CAC-B19EA1A71281}.Debug|Any CPU.Build.0 = Debug|Any CPU {484A5A5B-D610-42D4-9CAC-B19EA1A71281}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/Lib9c/Action/ActivateAccount.cs b/Lib9c/Action/ActivateAccount.cs index 9e916e403..c92c5ce4d 100644 --- a/Lib9c/Action/ActivateAccount.cs +++ b/Lib9c/Action/ActivateAccount.cs @@ -81,7 +81,7 @@ public override void LoadPlainValue(IValue plainValue) { var asDict = (Dictionary)((Dictionary)plainValue)["values"]; PendingAddress = asDict["pa"].ToAddress(); - Signature = (Binary) asDict["s"]; + Signature = ((Binary)asDict["s"]).ToByteArray(); } public Address GetPendingAddress() => PendingAddress; diff --git a/Lib9c/Action/ActivateAccount0.cs b/Lib9c/Action/ActivateAccount0.cs index 9f2640a22..287a8479d 100644 --- a/Lib9c/Action/ActivateAccount0.cs +++ b/Lib9c/Action/ActivateAccount0.cs @@ -84,7 +84,7 @@ public override void LoadPlainValue(IValue plainValue) { var asDict = (Dictionary)((Dictionary)plainValue)["values"]; PendingAddress = asDict["pending_address"].ToAddress(); - Signature = (Binary) asDict["signature"]; + Signature = ((Binary)asDict["signature"]).ToByteArray(); } public Address GetPendingAddress() => PendingAddress; diff --git a/Lib9c/Action/Coupons/RedeemCoupon.cs b/Lib9c/Action/Coupons/RedeemCoupon.cs index 9e1014501..99423b859 100644 --- a/Lib9c/Action/Coupons/RedeemCoupon.cs +++ b/Lib9c/Action/Coupons/RedeemCoupon.cs @@ -81,7 +81,7 @@ public override IAccount Execute(IActionContext context) protected override void LoadPlainValueInternal(IImmutableDictionary plainValue) { - CouponId = new Guid((Binary)plainValue["coupon_id"]); + CouponId = new Guid(((Binary)plainValue["coupon_id"]).ToByteArray()); AvatarAddress = new Address(plainValue["avatar_address"]); } } diff --git a/Lib9c/Action/Coupons/TransferCoupons.cs b/Lib9c/Action/Coupons/TransferCoupons.cs index 9771f666e..577113739 100644 --- a/Lib9c/Action/Coupons/TransferCoupons.cs +++ b/Lib9c/Action/Coupons/TransferCoupons.cs @@ -77,7 +77,7 @@ protected override void LoadPlainValueInternal(IImmutableDictionary new Address(pair.Key), pair => (IImmutableSet)((Bencodex.Types.List)pair.Value).Select( - value => new Guid((Binary)value) + value => new Guid(((Binary)value).ToByteArray()) ).ToImmutableHashSet() ); } diff --git a/Lib9c/Action/CreatePendingActivations.cs b/Lib9c/Action/CreatePendingActivations.cs index 988a27412..c83358b22 100644 --- a/Lib9c/Action/CreatePendingActivations.cs +++ b/Lib9c/Action/CreatePendingActivations.cs @@ -24,13 +24,12 @@ public class CreatePendingActivations : ActionBase, ICreatePendingActivationsV1 public IList<(byte[] Address, byte[] Nonce, byte[] PublicKey)> PendingActivations { get; internal set; } IEnumerable ICreatePendingActivationsV1.PendingActivations => - PendingActivations.Select(t => - new List(new Binary[] { t.Address, t.Nonce, t.PublicKey }.Cast())); + PendingActivations.Select(t => new List(new[] { t.Address, t.Nonce, t.PublicKey })); public override IValue PlainValue => Dictionary.Empty .Add("type_id", "create_pending_activations") .Add("values", PendingActivations - .Select(t => new List(new Binary[] { t.Address, t.Nonce, t.PublicKey }.Cast())) + .Select(t => new List(new[] { t.Address, t.Nonce, t.PublicKey })) .Serialize()); public CreatePendingActivations() diff --git a/Lib9c/Action/Garages/BulkUnloadFromGarages.cs b/Lib9c/Action/Garages/BulkUnloadFromGarages.cs index d6d6f5fcc..ee569460f 100644 --- a/Lib9c/Action/Garages/BulkUnloadFromGarages.cs +++ b/Lib9c/Action/Garages/BulkUnloadFromGarages.cs @@ -119,7 +119,6 @@ public override IAccount Execute(IActionContext context) context.UseGas(1); var states = context.PreviousState; - if (context.Rehearsal) return states; // validate var addressesHex = GetSignerAndOtherAddressesHex(context); diff --git a/Lib9c/Action/MintAssets.cs b/Lib9c/Action/MintAssets.cs index ceedc8f43..dd82d6c3d 100644 --- a/Lib9c/Action/MintAssets.cs +++ b/Lib9c/Action/MintAssets.cs @@ -108,17 +108,27 @@ public override IAccount Execute(IActionContext context) { if ( state.GetState(recipient) is Dictionary dict && - dict.TryGetValue((Text)SerializeKeys.MailBoxKey, out IValue rawMailBox) + dict.TryGetValue((Text)SerializeKeys.MailBoxKey, out IValue rawMailBox) && + dict.TryGetValue((Text)SerializeKeys.AgentAddressKey, out IValue rawAgentAddress) ) { + var agentAddress = rawAgentAddress.ToAddress(); var mailBox = new MailBox((List)rawMailBox); (List favs, List fivs) = mailRecords[recipient]; + List<(Address recipient, FungibleAssetValue v)> mailFavs = + favs.Select(v => (recipient, v)) + .ToList(); + + if (mailRecords.TryGetValue(agentAddress, out (List agentFavs, List _) agentRecords)) + { + mailFavs.AddRange(agentRecords.agentFavs.Select(v => (agentAddress, v))); + } mailBox.Add( new UnloadFromMyGaragesRecipientMail( context.BlockIndex, rng.GenerateRandomGuid(), context.BlockIndex, - favs.Select(v => (recipient, v)), + mailFavs, fivs.Select(v => (v.Id, v.Count)), Memo ) diff --git a/Lib9c/Action/RuneSummon.cs b/Lib9c/Action/RuneSummon.cs new file mode 100644 index 000000000..9255b34fc --- /dev/null +++ b/Lib9c/Action/RuneSummon.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Data; +using System.Linq; +using Bencodex.Types; +using Lib9c; +using Lib9c.Abstractions; +using Libplanet.Action; +using Libplanet.Action.State; +using Libplanet.Crypto; +using Libplanet.Types.Assets; +using Nekoyume.Action.Exceptions; +using Nekoyume.Extensions; +using Nekoyume.Model.State; +using Nekoyume.TableData; +using Nekoyume.TableData.Summon; +using Serilog; +using static Lib9c.SerializeKeys; + +namespace Nekoyume.Action +{ + [ActionType("rune_summon")] + public class RuneSummon : GameAction, IRuneSummonV1 + { + public const string AvatarAddressKey = "aa"; + public Address AvatarAddress; + + public const string GroupIdKey = "gid"; + public int GroupId; + + public const string SummonCountKey = "sc"; + public int SummonCount; + + private const int SummonLimit = 10; + public const int RuneQuantity = 10; + + public override IAccount Execute(IActionContext context) + { + context.UseGas(1); + var states = context.PreviousState; + var inventoryAddress = AvatarAddress.Derive(LegacyInventoryKey); + + var addressesHex = GetSignerAndOtherAddressesHex(context, AvatarAddress); + var started = DateTimeOffset.UtcNow; + Log.Debug($"{addressesHex} RuneSummon Exec. Started."); + + if (!states.TryGetAvatarStateV2(context.Signer, AvatarAddress, out var avatarState, + out _)) + { + throw new FailedLoadStateException( + $"{addressesHex} Aborted as the avatar state of the signer was failed to load."); + } + + if (SummonCount <= 0 || SummonCount > SummonLimit) + { + throw new InvalidSummonCountException( + $"{addressesHex} Given summonCount {SummonCount} is not valid. Please use between 1 and 10" + ); + } + + // Validate Work + Dictionary sheets = states.GetSheets(sheetTypes: new[] + { + typeof(SummonSheet), + typeof(MaterialItemSheet), + typeof(RuneSheet), + }); + + var summonSheet = sheets.GetSheet(); + var materialSheet = sheets.GetSheet(); + var runeSheet = sheets.GetSheet(); + + var summonRow = summonSheet.OrderedList.FirstOrDefault(row => row.GroupId == GroupId); + if (summonRow is null) + { + throw new RowNotInTableException( + $"{addressesHex} Failed to get {GroupId} in SummonSheet"); + } + + // Use materials + var inventory = avatarState.inventory; + var material = materialSheet.OrderedList.First(m => m.Id == summonRow.CostMaterial); + if (!inventory.RemoveFungibleItem(material.ItemId, context.BlockIndex, + summonRow.CostMaterialCount * SummonCount)) + { + throw new NotEnoughMaterialException( + $"{addressesHex} Aborted as the player has no enough material ({summonRow.CostMaterial} * {summonRow.CostMaterialCount})"); + } + + // Transfer Cost NCG first for fast-fail + if (summonRow.CostNcg > 0L) + { + var arenaSheet = states.GetSheet(); + var arenaData = arenaSheet.GetRoundByBlockIndex(context.BlockIndex); + var feeStoreAddress = + Addresses.GetBlacksmithFeeAddress(arenaData.ChampionshipId, arenaData.Round); + + states = states.TransferAsset( + context, + context.Signer, + feeStoreAddress, + states.GetGoldCurrency() * summonRow.CostNcg * SummonCount + ); + } + + var random = context.GetRandom(); + states = Summon( + context, + AvatarAddress, + runeSheet, + summonRow, + SummonCount, + random, + states + ); + + Log.Debug( + $"{addressesHex} RuneSummon Exec. finished: {DateTimeOffset.UtcNow - started} Elapsed"); + + avatarState.blockIndex = context.BlockIndex; + avatarState.updatedAt = context.BlockIndex; + + // Set states + return states + .SetState(AvatarAddress, avatarState.SerializeV2()) + .SetState(inventoryAddress, avatarState.inventory.Serialize()); + } + + protected override IImmutableDictionary PlainValueInternal => + new Dictionary + { + [AvatarAddressKey] = AvatarAddress.Serialize(), + [GroupIdKey] = (Integer) GroupId, + [SummonCountKey] = (Integer) SummonCount, + }.ToImmutableDictionary(); + + protected override void LoadPlainValueInternal( + IImmutableDictionary plainValue) + { + AvatarAddress = plainValue[AvatarAddressKey].ToAddress(); + GroupId = (Integer) plainValue[GroupIdKey]; + SummonCount = (Integer) plainValue[SummonCountKey]; + } + + Address IRuneSummonV1.AvatarAddress => AvatarAddress; + int IRuneSummonV1.GroupId => GroupId; + int IRuneSummonV1.SummonCount => SummonCount; + + public static IAccount Summon( + IActionContext context, + Address avatarAddress, + RuneSheet runeSheet, + SummonSheet.Row summonRow, + int summonCount, + IRandom random, + IAccount states + ) + { + // Ten plus one + if (summonCount == 10) + { + summonCount += 1; + } + + var result = SimulateSummon(runeSheet, summonRow, summonCount, random); +#pragma warning disable LAA1002 + foreach (var pair in result) +#pragma warning restore LAA1002 + { + states = states.MintAsset(context, avatarAddress, pair.Key * pair.Value); + } + + return states; + } + + public static Dictionary SimulateSummon( + RuneSheet runeSheet, + SummonSheet.Row summonRow, + int summonCount, + IRandom random + ) + { + // Ten plus one + if (summonCount == 10) + { + summonCount += 1; + } + + var result = new Dictionary(); + for (var i = 0; i < summonCount; i++) + { + var recipeId = 0; + var targetRatio = random.Next(1, summonRow.TotalRatio() + 1); + for (var j = 1; j <= SummonSheet.Row.MaxRecipeCount; j++) + { + if (targetRatio <= summonRow.CumulativeRatio(j)) + { + recipeId = summonRow.Recipes[j - 1].Item1; + break; + } + } + + // Validate RecipeId + var runeRow = runeSheet.OrderedList.FirstOrDefault(r => r.Id == recipeId); + if (runeRow is null) + { + throw new SheetRowNotFoundException( + nameof(RuneSheet), + recipeId + ); + } + + var ticker = runeRow.Ticker; + var currency = Currencies.GetRune(ticker); + result.TryAdd(currency, 0); + result[currency] += RuneQuantity; + } + + return result; + } + } +} diff --git a/Lib9c/Action/ValidatorSetOperate.cs b/Lib9c/Action/ValidatorSetOperate.cs index 987b734a1..f64cf3ca2 100644 --- a/Lib9c/Action/ValidatorSetOperate.cs +++ b/Lib9c/Action/ValidatorSetOperate.cs @@ -163,9 +163,9 @@ private Validator BackwardCompatibility(Bencodex.Types.Dictionary dict) catch (Exception) { BigInteger power = - new BigInteger(dict.GetValue(PowerKey).ToByteArray()); + new BigInteger(((Binary)dict[PowerKey]).ToByteArray()); PublicKey publicKey = - new PublicKey(dict.GetValue(PublicKeyKey).ToByteArray()); + new PublicKey(((Binary)dict[PublicKeyKey]).ToByteArray()); return new Validator(publicKey, power); } diff --git a/Lib9c/CurrencyExtensions.cs b/Lib9c/CurrencyExtensions.cs index 79180e14a..3a7ba36f0 100644 --- a/Lib9c/CurrencyExtensions.cs +++ b/Lib9c/CurrencyExtensions.cs @@ -40,7 +40,7 @@ public static Currency Deserialize(Bencodex.Types.Dictionary serialized) IImmutableSet
minters = null; if (serialized["minters"] is Bencodex.Types.List mintersAsList) { - minters = mintersAsList.Select(b => new Address(((Binary) b).ByteArray)).ToImmutableHashSet(); + minters = mintersAsList.Select(b => new Address(b)).ToImmutableHashSet(); } if (serialized.ContainsKey("totalSupplyTrackable")) diff --git a/Lib9c/Model/BattleStatus/Arena/ArenaTick.cs b/Lib9c/Model/BattleStatus/Arena/ArenaTick.cs new file mode 100644 index 000000000..980a806f4 --- /dev/null +++ b/Lib9c/Model/BattleStatus/Arena/ArenaTick.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Nekoyume.Model.BattleStatus.Arena +{ + [Serializable] + public class ArenaTick : ArenaSkill + { + public ArenaTick(ArenaCharacter character) : this( + character, + ArraySegment.Empty, + ArraySegment.Empty) + { + } + + public ArenaTick(ArenaCharacter character, IEnumerable skillInfos, IEnumerable buffInfos) + : base(character, skillInfos, buffInfos) + { + } + + public override IEnumerator CoExecute(IArena arena) + { + yield return arena.CoCustomEvent(Character, this); + } + } +} diff --git a/Lib9c/Model/BattleStatus/Tick.cs b/Lib9c/Model/BattleStatus/Tick.cs new file mode 100644 index 000000000..75ee43dd1 --- /dev/null +++ b/Lib9c/Model/BattleStatus/Tick.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Nekoyume.Model.BattleStatus +{ + [Serializable] + public class Tick : Skill + { + public Tick(CharacterBase character) : this( + 0, + character, + ArraySegment.Empty, + ArraySegment.Empty) + { + } + + public Tick(int skillId, CharacterBase character, IEnumerable skillInfos, IEnumerable buffInfos) + : base(skillId, character, skillInfos, buffInfos) + { + } + + public override IEnumerator CoExecute(IStage stage) + { + yield return stage.CoCustomEvent(Character, this); + } + } +} diff --git a/Lib9c/Model/Buff/ActionBuff.cs b/Lib9c/Model/Buff/ActionBuff.cs index 7f8723b36..91ecac20f 100644 --- a/Lib9c/Model/Buff/ActionBuff.cs +++ b/Lib9c/Model/Buff/ActionBuff.cs @@ -27,13 +27,5 @@ protected ActionBuff(ActionBuff value) : base(value) RowData = value.RowData; CustomField = value.CustomField; } - - public abstract BattleStatus.Skill GiveEffect( - CharacterBase affectedCharacter, - int simulatorWaveTurn, bool copyCharacter = true); - - public abstract BattleStatus.Arena.ArenaSkill GiveEffectForArena( - ArenaCharacter affectedCharacter, - int simulatorWaveTurn); } } diff --git a/Lib9c/Model/Buff/Bleed.cs b/Lib9c/Model/Buff/Bleed.cs index 2cfb5b8f9..e93e19061 100644 --- a/Lib9c/Model/Buff/Bleed.cs +++ b/Lib9c/Model/Buff/Bleed.cs @@ -31,7 +31,7 @@ public override object Clone() return new Bleed(this); } - public override BattleStatus.Skill GiveEffect(CharacterBase affectedCharacter, + public BattleStatus.Skill GiveEffect(CharacterBase affectedCharacter, int simulatorWaveTurn, bool copyCharacter = true) { var clone = copyCharacter ? (CharacterBase) affectedCharacter.Clone() : null; @@ -53,7 +53,7 @@ public override BattleStatus.Skill GiveEffect(CharacterBase affectedCharacter, null); } - public override ArenaSkill GiveEffectForArena( + public ArenaSkill GiveEffectForArena( ArenaCharacter affectedCharacter, int simulatorWaveTurn) { diff --git a/Lib9c/Model/Buff/BuffFactory.cs b/Lib9c/Model/Buff/BuffFactory.cs index 760b828e8..4435e3229 100644 --- a/Lib9c/Model/Buff/BuffFactory.cs +++ b/Lib9c/Model/Buff/BuffFactory.cs @@ -25,6 +25,10 @@ public static ActionBuff GetActionBuff(Stats stat, ActionBuffSheet.Row row) case ActionBuffType.Bleed: var power = (int)decimal.Round(stat.ATK * row.ATKPowerRatio); return new Bleed(row, power); + case ActionBuffType.Stun: + return new Stun(row); + case ActionBuffType.Vampiric: + return new Vampiric(row, 0); default: throw new ArgumentOutOfRangeException(); } @@ -36,6 +40,10 @@ public static ActionBuff GetCustomActionBuff(SkillCustomField customField, Actio { case ActionBuffType.Bleed: return new Bleed(customField, row); + case ActionBuffType.Stun: + return new Stun(customField, row); + case ActionBuffType.Vampiric: + return new Vampiric(customField, row); default: throw new ArgumentOutOfRangeException(); } diff --git a/Lib9c/Model/Buff/Stun.cs b/Lib9c/Model/Buff/Stun.cs new file mode 100644 index 000000000..a4acb9ab2 --- /dev/null +++ b/Lib9c/Model/Buff/Stun.cs @@ -0,0 +1,28 @@ +using System; +using Nekoyume.Model.BattleStatus.Arena; +using Nekoyume.Model.Skill; +using Nekoyume.TableData; + +namespace Nekoyume.Model.Buff +{ + [Serializable] + public class Stun : ActionBuff + { + public Stun(ActionBuffSheet.Row row) : base(row) + { + } + + public Stun(SkillCustomField customField, ActionBuffSheet.Row row) : base(customField, row) + { + } + + protected Stun(ActionBuff value) : base(value) + { + } + + public override object Clone() + { + return new Stun(this); + } + } +} diff --git a/Lib9c/Model/Buff/Vampiric.cs b/Lib9c/Model/Buff/Vampiric.cs new file mode 100644 index 000000000..9efb86cb3 --- /dev/null +++ b/Lib9c/Model/Buff/Vampiric.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using Nekoyume.Model.BattleStatus.Arena; +using Nekoyume.Model.Skill; +using Nekoyume.TableData; + +namespace Nekoyume.Model.Buff +{ + [Serializable] + public class Vampiric : ActionBuff + { + public int BasisPoint { get; } + + public Vampiric(ActionBuffSheet.Row row, int basisPoint) : base(row) + { + BasisPoint = basisPoint; + } + + public Vampiric(SkillCustomField customField, ActionBuffSheet.Row row) : base(customField, row) + { + BasisPoint = customField.BuffValue; + } + + protected Vampiric(Vampiric value) : base(value) + { + BasisPoint = value.BasisPoint; + } + + public override object Clone() + { + return new Vampiric(this); + } + + public BattleStatus.Skill GiveEffect(CharacterBase affectedCharacter, BattleStatus.Skill.SkillInfo skillInfo, int simulatorWaveTurn, bool copyCharacter = true) + { + var target = copyCharacter ? (CharacterBase) affectedCharacter.Clone() : null; + var effect = (int)(skillInfo.Effect * (BasisPoint / 10000m)); + affectedCharacter.Heal(effect); + // Copy new Character with healed. + var infos = new List + { + new(affectedCharacter.Id, + affectedCharacter.IsDead, + affectedCharacter.Thorn, + effect, + false, + SkillCategory.Heal, + simulatorWaveTurn, + RowData.ElementalType, + RowData.TargetType, + target: copyCharacter ? (CharacterBase)affectedCharacter.Clone() : null) + }; + return new BattleStatus.Tick(RowData.Id, + target, + infos, + ArraySegment.Empty); + } + + public ArenaSkill GiveEffectForArena(ArenaCharacter affectedCharacter, ArenaSkill.ArenaSkillInfo skillInfo, int simulatorWaveTurn) + { + var clone = (ArenaCharacter)affectedCharacter.Clone(); + var effect = (int)(skillInfo.Effect * (BasisPoint / 10000m)); + affectedCharacter.Heal(effect); + // Copy new Character with healed. + var infos = new List + { + new((ArenaCharacter)affectedCharacter.Clone(), + effect, + false, + SkillCategory.Heal, + simulatorWaveTurn, + RowData.ElementalType, + RowData.TargetType) + }; + return new ArenaTick( + clone, + infos, + null); + } + } +} diff --git a/Lib9c/Model/Character/ArenaCharacter.cs b/Lib9c/Model/Character/ArenaCharacter.cs index 53ab676d1..b2c3924c0 100644 --- a/Lib9c/Model/Character/ArenaCharacter.cs +++ b/Lib9c/Model/Character/ArenaCharacter.cs @@ -566,8 +566,17 @@ private void Act() ReduceDurationOfBuffs(); ReduceSkillCooldown(); - OnPreSkill(); - var usedSkill = UseSkill(); + ArenaSkill usedSkill; + if (OnPreSkill()) + { + usedSkill = new ArenaTick((ArenaCharacter)Clone()); + _simulator.Log.Add(usedSkill); + } + else + { + usedSkill = UseSkill(); + } + if (usedSkill != null) { OnPostSkill(usedSkill); @@ -603,13 +612,35 @@ private void ActV2() RemoveBuffs(); } - protected virtual void OnPreSkill() + protected virtual bool OnPreSkill() { - + return Buffs.Values.Any(buff => buff is Stun); } protected virtual void OnPostSkill(BattleStatus.Arena.ArenaSkill usedSkill) { + var attackSkills = usedSkill.SkillInfos + .Where(skillInfo => skillInfo.SkillCategory + is SkillCategory.NormalAttack + or SkillCategory.BlowAttack + or SkillCategory.DoubleAttack + or SkillCategory.AreaAttack + or SkillCategory.BuffRemovalAttack) + .ToList(); + if (Buffs.Values.OfType().OrderBy(x => x.BuffInfo.Id) is + { } vampirics) + { + foreach (var vampiric in vampirics) + { + foreach (var effect in attackSkills + .Select(skillInfo => + vampiric.GiveEffectForArena(this, skillInfo, _simulator.Turn))) + { + _simulator.Log.Add(effect); + } + } + } + var bleeds = Buffs.Values.OfType().OrderBy(x => x.BuffInfo.Id); foreach (var bleed in bleeds) { @@ -618,15 +649,9 @@ protected virtual void OnPostSkill(BattleStatus.Arena.ArenaSkill usedSkill) } // Apply thorn damage if target has thorn - foreach (var skillInfo in usedSkill.SkillInfos) - { - var isAttackSkill = - skillInfo.SkillCategory == SkillCategory.NormalAttack || - skillInfo.SkillCategory == SkillCategory.BlowAttack || - skillInfo.SkillCategory == SkillCategory.DoubleAttack || - skillInfo.SkillCategory == SkillCategory.AreaAttack || - skillInfo.SkillCategory == SkillCategory.BuffRemovalAttack; - if (isAttackSkill && skillInfo.Target.Thorn > 0) + foreach (var skillInfo in attackSkills) + { + if (skillInfo.Target.Thorn > 0) { var effect = GiveThornDamage(skillInfo.Target.Thorn); _simulator.Log.Add(effect); diff --git a/Lib9c/Model/Character/CharacterBase.cs b/Lib9c/Model/Character/CharacterBase.cs index 56902dd15..0852828b8 100644 --- a/Lib9c/Model/Character/CharacterBase.cs +++ b/Lib9c/Model/Character/CharacterBase.cs @@ -369,6 +369,11 @@ public void AddBuff(Buff.Buff buff, bool updateImmediate = true) var clone = (ActionBuff)action.Clone(); Buffs[action.RowData.GroupId] = clone; } + else if (buff is Stun stun) + { + var clone = (Stun)stun.Clone(); + Buffs[stun.BuffInfo.GroupId] = clone; + } } public void RemoveRecentStatBuff() @@ -509,8 +514,17 @@ private void Act() { ReduceDurationOfBuffs(); ReduceSkillCooldown(); - OnPreSkill(); - var usedSkill = UseSkill(); + BattleStatus.Skill usedSkill; + if (OnPreSkill()) + { + usedSkill = new Tick((CharacterBase)Clone()); + Simulator.Log.Add(usedSkill); + } + else + { + usedSkill = UseSkill(); + } + if (usedSkill != null) { OnPostSkill(usedSkill); @@ -556,15 +570,38 @@ private void ActV2() EndTurn(); } - protected virtual void OnPreSkill() + protected virtual bool OnPreSkill() { - + return Buffs.Values.Any(buff => buff is Stun); } protected virtual void OnPostSkill(BattleStatus.Skill usedSkill) { + var log = Simulator.LogEvent; + var attackSkills = usedSkill.SkillInfos + .Where(skillInfo => skillInfo.SkillCategory + is SkillCategory.NormalAttack + or SkillCategory.BlowAttack + or SkillCategory.DoubleAttack + or SkillCategory.AreaAttack + or SkillCategory.BuffRemovalAttack) + .ToList(); + if (Buffs.Values.OfType().OrderBy(x => x.BuffInfo.Id) is + { } vampirics) + { + foreach (var vampiric in vampirics) + { + foreach (var effect in attackSkills + .Select(skillInfo => + vampiric.GiveEffect(this, skillInfo, Simulator.WaveTurn, log)) + .Where(_ => log)) + { + Simulator.Log.Add(effect); + } + } + } + var bleeds = Buffs.Values.OfType().OrderBy(x => x.BuffInfo.Id); - bool log = Simulator.LogEvent; foreach (var bleed in bleeds) { var effect = bleed.GiveEffect(this, Simulator.WaveTurn, log); @@ -575,15 +612,9 @@ protected virtual void OnPostSkill(BattleStatus.Skill usedSkill) } // Apply thorn damage if target has thorn - foreach (var skillInfo in usedSkill.SkillInfos) + foreach (var skillInfo in attackSkills) { - var isAttackSkill = - skillInfo.SkillCategory == SkillCategory.NormalAttack || - skillInfo.SkillCategory == SkillCategory.BlowAttack || - skillInfo.SkillCategory == SkillCategory.DoubleAttack || - skillInfo.SkillCategory == SkillCategory.AreaAttack || - skillInfo.SkillCategory == SkillCategory.BuffRemovalAttack; - if (isAttackSkill && skillInfo.Thorn > 0) + if (skillInfo.Thorn > 0) { var effect = GiveThornDamage(skillInfo.Thorn); if (log) diff --git a/Lib9c/Model/Coupons/Coupon.cs b/Lib9c/Model/Coupons/Coupon.cs index 80b9f97da..be985599f 100644 --- a/Lib9c/Model/Coupons/Coupon.cs +++ b/Lib9c/Model/Coupons/Coupon.cs @@ -40,7 +40,7 @@ public Coupon(IValue serialized) ); } - Id = new Guid(dict.GetValue("id")); + Id = new Guid(((Binary)dict["id"]).ToByteArray()); Rewards = new RewardSet((Bencodex.Types.Dictionary)dict["rewards"]); } diff --git a/Lib9c/Model/FungibleItemValue.cs b/Lib9c/Model/FungibleItemValue.cs index 30779794d..0c0398440 100644 --- a/Lib9c/Model/FungibleItemValue.cs +++ b/Lib9c/Model/FungibleItemValue.cs @@ -9,7 +9,7 @@ public readonly struct FungibleItemValue { public FungibleItemValue(List bencoded) : this( - new HashDigest((Binary)bencoded[0]), + new HashDigest(bencoded[0]), (Integer)bencoded[1] ) { diff --git a/Lib9c/Model/IArena.cs b/Lib9c/Model/IArena.cs index 1ac549619..71f96b6ca 100644 --- a/Lib9c/Model/IArena.cs +++ b/Lib9c/Model/IArena.cs @@ -19,5 +19,6 @@ public interface IArena IEnumerator CoRemoveBuffs(ArenaCharacter caster); IEnumerator CoDead(ArenaCharacter caster); IEnumerator CoTurnEnd(int turnNumber); + IEnumerator CoCustomEvent(ArenaCharacter caster, ArenaEventBase eventBase); } } diff --git a/Lib9c/Model/IStage.cs b/Lib9c/Model/IStage.cs index 1886575dd..4a8f6c79d 100644 --- a/Lib9c/Model/IStage.cs +++ b/Lib9c/Model/IStage.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using Nekoyume.Model.BattleStatus; using Nekoyume.Model.Item; namespace Nekoyume.Model @@ -19,16 +20,17 @@ public interface IStage IEnumerator CoHeal(CharacterBase caster, int skillId, IEnumerable skillInfos, IEnumerable buffInfos); IEnumerator CoBuff(CharacterBase caster, int skillId, IEnumerable skillInfos, IEnumerable buffInfos); IEnumerator CoTickDamage(CharacterBase affectedCharacter, int skillId, IEnumerable skillInfos); - + #endregion - + IEnumerator CoRemoveBuffs(CharacterBase caster); - + IEnumerator CoDropBox(List items); IEnumerator CoGetReward(List rewards); IEnumerator CoSpawnWave(int waveNumber, int waveTurn, List enemies, bool hasBoss); IEnumerator CoGetExp(long exp); IEnumerator CoWaveTurnEnd(int turnNumber, int waveTurn); IEnumerator CoDead(CharacterBase character); + IEnumerator CoCustomEvent(CharacterBase character, EventBase eventBase); } } diff --git a/Lib9c/Model/Skill/ActionBuffType.cs b/Lib9c/Model/Skill/ActionBuffType.cs index 40c5e190e..64662ef89 100644 --- a/Lib9c/Model/Skill/ActionBuffType.cs +++ b/Lib9c/Model/Skill/ActionBuffType.cs @@ -4,5 +4,7 @@ namespace Nekoyume.Model.Skill public enum ActionBuffType { Bleed, + Stun, + Vampiric, } } diff --git a/Lib9c/Model/State/AvatarState.cs b/Lib9c/Model/State/AvatarState.cs index 05d261689..46f4a3d75 100644 --- a/Lib9c/Model/State/AvatarState.cs +++ b/Lib9c/Model/State/AvatarState.cs @@ -57,7 +57,7 @@ public class AvatarState : State, ICloneable public static Address CreateAvatarAddress() { var key = new PrivateKey(); - return key.PublicKey.ToAddress(); + return key.PublicKey.Address; } public AvatarState(Address address, diff --git a/Lib9c/Model/State/PendingActivationState.cs b/Lib9c/Model/State/PendingActivationState.cs index f10ced760..ce1e60128 100644 --- a/Lib9c/Model/State/PendingActivationState.cs +++ b/Lib9c/Model/State/PendingActivationState.cs @@ -33,7 +33,7 @@ internal static Address DeriveAddress(byte[] nonce, PublicKey publicKey) public PendingActivationState(Dictionary serialized) : base(serialized) { - Nonce = (Binary)serialized["nonce"]; + Nonce = ((Binary)serialized["nonce"]).ToByteArray(); PublicKey = serialized["public_key"].ToPublicKey(); } diff --git a/Lib9c/Model/State/RedeemCodeState.cs b/Lib9c/Model/State/RedeemCodeState.cs index ca62beb5b..758c3213f 100644 --- a/Lib9c/Model/State/RedeemCodeState.cs +++ b/Lib9c/Model/State/RedeemCodeState.cs @@ -104,7 +104,7 @@ public int Redeem(string code, Address userAddress) } result.UserAddress = userAddress; - _map[publicKey.Format(true)] = result; + _map[new Binary(publicKey.Format(true))] = result; return result.RewardId; } @@ -114,7 +114,7 @@ public void Update(RedeemCodeListSheet sheet) { if (!Map.ContainsKey(row.PublicKey)) { - _map[row.PublicKey.Format(true)] = new Reward(row.RewardId); + _map[new Binary(row.PublicKey.Format(true))] = new Reward(row.RewardId); } else { @@ -175,12 +175,12 @@ public RedeemCodeMap(IReadOnlyDictionary map) => public int Count => _map.Count; public bool ContainsKey(PublicKey key) => - _map.ContainsKey(key.Format(true)) || - _map.ContainsKey(key.Format(false)); + _map.ContainsKey(new Binary(key.Format(true))) || + _map.ContainsKey(new Binary(key.Format(false))); public bool TryGetValue(PublicKey key, out RedeemCodeState.Reward value) => - _map.TryGetValue(key.Format(true), out value) || - _map.TryGetValue(key.Format(false), out value); + _map.TryGetValue(new Binary(key.Format(true)), out value) || + _map.TryGetValue(new Binary(key.Format(false)), out value); public RedeemCodeState.Reward this[PublicKey key] { @@ -188,11 +188,11 @@ public RedeemCodeState.Reward this[PublicKey key] { try { - return _map[key.Format(true)]; + return _map[new Binary(key.Format(true))]; } catch (KeyNotFoundException) { - return _map[key.Format(false)]; + return _map[new Binary(key.Format(false))]; } } } diff --git a/Lib9c/Model/State/StateExtensions.cs b/Lib9c/Model/State/StateExtensions.cs index bfd5697c1..01d159f79 100644 --- a/Lib9c/Model/State/StateExtensions.cs +++ b/Lib9c/Model/State/StateExtensions.cs @@ -421,7 +421,7 @@ public static IValue Serialize(this HashDigest hashDigest) => public static HashDigest ToItemId(this IValue serialized) { - return new HashDigest(((Binary)serialized).ByteArray); + return new HashDigest(serialized); } #endregion diff --git a/Lib9c/TableCSV/Rune/RuneOptionSheet.csv b/Lib9c/TableCSV/Rune/RuneOptionSheet.csv index 27e37bbf1..8860af238 100644 --- a/Lib9c/TableCSV/Rune/RuneOptionSheet.csv +++ b/Lib9c/TableCSV/Rune/RuneOptionSheet.csv @@ -1,5 +1,5 @@ rune_id,_name,level,total_cp,stat_type_1,value_1,value_type_1,stat_type_2,value_2,value_type_2,stat_type_3,value_3,value_type3,skillId,cooldown,chance,skill_value,skill_stat_ratio,skill_value_type,stat_reference_type,buff_duration -30001,Adventurer's Rune,1,364,HP,520,Add,NONE,0,Add,NONE,0,Add,,,,,,,, +30001,Adventurer's Rune,1,364,HP,520,Add,NONE,0,Add,NONE,0,Add,700006,14,30,3040,Add,NONE,Caster,20 30001,Adventurer's Rune,2,504,HP,720,Add,NONE,0,Add,NONE,0,Add,,,,,,,, 30001,Adventurer's Rune,3,644,HP,920,Add,NONE,0,Add,NONE,0,Add,,,,,,,, 30001,Adventurer's Rune,4,756,HP,1080,Add,NONE,0,Add,NONE,0,Add,,,,,,,, @@ -2398,4 +2398,2404 @@ rune_id,_name,level,total_cp,stat_type_1,value_1,value_type_1,stat_type_2,value_ 20001,Golden leaf Rune,297,223958,HIT,36171,Add,ATK,10624,Add,NONE,0,Add,700002,16,30,7005,Add,NONE,Caster,12 20001,Golden leaf Rune,298,225238,HIT,36331,Add,ATK,10695,Add,NONE,0,Add,700002,16,30,7015,Add,NONE,Caster,12 20001,Golden leaf Rune,299,226519,HIT,36491,Add,ATK,10766,Add,NONE,0,Add,700002,16,30,7025,Add,NONE,Caster,12 -20001,Golden leaf Rune,300,227799,HIT,36651,Add,ATK,10837,Add,NONE,0,Add,700002,16,30,7035,Add,NONE,Caster,12 \ No newline at end of file +20001,Golden leaf Rune,300,227799,HIT,36651,Add,ATK,10837,Add,NONE,0,Add,700002,16,30,7035,Add,NONE,Caster,12 +10021,Adventure Stun Rune,1,4142,ATK,310,Add,DEF,33,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,2,4541,ATK,335,Add,DEF,41,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,3,4939,ATK,360,Add,DEF,49,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,4,5338,ATK,385,Add,DEF,57,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,5,5736,ATK,410,Add,DEF,65,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,6,6135,ATK,435,Add,DEF,73,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,7,6533,ATK,460,Add,DEF,81,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,8,6932,ATK,485,Add,DEF,89,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,9,7330,ATK,510,Add,DEF,97,Add,NONE,0,Add,700005,25,10,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,10,7728,ATK,535,Add,DEF,105,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,11,8127,ATK,560,Add,DEF,113,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,12,8525,ATK,585,Add,DEF,121,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,13,8924,ATK,610,Add,DEF,129,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,14,9322,ATK,635,Add,DEF,137,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,15,9721,ATK,660,Add,DEF,145,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,16,10119,ATK,685,Add,DEF,153,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,17,10518,ATK,710,Add,DEF,161,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,18,10916,ATK,735,Add,DEF,169,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,19,11315,ATK,760,Add,DEF,177,Add,NONE,0,Add,700005,25,11,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,20,11713,ATK,785,Add,DEF,185,Add,NONE,0,Add,700005,25,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,21,12112,ATK,810,Add,DEF,193,Add,NONE,0,Add,700005,25,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,22,12510,ATK,835,Add,DEF,201,Add,NONE,0,Add,700005,25,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,23,12909,ATK,860,Add,DEF,209,Add,NONE,0,Add,700005,25,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,24,13307,ATK,885,Add,DEF,217,Add,NONE,0,Add,700005,25,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,25,13706,ATK,910,Add,DEF,225,Add,NONE,0,Add,700005,24,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,26,14104,ATK,935,Add,DEF,233,Add,NONE,0,Add,700005,24,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,27,14503,ATK,960,Add,DEF,241,Add,NONE,0,Add,700005,24,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,28,14901,ATK,985,Add,DEF,249,Add,NONE,0,Add,700005,24,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,29,15300,ATK,1010,Add,DEF,257,Add,NONE,0,Add,700005,24,12,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,30,15698,ATK,1035,Add,DEF,265,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,31,16096,ATK,1060,Add,DEF,273,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,32,16495,ATK,1085,Add,DEF,281,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,33,16893,ATK,1110,Add,DEF,289,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,34,17292,ATK,1135,Add,DEF,297,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,35,17690,ATK,1160,Add,DEF,305,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,36,18089,ATK,1185,Add,DEF,313,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,37,18487,ATK,1210,Add,DEF,321,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,38,18886,ATK,1235,Add,DEF,329,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,39,19284,ATK,1260,Add,DEF,337,Add,NONE,0,Add,700005,24,13,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,40,19683,ATK,1285,Add,DEF,345,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,41,20081,ATK,1310,Add,DEF,353,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,42,20480,ATK,1335,Add,DEF,361,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,43,20878,ATK,1360,Add,DEF,369,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,44,21277,ATK,1385,Add,DEF,377,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,45,21675,ATK,1410,Add,DEF,385,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,46,22074,ATK,1435,Add,DEF,393,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,47,22472,ATK,1460,Add,DEF,401,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,48,22871,ATK,1485,Add,DEF,409,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,49,23269,ATK,1510,Add,DEF,417,Add,NONE,0,Add,700005,24,14,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,50,23667,ATK,1535,Add,DEF,425,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,51,24235,ATK,1572,Add,DEF,435,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,52,24803,ATK,1609,Add,DEF,445,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,53,25370,ATK,1646,Add,DEF,455,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,54,25938,ATK,1683,Add,DEF,465,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,55,26505,ATK,1720,Add,DEF,475,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,56,27073,ATK,1757,Add,DEF,485,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,57,27640,ATK,1794,Add,DEF,495,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,58,28208,ATK,1831,Add,DEF,505,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,59,28775,ATK,1868,Add,DEF,515,Add,NONE,0,Add,700005,23,15,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,60,29343,ATK,1905,Add,DEF,525,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,61,29910,ATK,1942,Add,DEF,535,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,62,30478,ATK,1979,Add,DEF,545,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,63,31045,ATK,2016,Add,DEF,555,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,64,31613,ATK,2053,Add,DEF,565,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,65,32180,ATK,2090,Add,DEF,575,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,66,32748,ATK,2127,Add,DEF,585,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,67,33315,ATK,2164,Add,DEF,595,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,68,33883,ATK,2201,Add,DEF,605,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,69,34450,ATK,2238,Add,DEF,615,Add,NONE,0,Add,700005,23,16,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,70,35018,ATK,2275,Add,DEF,625,Add,NONE,0,Add,700005,23,17,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,71,35586,ATK,2312,Add,DEF,635,Add,NONE,0,Add,700005,23,17,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,72,36153,ATK,2349,Add,DEF,645,Add,NONE,0,Add,700005,23,17,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,73,36721,ATK,2386,Add,DEF,655,Add,NONE,0,Add,700005,23,17,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,74,37288,ATK,2423,Add,DEF,665,Add,NONE,0,Add,700005,23,17,1,Add,NONE,Caster,3 +10021,Adventure Stun Rune,75,37856,ATK,2460,Add,DEF,675,Add,NONE,0,Add,700005,22,17,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,76,38423,ATK,2497,Add,DEF,685,Add,NONE,0,Add,700005,22,17,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,77,38991,ATK,2534,Add,DEF,695,Add,NONE,0,Add,700005,22,17,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,78,39558,ATK,2571,Add,DEF,705,Add,NONE,0,Add,700005,22,17,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,79,40126,ATK,2608,Add,DEF,715,Add,NONE,0,Add,700005,22,17,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,80,40693,ATK,2645,Add,DEF,725,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,81,41261,ATK,2682,Add,DEF,735,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,82,41828,ATK,2719,Add,DEF,745,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,83,42396,ATK,2756,Add,DEF,755,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,84,42963,ATK,2793,Add,DEF,765,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,85,43531,ATK,2830,Add,DEF,775,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,86,44098,ATK,2867,Add,DEF,785,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,87,44666,ATK,2904,Add,DEF,795,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,88,45233,ATK,2941,Add,DEF,805,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,89,45801,ATK,2978,Add,DEF,815,Add,NONE,0,Add,700005,22,18,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,90,46368,ATK,3015,Add,DEF,825,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,91,46936,ATK,3052,Add,DEF,835,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,92,47504,ATK,3089,Add,DEF,845,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,93,48071,ATK,3126,Add,DEF,855,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,94,48639,ATK,3163,Add,DEF,865,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,95,49206,ATK,3200,Add,DEF,875,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,96,49774,ATK,3237,Add,DEF,885,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,97,50341,ATK,3274,Add,DEF,895,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,98,50909,ATK,3311,Add,DEF,905,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,99,51476,ATK,3348,Add,DEF,915,Add,NONE,0,Add,700005,22,19,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,100,52044,ATK,3385,Add,DEF,925,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,101,52925,ATK,3445,Add,DEF,938,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,102,53807,ATK,3505,Add,DEF,951,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,103,54688,ATK,3565,Add,DEF,964,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,104,55570,ATK,3625,Add,DEF,977,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,105,56451,ATK,3685,Add,DEF,990,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,106,57333,ATK,3745,Add,DEF,1003,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,107,58214,ATK,3805,Add,DEF,1016,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,108,59096,ATK,3865,Add,DEF,1029,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,109,59977,ATK,3925,Add,DEF,1042,Add,NONE,0,Add,700005,21,20,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,110,60858,ATK,3985,Add,DEF,1055,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,111,61740,ATK,4045,Add,DEF,1068,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,112,62621,ATK,4105,Add,DEF,1081,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,113,63503,ATK,4165,Add,DEF,1094,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,114,64384,ATK,4225,Add,DEF,1107,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,115,65266,ATK,4285,Add,DEF,1120,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,116,66147,ATK,4345,Add,DEF,1133,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,117,67029,ATK,4405,Add,DEF,1146,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,118,67910,ATK,4465,Add,DEF,1159,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,119,68792,ATK,4525,Add,DEF,1172,Add,NONE,0,Add,700005,21,21,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,120,69673,ATK,4585,Add,DEF,1185,Add,NONE,0,Add,700005,21,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,121,70555,ATK,4645,Add,DEF,1198,Add,NONE,0,Add,700005,21,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,122,71436,ATK,4705,Add,DEF,1211,Add,NONE,0,Add,700005,21,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,123,72318,ATK,4765,Add,DEF,1224,Add,NONE,0,Add,700005,21,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,124,73199,ATK,4825,Add,DEF,1237,Add,NONE,0,Add,700005,21,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,125,74081,ATK,4885,Add,DEF,1250,Add,NONE,0,Add,700005,20,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,126,74962,ATK,4945,Add,DEF,1263,Add,NONE,0,Add,700005,20,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,127,75844,ATK,5005,Add,DEF,1276,Add,NONE,0,Add,700005,20,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,128,76725,ATK,5065,Add,DEF,1289,Add,NONE,0,Add,700005,20,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,129,77607,ATK,5125,Add,DEF,1302,Add,NONE,0,Add,700005,20,22,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,130,78488,ATK,5185,Add,DEF,1315,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,131,79369,ATK,5245,Add,DEF,1328,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,132,80251,ATK,5305,Add,DEF,1341,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,133,81132,ATK,5365,Add,DEF,1354,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,134,82014,ATK,5425,Add,DEF,1367,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,135,82895,ATK,5485,Add,DEF,1380,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,136,83777,ATK,5545,Add,DEF,1393,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,137,84658,ATK,5605,Add,DEF,1406,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,138,85540,ATK,5665,Add,DEF,1419,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,139,86421,ATK,5725,Add,DEF,1432,Add,NONE,0,Add,700005,20,23,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,140,87303,ATK,5785,Add,DEF,1445,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,141,88184,ATK,5845,Add,DEF,1458,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,142,89066,ATK,5905,Add,DEF,1471,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,143,89947,ATK,5965,Add,DEF,1484,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,144,90829,ATK,6025,Add,DEF,1497,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,145,91710,ATK,6085,Add,DEF,1510,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,146,92592,ATK,6145,Add,DEF,1523,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,147,93473,ATK,6205,Add,DEF,1536,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,148,94355,ATK,6265,Add,DEF,1549,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,149,95236,ATK,6325,Add,DEF,1562,Add,NONE,0,Add,700005,20,24,1,Add,NONE,Caster,4 +10021,Adventure Stun Rune,150,96117,ATK,6385,Add,DEF,1575,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,151,97506,ATK,6480,Add,DEF,1595,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,152,98895,ATK,6575,Add,DEF,1615,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,153,100283,ATK,6670,Add,DEF,1635,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,154,101672,ATK,6765,Add,DEF,1655,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,155,103061,ATK,6860,Add,DEF,1675,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,156,104449,ATK,6955,Add,DEF,1695,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,157,105838,ATK,7050,Add,DEF,1715,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,158,107226,ATK,7145,Add,DEF,1735,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,159,108615,ATK,7240,Add,DEF,1755,Add,NONE,0,Add,700005,19,25,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,160,110004,ATK,7335,Add,DEF,1775,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,161,111392,ATK,7430,Add,DEF,1795,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,162,112781,ATK,7525,Add,DEF,1815,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,163,114170,ATK,7620,Add,DEF,1835,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,164,115558,ATK,7715,Add,DEF,1855,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,165,116947,ATK,7810,Add,DEF,1875,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,166,118335,ATK,7905,Add,DEF,1895,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,167,119724,ATK,8000,Add,DEF,1915,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,168,121113,ATK,8095,Add,DEF,1935,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,169,122501,ATK,8190,Add,DEF,1955,Add,NONE,0,Add,700005,19,26,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,170,123890,ATK,8285,Add,DEF,1975,Add,NONE,0,Add,700005,19,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,171,125279,ATK,8380,Add,DEF,1995,Add,NONE,0,Add,700005,19,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,172,126667,ATK,8475,Add,DEF,2015,Add,NONE,0,Add,700005,19,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,173,128056,ATK,8570,Add,DEF,2035,Add,NONE,0,Add,700005,19,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,174,129444,ATK,8665,Add,DEF,2055,Add,NONE,0,Add,700005,19,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,175,130833,ATK,8760,Add,DEF,2075,Add,NONE,0,Add,700005,18,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,176,132222,ATK,8855,Add,DEF,2095,Add,NONE,0,Add,700005,18,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,177,133610,ATK,8950,Add,DEF,2115,Add,NONE,0,Add,700005,18,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,178,134999,ATK,9045,Add,DEF,2135,Add,NONE,0,Add,700005,18,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,179,136388,ATK,9140,Add,DEF,2155,Add,NONE,0,Add,700005,18,27,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,180,137776,ATK,9235,Add,DEF,2175,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,181,139165,ATK,9330,Add,DEF,2195,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,182,140553,ATK,9425,Add,DEF,2215,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,183,141942,ATK,9520,Add,DEF,2235,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,184,143331,ATK,9615,Add,DEF,2255,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,185,144719,ATK,9710,Add,DEF,2275,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,186,146108,ATK,9805,Add,DEF,2295,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,187,147497,ATK,9900,Add,DEF,2315,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,188,148885,ATK,9995,Add,DEF,2335,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,189,150274,ATK,10090,Add,DEF,2355,Add,NONE,0,Add,700005,18,28,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,190,151662,ATK,10185,Add,DEF,2375,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,191,153051,ATK,10280,Add,DEF,2395,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,192,154440,ATK,10375,Add,DEF,2415,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,193,155828,ATK,10470,Add,DEF,2435,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,194,157217,ATK,10565,Add,DEF,2455,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,195,158606,ATK,10660,Add,DEF,2475,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,196,159994,ATK,10755,Add,DEF,2495,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,197,161383,ATK,10850,Add,DEF,2515,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,198,162771,ATK,10945,Add,DEF,2535,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,199,164160,ATK,11040,Add,DEF,2555,Add,NONE,0,Add,700005,18,29,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,200,165549,ATK,11135,Add,DEF,2575,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,201,167191,ATK,11250,Add,DEF,2596,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,202,168833,ATK,11365,Add,DEF,2617,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,203,170475,ATK,11480,Add,DEF,2638,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,204,172118,ATK,11595,Add,DEF,2659,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,205,173760,ATK,11710,Add,DEF,2680,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,206,175402,ATK,11825,Add,DEF,2701,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,207,177044,ATK,11940,Add,DEF,2722,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,208,178686,ATK,12055,Add,DEF,2743,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,209,180329,ATK,12170,Add,DEF,2764,Add,NONE,0,Add,700005,17,30,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,210,181971,ATK,12285,Add,DEF,2785,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,211,183613,ATK,12400,Add,DEF,2806,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,212,185255,ATK,12515,Add,DEF,2827,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,213,186897,ATK,12630,Add,DEF,2848,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,214,188540,ATK,12745,Add,DEF,2869,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,215,190182,ATK,12860,Add,DEF,2890,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,216,191824,ATK,12975,Add,DEF,2911,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,217,193466,ATK,13090,Add,DEF,2932,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,218,195108,ATK,13205,Add,DEF,2953,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,219,196751,ATK,13320,Add,DEF,2974,Add,NONE,0,Add,700005,17,31,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,220,198393,ATK,13435,Add,DEF,2995,Add,NONE,0,Add,700005,17,32,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,221,200035,ATK,13550,Add,DEF,3016,Add,NONE,0,Add,700005,17,32,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,222,201677,ATK,13665,Add,DEF,3037,Add,NONE,0,Add,700005,17,32,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,223,203319,ATK,13780,Add,DEF,3058,Add,NONE,0,Add,700005,17,32,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,224,204962,ATK,13895,Add,DEF,3079,Add,NONE,0,Add,700005,17,32,1,Add,NONE,Caster,5 +10021,Adventure Stun Rune,225,206604,ATK,14010,Add,DEF,3100,Add,NONE,0,Add,700005,16,32,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,226,208246,ATK,14125,Add,DEF,3121,Add,NONE,0,Add,700005,16,32,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,227,209888,ATK,14240,Add,DEF,3142,Add,NONE,0,Add,700005,16,32,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,228,211530,ATK,14355,Add,DEF,3163,Add,NONE,0,Add,700005,16,32,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,229,213173,ATK,14470,Add,DEF,3184,Add,NONE,0,Add,700005,16,32,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,230,214815,ATK,14585,Add,DEF,3205,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,231,216457,ATK,14700,Add,DEF,3226,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,232,218099,ATK,14815,Add,DEF,3247,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,233,219741,ATK,14930,Add,DEF,3268,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,234,221384,ATK,15045,Add,DEF,3289,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,235,223026,ATK,15160,Add,DEF,3310,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,236,224668,ATK,15275,Add,DEF,3331,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,237,226310,ATK,15390,Add,DEF,3352,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,238,227952,ATK,15505,Add,DEF,3373,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,239,229595,ATK,15620,Add,DEF,3394,Add,NONE,0,Add,700005,16,33,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,240,231237,ATK,15735,Add,DEF,3415,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,241,232879,ATK,15850,Add,DEF,3436,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,242,234521,ATK,15965,Add,DEF,3457,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,243,236163,ATK,16080,Add,DEF,3478,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,244,237806,ATK,16195,Add,DEF,3499,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,245,239448,ATK,16310,Add,DEF,3520,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,246,241090,ATK,16425,Add,DEF,3541,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,247,242732,ATK,16540,Add,DEF,3562,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,248,244374,ATK,16655,Add,DEF,3583,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,249,246017,ATK,16770,Add,DEF,3604,Add,NONE,0,Add,700005,16,34,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,250,247659,ATK,16885,Add,DEF,3625,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,251,250013,ATK,17054,Add,DEF,3651,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,252,252368,ATK,17223,Add,DEF,3677,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,253,254723,ATK,17392,Add,DEF,3703,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,254,257077,ATK,17561,Add,DEF,3729,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,255,259432,ATK,17730,Add,DEF,3755,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,256,261786,ATK,17899,Add,DEF,3781,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,257,264141,ATK,18068,Add,DEF,3807,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,258,266496,ATK,18237,Add,DEF,3833,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,259,268850,ATK,18406,Add,DEF,3859,Add,NONE,0,Add,700005,15,35,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,260,271205,ATK,18575,Add,DEF,3885,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,261,273560,ATK,18744,Add,DEF,3911,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,262,275914,ATK,18913,Add,DEF,3937,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,263,278269,ATK,19082,Add,DEF,3963,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,264,280623,ATK,19251,Add,DEF,3989,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,265,282978,ATK,19420,Add,DEF,4015,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,266,285333,ATK,19589,Add,DEF,4041,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,267,287687,ATK,19758,Add,DEF,4067,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,268,290042,ATK,19927,Add,DEF,4093,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,269,292397,ATK,20096,Add,DEF,4119,Add,NONE,0,Add,700005,15,36,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,270,294751,ATK,20265,Add,DEF,4145,Add,NONE,0,Add,700005,15,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,271,297106,ATK,20434,Add,DEF,4171,Add,NONE,0,Add,700005,15,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,272,299460,ATK,20603,Add,DEF,4197,Add,NONE,0,Add,700005,15,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,273,301815,ATK,20772,Add,DEF,4223,Add,NONE,0,Add,700005,15,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,274,304170,ATK,20941,Add,DEF,4249,Add,NONE,0,Add,700005,15,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,275,306524,ATK,21110,Add,DEF,4275,Add,NONE,0,Add,700005,14,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,276,308879,ATK,21279,Add,DEF,4301,Add,NONE,0,Add,700005,14,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,277,311234,ATK,21448,Add,DEF,4327,Add,NONE,0,Add,700005,14,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,278,313588,ATK,21617,Add,DEF,4353,Add,NONE,0,Add,700005,14,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,279,315943,ATK,21786,Add,DEF,4379,Add,NONE,0,Add,700005,14,37,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,280,318297,ATK,21955,Add,DEF,4405,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,281,320652,ATK,22124,Add,DEF,4431,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,282,323007,ATK,22293,Add,DEF,4457,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,283,325361,ATK,22462,Add,DEF,4483,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,284,327716,ATK,22631,Add,DEF,4509,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,285,330071,ATK,22800,Add,DEF,4535,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,286,332425,ATK,22969,Add,DEF,4561,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,287,334780,ATK,23138,Add,DEF,4587,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,288,337134,ATK,23307,Add,DEF,4613,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,289,339489,ATK,23476,Add,DEF,4639,Add,NONE,0,Add,700005,14,38,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,290,341844,ATK,23645,Add,DEF,4665,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,291,344198,ATK,23814,Add,DEF,4691,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,292,346553,ATK,23983,Add,DEF,4717,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,293,348908,ATK,24152,Add,DEF,4743,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,294,351262,ATK,24321,Add,DEF,4769,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,295,353617,ATK,24490,Add,DEF,4795,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,296,355971,ATK,24659,Add,DEF,4821,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,297,358326,ATK,24828,Add,DEF,4847,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,298,360681,ATK,24997,Add,DEF,4873,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,299,363035,ATK,25166,Add,DEF,4899,Add,NONE,0,Add,700005,14,39,1,Add,NONE,Caster,6 +10021,Adventure Stun Rune,300,365390,ATK,25335,Add,DEF,4925,Add,NONE,0,Add,700005,13,40,1,Add,NONE,Caster,7 +10022,Arena Stun Rune,1,4142,ATK,310,Add,DEF,33,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,2,4541,ATK,335,Add,DEF,41,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,3,4939,ATK,360,Add,DEF,49,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,4,5338,ATK,385,Add,DEF,57,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,5,5736,ATK,410,Add,DEF,65,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,6,6135,ATK,435,Add,DEF,73,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,7,6533,ATK,460,Add,DEF,81,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,8,6932,ATK,485,Add,DEF,89,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,9,7330,ATK,510,Add,DEF,97,Add,NONE,0,Add,700004,25,10,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,10,7728,ATK,535,Add,DEF,105,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,11,8127,ATK,560,Add,DEF,113,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,12,8525,ATK,585,Add,DEF,121,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,13,8924,ATK,610,Add,DEF,129,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,14,9322,ATK,635,Add,DEF,137,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,15,9721,ATK,660,Add,DEF,145,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,16,10119,ATK,685,Add,DEF,153,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,17,10518,ATK,710,Add,DEF,161,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,18,10916,ATK,735,Add,DEF,169,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,19,11315,ATK,760,Add,DEF,177,Add,NONE,0,Add,700004,25,11,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,20,11713,ATK,785,Add,DEF,185,Add,NONE,0,Add,700004,25,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,21,12112,ATK,810,Add,DEF,193,Add,NONE,0,Add,700004,25,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,22,12510,ATK,835,Add,DEF,201,Add,NONE,0,Add,700004,25,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,23,12909,ATK,860,Add,DEF,209,Add,NONE,0,Add,700004,25,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,24,13307,ATK,885,Add,DEF,217,Add,NONE,0,Add,700004,25,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,25,13706,ATK,910,Add,DEF,225,Add,NONE,0,Add,700004,24,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,26,14104,ATK,935,Add,DEF,233,Add,NONE,0,Add,700004,24,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,27,14503,ATK,960,Add,DEF,241,Add,NONE,0,Add,700004,24,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,28,14901,ATK,985,Add,DEF,249,Add,NONE,0,Add,700004,24,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,29,15300,ATK,1010,Add,DEF,257,Add,NONE,0,Add,700004,24,12,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,30,15698,ATK,1035,Add,DEF,265,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,31,16096,ATK,1060,Add,DEF,273,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,32,16495,ATK,1085,Add,DEF,281,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,33,16893,ATK,1110,Add,DEF,289,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,34,17292,ATK,1135,Add,DEF,297,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,35,17690,ATK,1160,Add,DEF,305,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,36,18089,ATK,1185,Add,DEF,313,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,37,18487,ATK,1210,Add,DEF,321,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,38,18886,ATK,1235,Add,DEF,329,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,39,19284,ATK,1260,Add,DEF,337,Add,NONE,0,Add,700004,24,13,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,40,19683,ATK,1285,Add,DEF,345,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,41,20081,ATK,1310,Add,DEF,353,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,42,20480,ATK,1335,Add,DEF,361,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,43,20878,ATK,1360,Add,DEF,369,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,44,21277,ATK,1385,Add,DEF,377,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,45,21675,ATK,1410,Add,DEF,385,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,46,22074,ATK,1435,Add,DEF,393,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,47,22472,ATK,1460,Add,DEF,401,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,48,22871,ATK,1485,Add,DEF,409,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,49,23269,ATK,1510,Add,DEF,417,Add,NONE,0,Add,700004,24,14,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,50,23667,ATK,1535,Add,DEF,425,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,51,24235,ATK,1572,Add,DEF,435,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,52,24803,ATK,1609,Add,DEF,445,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,53,25370,ATK,1646,Add,DEF,455,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,54,25938,ATK,1683,Add,DEF,465,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,55,26505,ATK,1720,Add,DEF,475,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,56,27073,ATK,1757,Add,DEF,485,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,57,27640,ATK,1794,Add,DEF,495,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,58,28208,ATK,1831,Add,DEF,505,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,59,28775,ATK,1868,Add,DEF,515,Add,NONE,0,Add,700004,23,15,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,60,29343,ATK,1905,Add,DEF,525,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,61,29910,ATK,1942,Add,DEF,535,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,62,30478,ATK,1979,Add,DEF,545,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,63,31045,ATK,2016,Add,DEF,555,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,64,31613,ATK,2053,Add,DEF,565,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,65,32180,ATK,2090,Add,DEF,575,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,66,32748,ATK,2127,Add,DEF,585,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,67,33315,ATK,2164,Add,DEF,595,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,68,33883,ATK,2201,Add,DEF,605,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,69,34450,ATK,2238,Add,DEF,615,Add,NONE,0,Add,700004,23,16,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,70,35018,ATK,2275,Add,DEF,625,Add,NONE,0,Add,700004,23,17,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,71,35586,ATK,2312,Add,DEF,635,Add,NONE,0,Add,700004,23,17,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,72,36153,ATK,2349,Add,DEF,645,Add,NONE,0,Add,700004,23,17,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,73,36721,ATK,2386,Add,DEF,655,Add,NONE,0,Add,700004,23,17,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,74,37288,ATK,2423,Add,DEF,665,Add,NONE,0,Add,700004,23,17,1,Add,NONE,Caster,3 +10022,Arena Stun Rune,75,37856,ATK,2460,Add,DEF,675,Add,NONE,0,Add,700004,22,17,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,76,38423,ATK,2497,Add,DEF,685,Add,NONE,0,Add,700004,22,17,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,77,38991,ATK,2534,Add,DEF,695,Add,NONE,0,Add,700004,22,17,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,78,39558,ATK,2571,Add,DEF,705,Add,NONE,0,Add,700004,22,17,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,79,40126,ATK,2608,Add,DEF,715,Add,NONE,0,Add,700004,22,17,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,80,40693,ATK,2645,Add,DEF,725,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,81,41261,ATK,2682,Add,DEF,735,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,82,41828,ATK,2719,Add,DEF,745,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,83,42396,ATK,2756,Add,DEF,755,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,84,42963,ATK,2793,Add,DEF,765,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,85,43531,ATK,2830,Add,DEF,775,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,86,44098,ATK,2867,Add,DEF,785,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,87,44666,ATK,2904,Add,DEF,795,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,88,45233,ATK,2941,Add,DEF,805,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,89,45801,ATK,2978,Add,DEF,815,Add,NONE,0,Add,700004,22,18,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,90,46368,ATK,3015,Add,DEF,825,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,91,46936,ATK,3052,Add,DEF,835,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,92,47504,ATK,3089,Add,DEF,845,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,93,48071,ATK,3126,Add,DEF,855,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,94,48639,ATK,3163,Add,DEF,865,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,95,49206,ATK,3200,Add,DEF,875,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,96,49774,ATK,3237,Add,DEF,885,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,97,50341,ATK,3274,Add,DEF,895,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,98,50909,ATK,3311,Add,DEF,905,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,99,51476,ATK,3348,Add,DEF,915,Add,NONE,0,Add,700004,22,19,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,100,52044,ATK,3385,Add,DEF,925,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,101,52925,ATK,3445,Add,DEF,938,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,102,53807,ATK,3505,Add,DEF,951,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,103,54688,ATK,3565,Add,DEF,964,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,104,55570,ATK,3625,Add,DEF,977,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,105,56451,ATK,3685,Add,DEF,990,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,106,57333,ATK,3745,Add,DEF,1003,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,107,58214,ATK,3805,Add,DEF,1016,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,108,59096,ATK,3865,Add,DEF,1029,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,109,59977,ATK,3925,Add,DEF,1042,Add,NONE,0,Add,700004,21,20,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,110,60858,ATK,3985,Add,DEF,1055,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,111,61740,ATK,4045,Add,DEF,1068,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,112,62621,ATK,4105,Add,DEF,1081,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,113,63503,ATK,4165,Add,DEF,1094,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,114,64384,ATK,4225,Add,DEF,1107,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,115,65266,ATK,4285,Add,DEF,1120,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,116,66147,ATK,4345,Add,DEF,1133,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,117,67029,ATK,4405,Add,DEF,1146,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,118,67910,ATK,4465,Add,DEF,1159,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,119,68792,ATK,4525,Add,DEF,1172,Add,NONE,0,Add,700004,21,21,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,120,69673,ATK,4585,Add,DEF,1185,Add,NONE,0,Add,700004,21,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,121,70555,ATK,4645,Add,DEF,1198,Add,NONE,0,Add,700004,21,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,122,71436,ATK,4705,Add,DEF,1211,Add,NONE,0,Add,700004,21,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,123,72318,ATK,4765,Add,DEF,1224,Add,NONE,0,Add,700004,21,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,124,73199,ATK,4825,Add,DEF,1237,Add,NONE,0,Add,700004,21,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,125,74081,ATK,4885,Add,DEF,1250,Add,NONE,0,Add,700004,20,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,126,74962,ATK,4945,Add,DEF,1263,Add,NONE,0,Add,700004,20,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,127,75844,ATK,5005,Add,DEF,1276,Add,NONE,0,Add,700004,20,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,128,76725,ATK,5065,Add,DEF,1289,Add,NONE,0,Add,700004,20,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,129,77607,ATK,5125,Add,DEF,1302,Add,NONE,0,Add,700004,20,22,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,130,78488,ATK,5185,Add,DEF,1315,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,131,79369,ATK,5245,Add,DEF,1328,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,132,80251,ATK,5305,Add,DEF,1341,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,133,81132,ATK,5365,Add,DEF,1354,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,134,82014,ATK,5425,Add,DEF,1367,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,135,82895,ATK,5485,Add,DEF,1380,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,136,83777,ATK,5545,Add,DEF,1393,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,137,84658,ATK,5605,Add,DEF,1406,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,138,85540,ATK,5665,Add,DEF,1419,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,139,86421,ATK,5725,Add,DEF,1432,Add,NONE,0,Add,700004,20,23,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,140,87303,ATK,5785,Add,DEF,1445,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,141,88184,ATK,5845,Add,DEF,1458,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,142,89066,ATK,5905,Add,DEF,1471,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,143,89947,ATK,5965,Add,DEF,1484,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,144,90829,ATK,6025,Add,DEF,1497,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,145,91710,ATK,6085,Add,DEF,1510,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,146,92592,ATK,6145,Add,DEF,1523,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,147,93473,ATK,6205,Add,DEF,1536,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,148,94355,ATK,6265,Add,DEF,1549,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,149,95236,ATK,6325,Add,DEF,1562,Add,NONE,0,Add,700004,20,24,1,Add,NONE,Caster,4 +10022,Arena Stun Rune,150,96117,ATK,6385,Add,DEF,1575,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,151,97506,ATK,6480,Add,DEF,1595,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,152,98895,ATK,6575,Add,DEF,1615,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,153,100283,ATK,6670,Add,DEF,1635,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,154,101672,ATK,6765,Add,DEF,1655,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,155,103061,ATK,6860,Add,DEF,1675,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,156,104449,ATK,6955,Add,DEF,1695,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,157,105838,ATK,7050,Add,DEF,1715,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,158,107226,ATK,7145,Add,DEF,1735,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,159,108615,ATK,7240,Add,DEF,1755,Add,NONE,0,Add,700004,19,25,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,160,110004,ATK,7335,Add,DEF,1775,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,161,111392,ATK,7430,Add,DEF,1795,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,162,112781,ATK,7525,Add,DEF,1815,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,163,114170,ATK,7620,Add,DEF,1835,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,164,115558,ATK,7715,Add,DEF,1855,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,165,116947,ATK,7810,Add,DEF,1875,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,166,118335,ATK,7905,Add,DEF,1895,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,167,119724,ATK,8000,Add,DEF,1915,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,168,121113,ATK,8095,Add,DEF,1935,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,169,122501,ATK,8190,Add,DEF,1955,Add,NONE,0,Add,700004,19,26,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,170,123890,ATK,8285,Add,DEF,1975,Add,NONE,0,Add,700004,19,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,171,125279,ATK,8380,Add,DEF,1995,Add,NONE,0,Add,700004,19,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,172,126667,ATK,8475,Add,DEF,2015,Add,NONE,0,Add,700004,19,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,173,128056,ATK,8570,Add,DEF,2035,Add,NONE,0,Add,700004,19,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,174,129444,ATK,8665,Add,DEF,2055,Add,NONE,0,Add,700004,19,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,175,130833,ATK,8760,Add,DEF,2075,Add,NONE,0,Add,700004,18,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,176,132222,ATK,8855,Add,DEF,2095,Add,NONE,0,Add,700004,18,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,177,133610,ATK,8950,Add,DEF,2115,Add,NONE,0,Add,700004,18,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,178,134999,ATK,9045,Add,DEF,2135,Add,NONE,0,Add,700004,18,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,179,136388,ATK,9140,Add,DEF,2155,Add,NONE,0,Add,700004,18,27,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,180,137776,ATK,9235,Add,DEF,2175,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,181,139165,ATK,9330,Add,DEF,2195,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,182,140553,ATK,9425,Add,DEF,2215,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,183,141942,ATK,9520,Add,DEF,2235,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,184,143331,ATK,9615,Add,DEF,2255,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,185,144719,ATK,9710,Add,DEF,2275,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,186,146108,ATK,9805,Add,DEF,2295,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,187,147497,ATK,9900,Add,DEF,2315,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,188,148885,ATK,9995,Add,DEF,2335,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,189,150274,ATK,10090,Add,DEF,2355,Add,NONE,0,Add,700004,18,28,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,190,151662,ATK,10185,Add,DEF,2375,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,191,153051,ATK,10280,Add,DEF,2395,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,192,154440,ATK,10375,Add,DEF,2415,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,193,155828,ATK,10470,Add,DEF,2435,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,194,157217,ATK,10565,Add,DEF,2455,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,195,158606,ATK,10660,Add,DEF,2475,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,196,159994,ATK,10755,Add,DEF,2495,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,197,161383,ATK,10850,Add,DEF,2515,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,198,162771,ATK,10945,Add,DEF,2535,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,199,164160,ATK,11040,Add,DEF,2555,Add,NONE,0,Add,700004,18,29,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,200,165549,ATK,11135,Add,DEF,2575,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,201,167191,ATK,11250,Add,DEF,2596,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,202,168833,ATK,11365,Add,DEF,2617,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,203,170475,ATK,11480,Add,DEF,2638,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,204,172118,ATK,11595,Add,DEF,2659,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,205,173760,ATK,11710,Add,DEF,2680,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,206,175402,ATK,11825,Add,DEF,2701,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,207,177044,ATK,11940,Add,DEF,2722,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,208,178686,ATK,12055,Add,DEF,2743,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,209,180329,ATK,12170,Add,DEF,2764,Add,NONE,0,Add,700004,17,30,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,210,181971,ATK,12285,Add,DEF,2785,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,211,183613,ATK,12400,Add,DEF,2806,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,212,185255,ATK,12515,Add,DEF,2827,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,213,186897,ATK,12630,Add,DEF,2848,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,214,188540,ATK,12745,Add,DEF,2869,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,215,190182,ATK,12860,Add,DEF,2890,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,216,191824,ATK,12975,Add,DEF,2911,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,217,193466,ATK,13090,Add,DEF,2932,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,218,195108,ATK,13205,Add,DEF,2953,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,219,196751,ATK,13320,Add,DEF,2974,Add,NONE,0,Add,700004,17,31,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,220,198393,ATK,13435,Add,DEF,2995,Add,NONE,0,Add,700004,17,32,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,221,200035,ATK,13550,Add,DEF,3016,Add,NONE,0,Add,700004,17,32,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,222,201677,ATK,13665,Add,DEF,3037,Add,NONE,0,Add,700004,17,32,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,223,203319,ATK,13780,Add,DEF,3058,Add,NONE,0,Add,700004,17,32,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,224,204962,ATK,13895,Add,DEF,3079,Add,NONE,0,Add,700004,17,32,1,Add,NONE,Caster,5 +10022,Arena Stun Rune,225,206604,ATK,14010,Add,DEF,3100,Add,NONE,0,Add,700004,16,32,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,226,208246,ATK,14125,Add,DEF,3121,Add,NONE,0,Add,700004,16,32,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,227,209888,ATK,14240,Add,DEF,3142,Add,NONE,0,Add,700004,16,32,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,228,211530,ATK,14355,Add,DEF,3163,Add,NONE,0,Add,700004,16,32,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,229,213173,ATK,14470,Add,DEF,3184,Add,NONE,0,Add,700004,16,32,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,230,214815,ATK,14585,Add,DEF,3205,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,231,216457,ATK,14700,Add,DEF,3226,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,232,218099,ATK,14815,Add,DEF,3247,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,233,219741,ATK,14930,Add,DEF,3268,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,234,221384,ATK,15045,Add,DEF,3289,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,235,223026,ATK,15160,Add,DEF,3310,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,236,224668,ATK,15275,Add,DEF,3331,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,237,226310,ATK,15390,Add,DEF,3352,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,238,227952,ATK,15505,Add,DEF,3373,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,239,229595,ATK,15620,Add,DEF,3394,Add,NONE,0,Add,700004,16,33,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,240,231237,ATK,15735,Add,DEF,3415,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,241,232879,ATK,15850,Add,DEF,3436,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,242,234521,ATK,15965,Add,DEF,3457,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,243,236163,ATK,16080,Add,DEF,3478,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,244,237806,ATK,16195,Add,DEF,3499,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,245,239448,ATK,16310,Add,DEF,3520,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,246,241090,ATK,16425,Add,DEF,3541,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,247,242732,ATK,16540,Add,DEF,3562,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,248,244374,ATK,16655,Add,DEF,3583,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,249,246017,ATK,16770,Add,DEF,3604,Add,NONE,0,Add,700004,16,34,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,250,247659,ATK,16885,Add,DEF,3625,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,251,250013,ATK,17054,Add,DEF,3651,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,252,252368,ATK,17223,Add,DEF,3677,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,253,254723,ATK,17392,Add,DEF,3703,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,254,257077,ATK,17561,Add,DEF,3729,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,255,259432,ATK,17730,Add,DEF,3755,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,256,261786,ATK,17899,Add,DEF,3781,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,257,264141,ATK,18068,Add,DEF,3807,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,258,266496,ATK,18237,Add,DEF,3833,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,259,268850,ATK,18406,Add,DEF,3859,Add,NONE,0,Add,700004,15,35,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,260,271205,ATK,18575,Add,DEF,3885,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,261,273560,ATK,18744,Add,DEF,3911,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,262,275914,ATK,18913,Add,DEF,3937,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,263,278269,ATK,19082,Add,DEF,3963,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,264,280623,ATK,19251,Add,DEF,3989,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,265,282978,ATK,19420,Add,DEF,4015,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,266,285333,ATK,19589,Add,DEF,4041,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,267,287687,ATK,19758,Add,DEF,4067,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,268,290042,ATK,19927,Add,DEF,4093,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,269,292397,ATK,20096,Add,DEF,4119,Add,NONE,0,Add,700004,15,36,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,270,294751,ATK,20265,Add,DEF,4145,Add,NONE,0,Add,700004,15,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,271,297106,ATK,20434,Add,DEF,4171,Add,NONE,0,Add,700004,15,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,272,299460,ATK,20603,Add,DEF,4197,Add,NONE,0,Add,700004,15,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,273,301815,ATK,20772,Add,DEF,4223,Add,NONE,0,Add,700004,15,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,274,304170,ATK,20941,Add,DEF,4249,Add,NONE,0,Add,700004,15,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,275,306524,ATK,21110,Add,DEF,4275,Add,NONE,0,Add,700004,14,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,276,308879,ATK,21279,Add,DEF,4301,Add,NONE,0,Add,700004,14,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,277,311234,ATK,21448,Add,DEF,4327,Add,NONE,0,Add,700004,14,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,278,313588,ATK,21617,Add,DEF,4353,Add,NONE,0,Add,700004,14,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,279,315943,ATK,21786,Add,DEF,4379,Add,NONE,0,Add,700004,14,37,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,280,318297,ATK,21955,Add,DEF,4405,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,281,320652,ATK,22124,Add,DEF,4431,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,282,323007,ATK,22293,Add,DEF,4457,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,283,325361,ATK,22462,Add,DEF,4483,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,284,327716,ATK,22631,Add,DEF,4509,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,285,330071,ATK,22800,Add,DEF,4535,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,286,332425,ATK,22969,Add,DEF,4561,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,287,334780,ATK,23138,Add,DEF,4587,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,288,337134,ATK,23307,Add,DEF,4613,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,289,339489,ATK,23476,Add,DEF,4639,Add,NONE,0,Add,700004,14,38,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,290,341844,ATK,23645,Add,DEF,4665,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,291,344198,ATK,23814,Add,DEF,4691,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,292,346553,ATK,23983,Add,DEF,4717,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,293,348908,ATK,24152,Add,DEF,4743,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,294,351262,ATK,24321,Add,DEF,4769,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,295,353617,ATK,24490,Add,DEF,4795,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,296,355971,ATK,24659,Add,DEF,4821,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,297,358326,ATK,24828,Add,DEF,4847,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,298,360681,ATK,24997,Add,DEF,4873,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,299,363035,ATK,25166,Add,DEF,4899,Add,NONE,0,Add,700004,14,39,1,Add,NONE,Caster,6 +10022,Arena Stun Rune,300,365390,ATK,25335,Add,DEF,4925,Add,NONE,0,Add,700004,13,40,1,Add,NONE,Caster,7 +10023,Adventure Vampiric Rune,1,1858,DEF,101,Add,HP,792,Add,NONE,0,Add,700006,14,30,3040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,2,2282,DEF,126,Add,HP,944,Add,NONE,0,Add,700006,14,30,3080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,3,2706,DEF,151,Add,HP,1096,Add,NONE,0,Add,700006,14,30,3120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,4,3130,DEF,176,Add,HP,1248,Add,NONE,0,Add,700006,14,30,3160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,5,3555,DEF,201,Add,HP,1400,Add,NONE,0,Add,700006,14,30,3200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,6,3979,DEF,226,Add,HP,1552,Add,NONE,0,Add,700006,14,30,3240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,7,4403,DEF,251,Add,HP,1704,Add,NONE,0,Add,700006,14,30,3280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,8,4827,DEF,276,Add,HP,1856,Add,NONE,0,Add,700006,14,30,3320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,9,5252,DEF,301,Add,HP,2008,Add,NONE,0,Add,700006,14,30,3360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,10,5676,DEF,326,Add,HP,2160,Add,NONE,0,Add,700006,14,30,3400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,11,6100,DEF,351,Add,HP,2312,Add,NONE,0,Add,700006,14,30,3440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,12,6524,DEF,376,Add,HP,2464,Add,NONE,0,Add,700006,14,30,3480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,13,6948,DEF,401,Add,HP,2616,Add,NONE,0,Add,700006,14,30,3520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,14,7373,DEF,426,Add,HP,2768,Add,NONE,0,Add,700006,14,30,3560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,15,7797,DEF,451,Add,HP,2920,Add,NONE,0,Add,700006,14,30,3600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,16,8221,DEF,476,Add,HP,3072,Add,NONE,0,Add,700006,14,30,3640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,17,8645,DEF,501,Add,HP,3224,Add,NONE,0,Add,700006,14,30,3680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,18,9070,DEF,526,Add,HP,3376,Add,NONE,0,Add,700006,14,30,3720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,19,9494,DEF,551,Add,HP,3528,Add,NONE,0,Add,700006,14,30,3760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,20,9918,DEF,576,Add,HP,3680,Add,NONE,0,Add,700006,14,30,3800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,21,10342,DEF,601,Add,HP,3832,Add,NONE,0,Add,700006,14,30,3840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,22,10767,DEF,626,Add,HP,3984,Add,NONE,0,Add,700006,14,30,3880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,23,11191,DEF,651,Add,HP,4136,Add,NONE,0,Add,700006,14,30,3920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,24,11615,DEF,676,Add,HP,4288,Add,NONE,0,Add,700006,14,30,3960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,25,12039,DEF,701,Add,HP,4440,Add,NONE,0,Add,700006,14,30,4000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,26,12464,DEF,726,Add,HP,4592,Add,NONE,0,Add,700006,14,30,4040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,27,12888,DEF,751,Add,HP,4744,Add,NONE,0,Add,700006,14,30,4080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,28,13312,DEF,776,Add,HP,4896,Add,NONE,0,Add,700006,14,30,4120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,29,13736,DEF,801,Add,HP,5048,Add,NONE,0,Add,700006,14,30,4160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,30,14160,DEF,826,Add,HP,5200,Add,NONE,0,Add,700006,14,30,4200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,31,14585,DEF,851,Add,HP,5352,Add,NONE,0,Add,700006,14,30,4240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,32,15009,DEF,876,Add,HP,5504,Add,NONE,0,Add,700006,14,30,4280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,33,15433,DEF,901,Add,HP,5656,Add,NONE,0,Add,700006,14,30,4320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,34,15857,DEF,926,Add,HP,5808,Add,NONE,0,Add,700006,14,30,4360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,35,16282,DEF,951,Add,HP,5960,Add,NONE,0,Add,700006,14,30,4400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,36,16706,DEF,976,Add,HP,6112,Add,NONE,0,Add,700006,14,30,4440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,37,17130,DEF,1001,Add,HP,6264,Add,NONE,0,Add,700006,14,30,4480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,38,17554,DEF,1026,Add,HP,6416,Add,NONE,0,Add,700006,14,30,4520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,39,17979,DEF,1051,Add,HP,6568,Add,NONE,0,Add,700006,14,30,4560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,40,18403,DEF,1076,Add,HP,6720,Add,NONE,0,Add,700006,14,30,4600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,41,18827,DEF,1101,Add,HP,6872,Add,NONE,0,Add,700006,14,30,4640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,42,19251,DEF,1126,Add,HP,7024,Add,NONE,0,Add,700006,14,30,4680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,43,19676,DEF,1151,Add,HP,7176,Add,NONE,0,Add,700006,14,30,4720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,44,20100,DEF,1176,Add,HP,7328,Add,NONE,0,Add,700006,14,30,4760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,45,20524,DEF,1201,Add,HP,7480,Add,NONE,0,Add,700006,14,30,4800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,46,20948,DEF,1226,Add,HP,7632,Add,NONE,0,Add,700006,14,30,4840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,47,21372,DEF,1251,Add,HP,7784,Add,NONE,0,Add,700006,14,30,4880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,48,21797,DEF,1276,Add,HP,7936,Add,NONE,0,Add,700006,14,30,4920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,49,22221,DEF,1301,Add,HP,8088,Add,NONE,0,Add,700006,14,30,4960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,50,22645,DEF,1326,Add,HP,8240,Add,NONE,0,Add,700006,14,30,5000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,51,23137,DEF,1356,Add,HP,8401,Add,NONE,0,Add,700006,14,30,5040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,52,23629,DEF,1386,Add,HP,8562,Add,NONE,0,Add,700006,14,30,5080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,53,24121,DEF,1416,Add,HP,8723,Add,NONE,0,Add,700006,14,30,5120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,54,24613,DEF,1446,Add,HP,8884,Add,NONE,0,Add,700006,14,30,5160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,55,25104,DEF,1476,Add,HP,9045,Add,NONE,0,Add,700006,14,30,5200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,56,25596,DEF,1506,Add,HP,9206,Add,NONE,0,Add,700006,14,30,5240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,57,26088,DEF,1536,Add,HP,9367,Add,NONE,0,Add,700006,14,30,5280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,58,26580,DEF,1566,Add,HP,9528,Add,NONE,0,Add,700006,14,30,5320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,59,27072,DEF,1596,Add,HP,9689,Add,NONE,0,Add,700006,14,30,5360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,60,27564,DEF,1626,Add,HP,9850,Add,NONE,0,Add,700006,14,30,5400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,61,28056,DEF,1656,Add,HP,10011,Add,NONE,0,Add,700006,14,30,5440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,62,28547,DEF,1686,Add,HP,10172,Add,NONE,0,Add,700006,14,30,5480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,63,29039,DEF,1716,Add,HP,10333,Add,NONE,0,Add,700006,14,30,5520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,64,29531,DEF,1746,Add,HP,10494,Add,NONE,0,Add,700006,14,30,5560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,65,30023,DEF,1776,Add,HP,10655,Add,NONE,0,Add,700006,14,30,5600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,66,30515,DEF,1806,Add,HP,10816,Add,NONE,0,Add,700006,14,30,5640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,67,31007,DEF,1836,Add,HP,10977,Add,NONE,0,Add,700006,14,30,5680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,68,31499,DEF,1866,Add,HP,11138,Add,NONE,0,Add,700006,14,30,5720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,69,31990,DEF,1896,Add,HP,11299,Add,NONE,0,Add,700006,14,30,5760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,70,32482,DEF,1926,Add,HP,11460,Add,NONE,0,Add,700006,14,30,5800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,71,32974,DEF,1956,Add,HP,11621,Add,NONE,0,Add,700006,14,30,5840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,72,33466,DEF,1986,Add,HP,11782,Add,NONE,0,Add,700006,14,30,5880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,73,33958,DEF,2016,Add,HP,11943,Add,NONE,0,Add,700006,14,30,5920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,74,34450,DEF,2046,Add,HP,12104,Add,NONE,0,Add,700006,14,30,5960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,75,34942,DEF,2076,Add,HP,12265,Add,NONE,0,Add,700006,14,30,6000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,76,35433,DEF,2106,Add,HP,12426,Add,NONE,0,Add,700006,14,30,6040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,77,35925,DEF,2136,Add,HP,12587,Add,NONE,0,Add,700006,14,30,6080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,78,36417,DEF,2166,Add,HP,12748,Add,NONE,0,Add,700006,14,30,6120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,79,36909,DEF,2196,Add,HP,12909,Add,NONE,0,Add,700006,14,30,6160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,80,37401,DEF,2226,Add,HP,13070,Add,NONE,0,Add,700006,14,30,6200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,81,37893,DEF,2256,Add,HP,13231,Add,NONE,0,Add,700006,14,30,6240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,82,38385,DEF,2286,Add,HP,13392,Add,NONE,0,Add,700006,14,30,6280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,83,38876,DEF,2316,Add,HP,13553,Add,NONE,0,Add,700006,14,30,6320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,84,39368,DEF,2346,Add,HP,13714,Add,NONE,0,Add,700006,14,30,6360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,85,39860,DEF,2376,Add,HP,13875,Add,NONE,0,Add,700006,14,30,6400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,86,40352,DEF,2406,Add,HP,14036,Add,NONE,0,Add,700006,14,30,6440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,87,40844,DEF,2436,Add,HP,14197,Add,NONE,0,Add,700006,14,30,6480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,88,41336,DEF,2466,Add,HP,14358,Add,NONE,0,Add,700006,14,30,6520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,89,41827,DEF,2496,Add,HP,14519,Add,NONE,0,Add,700006,14,30,6560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,90,42319,DEF,2526,Add,HP,14680,Add,NONE,0,Add,700006,14,30,6600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,91,42811,DEF,2556,Add,HP,14841,Add,NONE,0,Add,700006,14,30,6640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,92,43303,DEF,2586,Add,HP,15002,Add,NONE,0,Add,700006,14,30,6680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,93,43795,DEF,2616,Add,HP,15163,Add,NONE,0,Add,700006,14,30,6720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,94,44287,DEF,2646,Add,HP,15324,Add,NONE,0,Add,700006,14,30,6760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,95,44779,DEF,2676,Add,HP,15485,Add,NONE,0,Add,700006,14,30,6800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,96,45270,DEF,2706,Add,HP,15646,Add,NONE,0,Add,700006,14,30,6840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,97,45762,DEF,2736,Add,HP,15807,Add,NONE,0,Add,700006,14,30,6880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,98,46254,DEF,2766,Add,HP,15968,Add,NONE,0,Add,700006,14,30,6920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,99,46746,DEF,2796,Add,HP,16129,Add,NONE,0,Add,700006,14,30,6960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,100,47238,DEF,2826,Add,HP,16290,Add,NONE,0,Add,700006,14,30,7000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,101,47897,DEF,2867,Add,HP,16494,Add,NONE,0,Add,700006,14,30,7040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,102,48556,DEF,2908,Add,HP,16698,Add,NONE,0,Add,700006,14,30,7080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,103,49216,DEF,2949,Add,HP,16902,Add,NONE,0,Add,700006,14,30,7120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,104,49875,DEF,2990,Add,HP,17106,Add,NONE,0,Add,700006,14,30,7160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,105,50534,DEF,3031,Add,HP,17310,Add,NONE,0,Add,700006,14,30,7200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,106,51194,DEF,3072,Add,HP,17514,Add,NONE,0,Add,700006,14,30,7240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,107,51853,DEF,3113,Add,HP,17718,Add,NONE,0,Add,700006,14,30,7280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,108,52512,DEF,3154,Add,HP,17922,Add,NONE,0,Add,700006,14,30,7320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,109,53172,DEF,3195,Add,HP,18126,Add,NONE,0,Add,700006,14,30,7360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,110,53831,DEF,3236,Add,HP,18330,Add,NONE,0,Add,700006,14,30,7400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,111,54490,DEF,3277,Add,HP,18534,Add,NONE,0,Add,700006,14,30,7440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,112,55149,DEF,3318,Add,HP,18738,Add,NONE,0,Add,700006,14,30,7480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,113,55809,DEF,3359,Add,HP,18942,Add,NONE,0,Add,700006,14,30,7520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,114,56468,DEF,3400,Add,HP,19146,Add,NONE,0,Add,700006,14,30,7560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,115,57127,DEF,3441,Add,HP,19350,Add,NONE,0,Add,700006,14,30,7600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,116,57787,DEF,3482,Add,HP,19554,Add,NONE,0,Add,700006,14,30,7640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,117,58446,DEF,3523,Add,HP,19758,Add,NONE,0,Add,700006,14,30,7680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,118,59105,DEF,3564,Add,HP,19962,Add,NONE,0,Add,700006,14,30,7720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,119,59765,DEF,3605,Add,HP,20166,Add,NONE,0,Add,700006,14,30,7760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,120,60424,DEF,3646,Add,HP,20370,Add,NONE,0,Add,700006,14,30,7800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,121,61083,DEF,3687,Add,HP,20574,Add,NONE,0,Add,700006,14,30,7840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,122,61742,DEF,3728,Add,HP,20778,Add,NONE,0,Add,700006,14,30,7880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,123,62402,DEF,3769,Add,HP,20982,Add,NONE,0,Add,700006,14,30,7920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,124,63061,DEF,3810,Add,HP,21186,Add,NONE,0,Add,700006,14,30,7960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,125,63720,DEF,3851,Add,HP,21390,Add,NONE,0,Add,700006,14,30,8000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,126,64380,DEF,3892,Add,HP,21594,Add,NONE,0,Add,700006,14,30,8040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,127,65039,DEF,3933,Add,HP,21798,Add,NONE,0,Add,700006,14,30,8080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,128,65698,DEF,3974,Add,HP,22002,Add,NONE,0,Add,700006,14,30,8120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,129,66357,DEF,4015,Add,HP,22206,Add,NONE,0,Add,700006,14,30,8160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,130,67017,DEF,4056,Add,HP,22410,Add,NONE,0,Add,700006,14,30,8200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,131,67676,DEF,4097,Add,HP,22614,Add,NONE,0,Add,700006,14,30,8240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,132,68335,DEF,4138,Add,HP,22818,Add,NONE,0,Add,700006,14,30,8280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,133,68995,DEF,4179,Add,HP,23022,Add,NONE,0,Add,700006,14,30,8320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,134,69654,DEF,4220,Add,HP,23226,Add,NONE,0,Add,700006,14,30,8360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,135,70313,DEF,4261,Add,HP,23430,Add,NONE,0,Add,700006,14,30,8400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,136,70973,DEF,4302,Add,HP,23634,Add,NONE,0,Add,700006,14,30,8440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,137,71632,DEF,4343,Add,HP,23838,Add,NONE,0,Add,700006,14,30,8480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,138,72291,DEF,4384,Add,HP,24042,Add,NONE,0,Add,700006,14,30,8520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,139,72950,DEF,4425,Add,HP,24246,Add,NONE,0,Add,700006,14,30,8560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,140,73610,DEF,4466,Add,HP,24450,Add,NONE,0,Add,700006,14,30,8600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,141,74269,DEF,4507,Add,HP,24654,Add,NONE,0,Add,700006,14,30,8640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,142,74928,DEF,4548,Add,HP,24858,Add,NONE,0,Add,700006,14,30,8680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,143,75588,DEF,4589,Add,HP,25062,Add,NONE,0,Add,700006,14,30,8720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,144,76247,DEF,4630,Add,HP,25266,Add,NONE,0,Add,700006,14,30,8760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,145,76906,DEF,4671,Add,HP,25470,Add,NONE,0,Add,700006,14,30,8800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,146,77565,DEF,4712,Add,HP,25674,Add,NONE,0,Add,700006,14,30,8840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,147,78225,DEF,4753,Add,HP,25878,Add,NONE,0,Add,700006,14,30,8880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,148,78884,DEF,4794,Add,HP,26082,Add,NONE,0,Add,700006,14,30,8920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,149,79543,DEF,4835,Add,HP,26286,Add,NONE,0,Add,700006,14,30,8960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,150,80203,DEF,4876,Add,HP,26490,Add,NONE,0,Add,700006,14,30,9000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,151,81805,DEF,4936,Add,HP,27580,Add,NONE,0,Add,700006,14,30,9040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,152,83407,DEF,4996,Add,HP,28670,Add,NONE,0,Add,700006,14,30,9080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,153,85008,DEF,5056,Add,HP,29760,Add,NONE,0,Add,700006,14,30,9120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,154,86610,DEF,5116,Add,HP,30850,Add,NONE,0,Add,700006,14,30,9160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,155,88212,DEF,5176,Add,HP,31940,Add,NONE,0,Add,700006,14,30,9200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,156,89814,DEF,5236,Add,HP,33030,Add,NONE,0,Add,700006,14,30,9240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,157,91416,DEF,5296,Add,HP,34120,Add,NONE,0,Add,700006,14,30,9280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,158,93018,DEF,5356,Add,HP,35210,Add,NONE,0,Add,700006,14,30,9320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,159,94620,DEF,5416,Add,HP,36300,Add,NONE,0,Add,700006,14,30,9360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,160,96222,DEF,5476,Add,HP,37390,Add,NONE,0,Add,700006,14,30,9400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,161,97824,DEF,5536,Add,HP,38480,Add,NONE,0,Add,700006,14,30,9440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,162,99426,DEF,5596,Add,HP,39570,Add,NONE,0,Add,700006,14,30,9480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,163,101028,DEF,5656,Add,HP,40660,Add,NONE,0,Add,700006,14,30,9520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,164,102630,DEF,5716,Add,HP,41750,Add,NONE,0,Add,700006,14,30,9560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,165,104232,DEF,5776,Add,HP,42840,Add,NONE,0,Add,700006,14,30,9600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,166,105834,DEF,5836,Add,HP,43930,Add,NONE,0,Add,700006,14,30,9640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,167,107436,DEF,5896,Add,HP,45020,Add,NONE,0,Add,700006,14,30,9680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,168,109038,DEF,5956,Add,HP,46110,Add,NONE,0,Add,700006,14,30,9720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,169,110640,DEF,6016,Add,HP,47200,Add,NONE,0,Add,700006,14,30,9760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,170,112242,DEF,6076,Add,HP,48290,Add,NONE,0,Add,700006,14,30,9800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,171,113844,DEF,6136,Add,HP,49380,Add,NONE,0,Add,700006,14,30,9840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,172,115446,DEF,6196,Add,HP,50470,Add,NONE,0,Add,700006,14,30,9880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,173,117047,DEF,6256,Add,HP,51560,Add,NONE,0,Add,700006,14,30,9920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,174,118649,DEF,6316,Add,HP,52650,Add,NONE,0,Add,700006,14,30,9960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,175,120251,DEF,6376,Add,HP,53740,Add,NONE,0,Add,700006,14,30,10000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,176,121853,DEF,6436,Add,HP,54830,Add,NONE,0,Add,700006,14,30,10040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,177,123455,DEF,6496,Add,HP,55920,Add,NONE,0,Add,700006,14,30,10080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,178,125057,DEF,6556,Add,HP,57010,Add,NONE,0,Add,700006,14,30,10120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,179,126659,DEF,6616,Add,HP,58100,Add,NONE,0,Add,700006,14,30,10160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,180,128261,DEF,6676,Add,HP,59190,Add,NONE,0,Add,700006,14,30,10200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,181,129863,DEF,6736,Add,HP,60280,Add,NONE,0,Add,700006,14,30,10240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,182,131465,DEF,6796,Add,HP,61370,Add,NONE,0,Add,700006,14,30,10280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,183,133067,DEF,6856,Add,HP,62460,Add,NONE,0,Add,700006,14,30,10320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,184,134669,DEF,6916,Add,HP,63550,Add,NONE,0,Add,700006,14,30,10360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,185,136271,DEF,6976,Add,HP,64640,Add,NONE,0,Add,700006,14,30,10400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,186,137873,DEF,7036,Add,HP,65730,Add,NONE,0,Add,700006,14,30,10440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,187,139475,DEF,7096,Add,HP,66820,Add,NONE,0,Add,700006,14,30,10480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,188,141077,DEF,7156,Add,HP,67910,Add,NONE,0,Add,700006,14,30,10520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,189,142679,DEF,7216,Add,HP,69000,Add,NONE,0,Add,700006,14,30,10560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,190,144281,DEF,7276,Add,HP,70090,Add,NONE,0,Add,700006,14,30,10600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,191,145883,DEF,7336,Add,HP,71180,Add,NONE,0,Add,700006,14,30,10640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,192,147485,DEF,7396,Add,HP,72270,Add,NONE,0,Add,700006,14,30,10680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,193,149086,DEF,7456,Add,HP,73360,Add,NONE,0,Add,700006,14,30,10720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,194,150688,DEF,7516,Add,HP,74450,Add,NONE,0,Add,700006,14,30,10760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,195,152290,DEF,7576,Add,HP,75540,Add,NONE,0,Add,700006,14,30,10800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,196,153892,DEF,7636,Add,HP,76630,Add,NONE,0,Add,700006,14,30,10840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,197,155494,DEF,7696,Add,HP,77720,Add,NONE,0,Add,700006,14,30,10880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,198,157096,DEF,7756,Add,HP,78810,Add,NONE,0,Add,700006,14,30,10920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,199,158698,DEF,7816,Add,HP,79900,Add,NONE,0,Add,700006,14,30,10960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,200,160300,DEF,7876,Add,HP,80990,Add,NONE,0,Add,700006,14,30,11000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,201,162389,DEF,7940,Add,HP,82625,Add,NONE,0,Add,700006,14,30,11040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,202,164478,DEF,8004,Add,HP,84260,Add,NONE,0,Add,700006,14,30,11080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,203,166567,DEF,8068,Add,HP,85895,Add,NONE,0,Add,700006,14,30,11120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,204,168656,DEF,8132,Add,HP,87530,Add,NONE,0,Add,700006,14,30,11160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,205,170745,DEF,8196,Add,HP,89165,Add,NONE,0,Add,700006,14,30,11200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,206,172834,DEF,8260,Add,HP,90800,Add,NONE,0,Add,700006,14,30,11240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,207,174923,DEF,8324,Add,HP,92435,Add,NONE,0,Add,700006,14,30,11280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,208,177012,DEF,8388,Add,HP,94070,Add,NONE,0,Add,700006,14,30,11320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,209,179101,DEF,8452,Add,HP,95705,Add,NONE,0,Add,700006,14,30,11360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,210,181190,DEF,8516,Add,HP,97340,Add,NONE,0,Add,700006,14,30,11400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,211,183279,DEF,8580,Add,HP,98975,Add,NONE,0,Add,700006,14,30,11440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,212,185368,DEF,8644,Add,HP,100610,Add,NONE,0,Add,700006,14,30,11480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,213,187457,DEF,8708,Add,HP,102245,Add,NONE,0,Add,700006,14,30,11520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,214,189546,DEF,8772,Add,HP,103880,Add,NONE,0,Add,700006,14,30,11560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,215,191635,DEF,8836,Add,HP,105515,Add,NONE,0,Add,700006,14,30,11600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,216,193724,DEF,8900,Add,HP,107150,Add,NONE,0,Add,700006,14,30,11640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,217,195813,DEF,8964,Add,HP,108785,Add,NONE,0,Add,700006,14,30,11680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,218,197902,DEF,9028,Add,HP,110420,Add,NONE,0,Add,700006,14,30,11720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,219,199991,DEF,9092,Add,HP,112055,Add,NONE,0,Add,700006,14,30,11760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,220,202080,DEF,9156,Add,HP,113690,Add,NONE,0,Add,700006,14,30,11800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,221,204169,DEF,9220,Add,HP,115325,Add,NONE,0,Add,700006,14,30,11840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,222,206258,DEF,9284,Add,HP,116960,Add,NONE,0,Add,700006,14,30,11880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,223,208347,DEF,9348,Add,HP,118595,Add,NONE,0,Add,700006,14,30,11920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,224,210436,DEF,9412,Add,HP,120230,Add,NONE,0,Add,700006,14,30,11960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,225,212525,DEF,9476,Add,HP,121865,Add,NONE,0,Add,700006,14,30,12000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,226,214613,DEF,9540,Add,HP,123500,Add,NONE,0,Add,700006,14,30,12040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,227,216702,DEF,9604,Add,HP,125135,Add,NONE,0,Add,700006,14,30,12080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,228,218791,DEF,9668,Add,HP,126770,Add,NONE,0,Add,700006,14,30,12120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,229,220880,DEF,9732,Add,HP,128405,Add,NONE,0,Add,700006,14,30,12160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,230,222969,DEF,9796,Add,HP,130040,Add,NONE,0,Add,700006,14,30,12200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,231,225058,DEF,9860,Add,HP,131675,Add,NONE,0,Add,700006,14,30,12240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,232,227147,DEF,9924,Add,HP,133310,Add,NONE,0,Add,700006,14,30,12280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,233,229236,DEF,9988,Add,HP,134945,Add,NONE,0,Add,700006,14,30,12320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,234,231325,DEF,10052,Add,HP,136580,Add,NONE,0,Add,700006,14,30,12360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,235,233414,DEF,10116,Add,HP,138215,Add,NONE,0,Add,700006,14,30,12400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,236,235503,DEF,10180,Add,HP,139850,Add,NONE,0,Add,700006,14,30,12440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,237,237592,DEF,10244,Add,HP,141485,Add,NONE,0,Add,700006,14,30,12480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,238,239681,DEF,10308,Add,HP,143120,Add,NONE,0,Add,700006,14,30,12520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,239,241770,DEF,10372,Add,HP,144755,Add,NONE,0,Add,700006,14,30,12560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,240,243859,DEF,10436,Add,HP,146390,Add,NONE,0,Add,700006,14,30,12600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,241,245948,DEF,10500,Add,HP,148025,Add,NONE,0,Add,700006,14,30,12640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,242,248037,DEF,10564,Add,HP,149660,Add,NONE,0,Add,700006,14,30,12680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,243,250126,DEF,10628,Add,HP,151295,Add,NONE,0,Add,700006,14,30,12720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,244,252215,DEF,10692,Add,HP,152930,Add,NONE,0,Add,700006,14,30,12760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,245,254304,DEF,10756,Add,HP,154565,Add,NONE,0,Add,700006,14,30,12800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,246,256393,DEF,10820,Add,HP,156200,Add,NONE,0,Add,700006,14,30,12840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,247,258482,DEF,10884,Add,HP,157835,Add,NONE,0,Add,700006,14,30,12880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,248,260571,DEF,10948,Add,HP,159470,Add,NONE,0,Add,700006,14,30,12920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,249,262660,DEF,11012,Add,HP,161105,Add,NONE,0,Add,700006,14,30,12960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,250,264749,DEF,11076,Add,HP,162740,Add,NONE,0,Add,700006,14,30,13000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,251,267124,DEF,11155,Add,HP,164506,Add,NONE,0,Add,700006,14,30,13040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,252,269500,DEF,11234,Add,HP,166272,Add,NONE,0,Add,700006,14,30,13080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,253,271876,DEF,11313,Add,HP,168038,Add,NONE,0,Add,700006,14,30,13120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,254,274251,DEF,11392,Add,HP,169804,Add,NONE,0,Add,700006,14,30,13160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,255,276627,DEF,11471,Add,HP,171570,Add,NONE,0,Add,700006,14,30,13200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,256,279002,DEF,11550,Add,HP,173336,Add,NONE,0,Add,700006,14,30,13240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,257,281378,DEF,11629,Add,HP,175102,Add,NONE,0,Add,700006,14,30,13280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,258,283753,DEF,11708,Add,HP,176868,Add,NONE,0,Add,700006,14,30,13320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,259,286129,DEF,11787,Add,HP,178634,Add,NONE,0,Add,700006,14,30,13360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,260,288504,DEF,11866,Add,HP,180400,Add,NONE,0,Add,700006,14,30,13400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,261,290880,DEF,11945,Add,HP,182166,Add,NONE,0,Add,700006,14,30,13440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,262,293256,DEF,12024,Add,HP,183932,Add,NONE,0,Add,700006,14,30,13480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,263,295631,DEF,12103,Add,HP,185698,Add,NONE,0,Add,700006,14,30,13520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,264,298007,DEF,12182,Add,HP,187464,Add,NONE,0,Add,700006,14,30,13560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,265,300382,DEF,12261,Add,HP,189230,Add,NONE,0,Add,700006,14,30,13600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,266,302758,DEF,12340,Add,HP,190996,Add,NONE,0,Add,700006,14,30,13640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,267,305133,DEF,12419,Add,HP,192762,Add,NONE,0,Add,700006,14,30,13680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,268,307509,DEF,12498,Add,HP,194528,Add,NONE,0,Add,700006,14,30,13720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,269,309884,DEF,12577,Add,HP,196294,Add,NONE,0,Add,700006,14,30,13760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,270,312260,DEF,12656,Add,HP,198060,Add,NONE,0,Add,700006,14,30,13800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,271,314636,DEF,12735,Add,HP,199826,Add,NONE,0,Add,700006,14,30,13840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,272,317011,DEF,12814,Add,HP,201592,Add,NONE,0,Add,700006,14,30,13880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,273,319387,DEF,12893,Add,HP,203358,Add,NONE,0,Add,700006,14,30,13920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,274,321762,DEF,12972,Add,HP,205124,Add,NONE,0,Add,700006,14,30,13960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,275,324138,DEF,13051,Add,HP,206890,Add,NONE,0,Add,700006,14,30,14000,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,276,326513,DEF,13130,Add,HP,208656,Add,NONE,0,Add,700006,14,30,14040,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,277,328889,DEF,13209,Add,HP,210422,Add,NONE,0,Add,700006,14,30,14080,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,278,331264,DEF,13288,Add,HP,212188,Add,NONE,0,Add,700006,14,30,14120,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,279,333640,DEF,13367,Add,HP,213954,Add,NONE,0,Add,700006,14,30,14160,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,280,336016,DEF,13446,Add,HP,215720,Add,NONE,0,Add,700006,14,30,14200,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,281,338391,DEF,13525,Add,HP,217486,Add,NONE,0,Add,700006,14,30,14240,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,282,340767,DEF,13604,Add,HP,219252,Add,NONE,0,Add,700006,14,30,14280,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,283,343142,DEF,13683,Add,HP,221018,Add,NONE,0,Add,700006,14,30,14320,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,284,345518,DEF,13762,Add,HP,222784,Add,NONE,0,Add,700006,14,30,14360,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,285,347893,DEF,13841,Add,HP,224550,Add,NONE,0,Add,700006,14,30,14400,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,286,350269,DEF,13920,Add,HP,226316,Add,NONE,0,Add,700006,14,30,14440,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,287,352644,DEF,13999,Add,HP,228082,Add,NONE,0,Add,700006,14,30,14480,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,288,355020,DEF,14078,Add,HP,229848,Add,NONE,0,Add,700006,14,30,14520,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,289,357396,DEF,14157,Add,HP,231614,Add,NONE,0,Add,700006,14,30,14560,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,290,359771,DEF,14236,Add,HP,233380,Add,NONE,0,Add,700006,14,30,14600,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,291,362147,DEF,14315,Add,HP,235146,Add,NONE,0,Add,700006,14,30,14640,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,292,364522,DEF,14394,Add,HP,236912,Add,NONE,0,Add,700006,14,30,14680,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,293,366898,DEF,14473,Add,HP,238678,Add,NONE,0,Add,700006,14,30,14720,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,294,369273,DEF,14552,Add,HP,240444,Add,NONE,0,Add,700006,14,30,14760,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,295,371649,DEF,14631,Add,HP,242210,Add,NONE,0,Add,700006,14,30,14800,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,296,374024,DEF,14710,Add,HP,243976,Add,NONE,0,Add,700006,14,30,14840,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,297,376400,DEF,14789,Add,HP,245742,Add,NONE,0,Add,700006,14,30,14880,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,298,378776,DEF,14868,Add,HP,247508,Add,NONE,0,Add,700006,14,30,14920,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,299,381151,DEF,14947,Add,HP,249274,Add,NONE,0,Add,700006,14,30,14960,Add,NONE,Caster,20 +10023,Adventure Vampiric Rune,300,383527,DEF,15026,Add,HP,251040,Add,NONE,0,Add,700006,14,30,15000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,1,1858,DEF,101,Add,HP,792,Add,NONE,0,Add,700006,14,30,10050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,2,2282,DEF,126,Add,HP,944,Add,NONE,0,Add,700006,14,30,10100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,3,2706,DEF,151,Add,HP,1096,Add,NONE,0,Add,700006,14,30,10150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,4,3130,DEF,176,Add,HP,1248,Add,NONE,0,Add,700006,14,30,10200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,5,3555,DEF,201,Add,HP,1400,Add,NONE,0,Add,700006,14,30,10250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,6,3979,DEF,226,Add,HP,1552,Add,NONE,0,Add,700006,14,30,10300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,7,4403,DEF,251,Add,HP,1704,Add,NONE,0,Add,700006,14,30,10350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,8,4827,DEF,276,Add,HP,1856,Add,NONE,0,Add,700006,14,30,10400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,9,5252,DEF,301,Add,HP,2008,Add,NONE,0,Add,700006,14,30,10450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,10,5676,DEF,326,Add,HP,2160,Add,NONE,0,Add,700006,14,30,10500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,11,6100,DEF,351,Add,HP,2312,Add,NONE,0,Add,700006,14,30,10550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,12,6524,DEF,376,Add,HP,2464,Add,NONE,0,Add,700006,14,30,10600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,13,6948,DEF,401,Add,HP,2616,Add,NONE,0,Add,700006,14,30,10650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,14,7373,DEF,426,Add,HP,2768,Add,NONE,0,Add,700006,14,30,10700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,15,7797,DEF,451,Add,HP,2920,Add,NONE,0,Add,700006,14,30,10750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,16,8221,DEF,476,Add,HP,3072,Add,NONE,0,Add,700006,14,30,10800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,17,8645,DEF,501,Add,HP,3224,Add,NONE,0,Add,700006,14,30,10850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,18,9070,DEF,526,Add,HP,3376,Add,NONE,0,Add,700006,14,30,10900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,19,9494,DEF,551,Add,HP,3528,Add,NONE,0,Add,700006,14,30,10950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,20,9918,DEF,576,Add,HP,3680,Add,NONE,0,Add,700006,14,30,11000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,21,10342,DEF,601,Add,HP,3832,Add,NONE,0,Add,700006,14,30,11050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,22,10767,DEF,626,Add,HP,3984,Add,NONE,0,Add,700006,14,30,11100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,23,11191,DEF,651,Add,HP,4136,Add,NONE,0,Add,700006,14,30,11150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,24,11615,DEF,676,Add,HP,4288,Add,NONE,0,Add,700006,14,30,11200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,25,12039,DEF,701,Add,HP,4440,Add,NONE,0,Add,700006,14,30,11250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,26,12464,DEF,726,Add,HP,4592,Add,NONE,0,Add,700006,14,30,11300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,27,12888,DEF,751,Add,HP,4744,Add,NONE,0,Add,700006,14,30,11350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,28,13312,DEF,776,Add,HP,4896,Add,NONE,0,Add,700006,14,30,11400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,29,13736,DEF,801,Add,HP,5048,Add,NONE,0,Add,700006,14,30,11450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,30,14160,DEF,826,Add,HP,5200,Add,NONE,0,Add,700006,14,30,11500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,31,14585,DEF,851,Add,HP,5352,Add,NONE,0,Add,700006,14,30,11550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,32,15009,DEF,876,Add,HP,5504,Add,NONE,0,Add,700006,14,30,11600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,33,15433,DEF,901,Add,HP,5656,Add,NONE,0,Add,700006,14,30,11650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,34,15857,DEF,926,Add,HP,5808,Add,NONE,0,Add,700006,14,30,11700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,35,16282,DEF,951,Add,HP,5960,Add,NONE,0,Add,700006,14,30,11750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,36,16706,DEF,976,Add,HP,6112,Add,NONE,0,Add,700006,14,30,11800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,37,17130,DEF,1001,Add,HP,6264,Add,NONE,0,Add,700006,14,30,11850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,38,17554,DEF,1026,Add,HP,6416,Add,NONE,0,Add,700006,14,30,11900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,39,17979,DEF,1051,Add,HP,6568,Add,NONE,0,Add,700006,14,30,11950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,40,18403,DEF,1076,Add,HP,6720,Add,NONE,0,Add,700006,14,30,12000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,41,18827,DEF,1101,Add,HP,6872,Add,NONE,0,Add,700006,14,30,12050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,42,19251,DEF,1126,Add,HP,7024,Add,NONE,0,Add,700006,14,30,12100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,43,19676,DEF,1151,Add,HP,7176,Add,NONE,0,Add,700006,14,30,12150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,44,20100,DEF,1176,Add,HP,7328,Add,NONE,0,Add,700006,14,30,12200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,45,20524,DEF,1201,Add,HP,7480,Add,NONE,0,Add,700006,14,30,12250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,46,20948,DEF,1226,Add,HP,7632,Add,NONE,0,Add,700006,14,30,12300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,47,21372,DEF,1251,Add,HP,7784,Add,NONE,0,Add,700006,14,30,12350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,48,21797,DEF,1276,Add,HP,7936,Add,NONE,0,Add,700006,14,30,12400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,49,22221,DEF,1301,Add,HP,8088,Add,NONE,0,Add,700006,14,30,12450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,50,22645,DEF,1326,Add,HP,8240,Add,NONE,0,Add,700006,14,30,12500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,51,23137,DEF,1356,Add,HP,8401,Add,NONE,0,Add,700006,14,30,12550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,52,23629,DEF,1386,Add,HP,8562,Add,NONE,0,Add,700006,14,30,12600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,53,24121,DEF,1416,Add,HP,8723,Add,NONE,0,Add,700006,14,30,12650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,54,24613,DEF,1446,Add,HP,8884,Add,NONE,0,Add,700006,14,30,12700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,55,25104,DEF,1476,Add,HP,9045,Add,NONE,0,Add,700006,14,30,12750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,56,25596,DEF,1506,Add,HP,9206,Add,NONE,0,Add,700006,14,30,12800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,57,26088,DEF,1536,Add,HP,9367,Add,NONE,0,Add,700006,14,30,12850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,58,26580,DEF,1566,Add,HP,9528,Add,NONE,0,Add,700006,14,30,12900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,59,27072,DEF,1596,Add,HP,9689,Add,NONE,0,Add,700006,14,30,12950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,60,27564,DEF,1626,Add,HP,9850,Add,NONE,0,Add,700006,14,30,13000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,61,28056,DEF,1656,Add,HP,10011,Add,NONE,0,Add,700006,14,30,13050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,62,28547,DEF,1686,Add,HP,10172,Add,NONE,0,Add,700006,14,30,13100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,63,29039,DEF,1716,Add,HP,10333,Add,NONE,0,Add,700006,14,30,13150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,64,29531,DEF,1746,Add,HP,10494,Add,NONE,0,Add,700006,14,30,13200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,65,30023,DEF,1776,Add,HP,10655,Add,NONE,0,Add,700006,14,30,13250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,66,30515,DEF,1806,Add,HP,10816,Add,NONE,0,Add,700006,14,30,13300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,67,31007,DEF,1836,Add,HP,10977,Add,NONE,0,Add,700006,14,30,13350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,68,31499,DEF,1866,Add,HP,11138,Add,NONE,0,Add,700006,14,30,13400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,69,31990,DEF,1896,Add,HP,11299,Add,NONE,0,Add,700006,14,30,13450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,70,32482,DEF,1926,Add,HP,11460,Add,NONE,0,Add,700006,14,30,13500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,71,32974,DEF,1956,Add,HP,11621,Add,NONE,0,Add,700006,14,30,13550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,72,33466,DEF,1986,Add,HP,11782,Add,NONE,0,Add,700006,14,30,13600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,73,33958,DEF,2016,Add,HP,11943,Add,NONE,0,Add,700006,14,30,13650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,74,34450,DEF,2046,Add,HP,12104,Add,NONE,0,Add,700006,14,30,13700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,75,34942,DEF,2076,Add,HP,12265,Add,NONE,0,Add,700006,14,30,13750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,76,35433,DEF,2106,Add,HP,12426,Add,NONE,0,Add,700006,14,30,13800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,77,35925,DEF,2136,Add,HP,12587,Add,NONE,0,Add,700006,14,30,13850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,78,36417,DEF,2166,Add,HP,12748,Add,NONE,0,Add,700006,14,30,13900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,79,36909,DEF,2196,Add,HP,12909,Add,NONE,0,Add,700006,14,30,13950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,80,37401,DEF,2226,Add,HP,13070,Add,NONE,0,Add,700006,14,30,14000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,81,37893,DEF,2256,Add,HP,13231,Add,NONE,0,Add,700006,14,30,14050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,82,38385,DEF,2286,Add,HP,13392,Add,NONE,0,Add,700006,14,30,14100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,83,38876,DEF,2316,Add,HP,13553,Add,NONE,0,Add,700006,14,30,14150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,84,39368,DEF,2346,Add,HP,13714,Add,NONE,0,Add,700006,14,30,14200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,85,39860,DEF,2376,Add,HP,13875,Add,NONE,0,Add,700006,14,30,14250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,86,40352,DEF,2406,Add,HP,14036,Add,NONE,0,Add,700006,14,30,14300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,87,40844,DEF,2436,Add,HP,14197,Add,NONE,0,Add,700006,14,30,14350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,88,41336,DEF,2466,Add,HP,14358,Add,NONE,0,Add,700006,14,30,14400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,89,41827,DEF,2496,Add,HP,14519,Add,NONE,0,Add,700006,14,30,14450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,90,42319,DEF,2526,Add,HP,14680,Add,NONE,0,Add,700006,14,30,14500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,91,42811,DEF,2556,Add,HP,14841,Add,NONE,0,Add,700006,14,30,14550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,92,43303,DEF,2586,Add,HP,15002,Add,NONE,0,Add,700006,14,30,14600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,93,43795,DEF,2616,Add,HP,15163,Add,NONE,0,Add,700006,14,30,14650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,94,44287,DEF,2646,Add,HP,15324,Add,NONE,0,Add,700006,14,30,14700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,95,44779,DEF,2676,Add,HP,15485,Add,NONE,0,Add,700006,14,30,14750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,96,45270,DEF,2706,Add,HP,15646,Add,NONE,0,Add,700006,14,30,14800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,97,45762,DEF,2736,Add,HP,15807,Add,NONE,0,Add,700006,14,30,14850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,98,46254,DEF,2766,Add,HP,15968,Add,NONE,0,Add,700006,14,30,14900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,99,46746,DEF,2796,Add,HP,16129,Add,NONE,0,Add,700006,14,30,14950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,100,47238,DEF,2826,Add,HP,16290,Add,NONE,0,Add,700006,14,30,15000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,101,47897,DEF,2867,Add,HP,16494,Add,NONE,0,Add,700006,14,30,15050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,102,48556,DEF,2908,Add,HP,16698,Add,NONE,0,Add,700006,14,30,15100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,103,49216,DEF,2949,Add,HP,16902,Add,NONE,0,Add,700006,14,30,15150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,104,49875,DEF,2990,Add,HP,17106,Add,NONE,0,Add,700006,14,30,15200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,105,50534,DEF,3031,Add,HP,17310,Add,NONE,0,Add,700006,14,30,15250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,106,51194,DEF,3072,Add,HP,17514,Add,NONE,0,Add,700006,14,30,15300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,107,51853,DEF,3113,Add,HP,17718,Add,NONE,0,Add,700006,14,30,15350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,108,52512,DEF,3154,Add,HP,17922,Add,NONE,0,Add,700006,14,30,15400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,109,53172,DEF,3195,Add,HP,18126,Add,NONE,0,Add,700006,14,30,15450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,110,53831,DEF,3236,Add,HP,18330,Add,NONE,0,Add,700006,14,30,15500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,111,54490,DEF,3277,Add,HP,18534,Add,NONE,0,Add,700006,14,30,15550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,112,55149,DEF,3318,Add,HP,18738,Add,NONE,0,Add,700006,14,30,15600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,113,55809,DEF,3359,Add,HP,18942,Add,NONE,0,Add,700006,14,30,15650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,114,56468,DEF,3400,Add,HP,19146,Add,NONE,0,Add,700006,14,30,15700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,115,57127,DEF,3441,Add,HP,19350,Add,NONE,0,Add,700006,14,30,15750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,116,57787,DEF,3482,Add,HP,19554,Add,NONE,0,Add,700006,14,30,15800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,117,58446,DEF,3523,Add,HP,19758,Add,NONE,0,Add,700006,14,30,15850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,118,59105,DEF,3564,Add,HP,19962,Add,NONE,0,Add,700006,14,30,15900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,119,59765,DEF,3605,Add,HP,20166,Add,NONE,0,Add,700006,14,30,15950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,120,60424,DEF,3646,Add,HP,20370,Add,NONE,0,Add,700006,14,30,16000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,121,61083,DEF,3687,Add,HP,20574,Add,NONE,0,Add,700006,14,30,16050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,122,61742,DEF,3728,Add,HP,20778,Add,NONE,0,Add,700006,14,30,16100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,123,62402,DEF,3769,Add,HP,20982,Add,NONE,0,Add,700006,14,30,16150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,124,63061,DEF,3810,Add,HP,21186,Add,NONE,0,Add,700006,14,30,16200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,125,63720,DEF,3851,Add,HP,21390,Add,NONE,0,Add,700006,14,30,16250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,126,64380,DEF,3892,Add,HP,21594,Add,NONE,0,Add,700006,14,30,16300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,127,65039,DEF,3933,Add,HP,21798,Add,NONE,0,Add,700006,14,30,16350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,128,65698,DEF,3974,Add,HP,22002,Add,NONE,0,Add,700006,14,30,16400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,129,66357,DEF,4015,Add,HP,22206,Add,NONE,0,Add,700006,14,30,16450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,130,67017,DEF,4056,Add,HP,22410,Add,NONE,0,Add,700006,14,30,16500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,131,67676,DEF,4097,Add,HP,22614,Add,NONE,0,Add,700006,14,30,16550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,132,68335,DEF,4138,Add,HP,22818,Add,NONE,0,Add,700006,14,30,16600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,133,68995,DEF,4179,Add,HP,23022,Add,NONE,0,Add,700006,14,30,16650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,134,69654,DEF,4220,Add,HP,23226,Add,NONE,0,Add,700006,14,30,16700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,135,70313,DEF,4261,Add,HP,23430,Add,NONE,0,Add,700006,14,30,16750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,136,70973,DEF,4302,Add,HP,23634,Add,NONE,0,Add,700006,14,30,16800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,137,71632,DEF,4343,Add,HP,23838,Add,NONE,0,Add,700006,14,30,16850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,138,72291,DEF,4384,Add,HP,24042,Add,NONE,0,Add,700006,14,30,16900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,139,72950,DEF,4425,Add,HP,24246,Add,NONE,0,Add,700006,14,30,16950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,140,73610,DEF,4466,Add,HP,24450,Add,NONE,0,Add,700006,14,30,17000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,141,74269,DEF,4507,Add,HP,24654,Add,NONE,0,Add,700006,14,30,17050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,142,74928,DEF,4548,Add,HP,24858,Add,NONE,0,Add,700006,14,30,17100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,143,75588,DEF,4589,Add,HP,25062,Add,NONE,0,Add,700006,14,30,17150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,144,76247,DEF,4630,Add,HP,25266,Add,NONE,0,Add,700006,14,30,17200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,145,76906,DEF,4671,Add,HP,25470,Add,NONE,0,Add,700006,14,30,17250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,146,77565,DEF,4712,Add,HP,25674,Add,NONE,0,Add,700006,14,30,17300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,147,78225,DEF,4753,Add,HP,25878,Add,NONE,0,Add,700006,14,30,17350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,148,78884,DEF,4794,Add,HP,26082,Add,NONE,0,Add,700006,14,30,17400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,149,79543,DEF,4835,Add,HP,26286,Add,NONE,0,Add,700006,14,30,17450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,150,80203,DEF,4876,Add,HP,26490,Add,NONE,0,Add,700006,14,30,17500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,151,81805,DEF,4936,Add,HP,27580,Add,NONE,0,Add,700006,14,30,17550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,152,83407,DEF,4996,Add,HP,28670,Add,NONE,0,Add,700006,14,30,17600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,153,85008,DEF,5056,Add,HP,29760,Add,NONE,0,Add,700006,14,30,17650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,154,86610,DEF,5116,Add,HP,30850,Add,NONE,0,Add,700006,14,30,17700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,155,88212,DEF,5176,Add,HP,31940,Add,NONE,0,Add,700006,14,30,17750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,156,89814,DEF,5236,Add,HP,33030,Add,NONE,0,Add,700006,14,30,17800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,157,91416,DEF,5296,Add,HP,34120,Add,NONE,0,Add,700006,14,30,17850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,158,93018,DEF,5356,Add,HP,35210,Add,NONE,0,Add,700006,14,30,17900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,159,94620,DEF,5416,Add,HP,36300,Add,NONE,0,Add,700006,14,30,17950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,160,96222,DEF,5476,Add,HP,37390,Add,NONE,0,Add,700006,14,30,18000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,161,97824,DEF,5536,Add,HP,38480,Add,NONE,0,Add,700006,14,30,18050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,162,99426,DEF,5596,Add,HP,39570,Add,NONE,0,Add,700006,14,30,18100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,163,101028,DEF,5656,Add,HP,40660,Add,NONE,0,Add,700006,14,30,18150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,164,102630,DEF,5716,Add,HP,41750,Add,NONE,0,Add,700006,14,30,18200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,165,104232,DEF,5776,Add,HP,42840,Add,NONE,0,Add,700006,14,30,18250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,166,105834,DEF,5836,Add,HP,43930,Add,NONE,0,Add,700006,14,30,18300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,167,107436,DEF,5896,Add,HP,45020,Add,NONE,0,Add,700006,14,30,18350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,168,109038,DEF,5956,Add,HP,46110,Add,NONE,0,Add,700006,14,30,18400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,169,110640,DEF,6016,Add,HP,47200,Add,NONE,0,Add,700006,14,30,18450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,170,112242,DEF,6076,Add,HP,48290,Add,NONE,0,Add,700006,14,30,18500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,171,113844,DEF,6136,Add,HP,49380,Add,NONE,0,Add,700006,14,30,18550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,172,115446,DEF,6196,Add,HP,50470,Add,NONE,0,Add,700006,14,30,18600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,173,117047,DEF,6256,Add,HP,51560,Add,NONE,0,Add,700006,14,30,18650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,174,118649,DEF,6316,Add,HP,52650,Add,NONE,0,Add,700006,14,30,18700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,175,120251,DEF,6376,Add,HP,53740,Add,NONE,0,Add,700006,14,30,18750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,176,121853,DEF,6436,Add,HP,54830,Add,NONE,0,Add,700006,14,30,18800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,177,123455,DEF,6496,Add,HP,55920,Add,NONE,0,Add,700006,14,30,18850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,178,125057,DEF,6556,Add,HP,57010,Add,NONE,0,Add,700006,14,30,18900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,179,126659,DEF,6616,Add,HP,58100,Add,NONE,0,Add,700006,14,30,18950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,180,128261,DEF,6676,Add,HP,59190,Add,NONE,0,Add,700006,14,30,19000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,181,129863,DEF,6736,Add,HP,60280,Add,NONE,0,Add,700006,14,30,19050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,182,131465,DEF,6796,Add,HP,61370,Add,NONE,0,Add,700006,14,30,19100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,183,133067,DEF,6856,Add,HP,62460,Add,NONE,0,Add,700006,14,30,19150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,184,134669,DEF,6916,Add,HP,63550,Add,NONE,0,Add,700006,14,30,19200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,185,136271,DEF,6976,Add,HP,64640,Add,NONE,0,Add,700006,14,30,19250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,186,137873,DEF,7036,Add,HP,65730,Add,NONE,0,Add,700006,14,30,19300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,187,139475,DEF,7096,Add,HP,66820,Add,NONE,0,Add,700006,14,30,19350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,188,141077,DEF,7156,Add,HP,67910,Add,NONE,0,Add,700006,14,30,19400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,189,142679,DEF,7216,Add,HP,69000,Add,NONE,0,Add,700006,14,30,19450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,190,144281,DEF,7276,Add,HP,70090,Add,NONE,0,Add,700006,14,30,19500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,191,145883,DEF,7336,Add,HP,71180,Add,NONE,0,Add,700006,14,30,19550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,192,147485,DEF,7396,Add,HP,72270,Add,NONE,0,Add,700006,14,30,19600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,193,149086,DEF,7456,Add,HP,73360,Add,NONE,0,Add,700006,14,30,19650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,194,150688,DEF,7516,Add,HP,74450,Add,NONE,0,Add,700006,14,30,19700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,195,152290,DEF,7576,Add,HP,75540,Add,NONE,0,Add,700006,14,30,19750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,196,153892,DEF,7636,Add,HP,76630,Add,NONE,0,Add,700006,14,30,19800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,197,155494,DEF,7696,Add,HP,77720,Add,NONE,0,Add,700006,14,30,19850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,198,157096,DEF,7756,Add,HP,78810,Add,NONE,0,Add,700006,14,30,19900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,199,158698,DEF,7816,Add,HP,79900,Add,NONE,0,Add,700006,14,30,19950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,200,160300,DEF,7876,Add,HP,80990,Add,NONE,0,Add,700006,14,30,20000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,201,162389,DEF,7940,Add,HP,82625,Add,NONE,0,Add,700006,14,30,20050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,202,164478,DEF,8004,Add,HP,84260,Add,NONE,0,Add,700006,14,30,20100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,203,166567,DEF,8068,Add,HP,85895,Add,NONE,0,Add,700006,14,30,20150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,204,168656,DEF,8132,Add,HP,87530,Add,NONE,0,Add,700006,14,30,20200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,205,170745,DEF,8196,Add,HP,89165,Add,NONE,0,Add,700006,14,30,20250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,206,172834,DEF,8260,Add,HP,90800,Add,NONE,0,Add,700006,14,30,20300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,207,174923,DEF,8324,Add,HP,92435,Add,NONE,0,Add,700006,14,30,20350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,208,177012,DEF,8388,Add,HP,94070,Add,NONE,0,Add,700006,14,30,20400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,209,179101,DEF,8452,Add,HP,95705,Add,NONE,0,Add,700006,14,30,20450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,210,181190,DEF,8516,Add,HP,97340,Add,NONE,0,Add,700006,14,30,20500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,211,183279,DEF,8580,Add,HP,98975,Add,NONE,0,Add,700006,14,30,20550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,212,185368,DEF,8644,Add,HP,100610,Add,NONE,0,Add,700006,14,30,20600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,213,187457,DEF,8708,Add,HP,102245,Add,NONE,0,Add,700006,14,30,20650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,214,189546,DEF,8772,Add,HP,103880,Add,NONE,0,Add,700006,14,30,20700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,215,191635,DEF,8836,Add,HP,105515,Add,NONE,0,Add,700006,14,30,20750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,216,193724,DEF,8900,Add,HP,107150,Add,NONE,0,Add,700006,14,30,20800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,217,195813,DEF,8964,Add,HP,108785,Add,NONE,0,Add,700006,14,30,20850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,218,197902,DEF,9028,Add,HP,110420,Add,NONE,0,Add,700006,14,30,20900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,219,199991,DEF,9092,Add,HP,112055,Add,NONE,0,Add,700006,14,30,20950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,220,202080,DEF,9156,Add,HP,113690,Add,NONE,0,Add,700006,14,30,21000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,221,204169,DEF,9220,Add,HP,115325,Add,NONE,0,Add,700006,14,30,21050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,222,206258,DEF,9284,Add,HP,116960,Add,NONE,0,Add,700006,14,30,21100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,223,208347,DEF,9348,Add,HP,118595,Add,NONE,0,Add,700006,14,30,21150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,224,210436,DEF,9412,Add,HP,120230,Add,NONE,0,Add,700006,14,30,21200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,225,212525,DEF,9476,Add,HP,121865,Add,NONE,0,Add,700006,14,30,21250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,226,214613,DEF,9540,Add,HP,123500,Add,NONE,0,Add,700006,14,30,21300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,227,216702,DEF,9604,Add,HP,125135,Add,NONE,0,Add,700006,14,30,21350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,228,218791,DEF,9668,Add,HP,126770,Add,NONE,0,Add,700006,14,30,21400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,229,220880,DEF,9732,Add,HP,128405,Add,NONE,0,Add,700006,14,30,21450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,230,222969,DEF,9796,Add,HP,130040,Add,NONE,0,Add,700006,14,30,21500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,231,225058,DEF,9860,Add,HP,131675,Add,NONE,0,Add,700006,14,30,21550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,232,227147,DEF,9924,Add,HP,133310,Add,NONE,0,Add,700006,14,30,21600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,233,229236,DEF,9988,Add,HP,134945,Add,NONE,0,Add,700006,14,30,21650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,234,231325,DEF,10052,Add,HP,136580,Add,NONE,0,Add,700006,14,30,21700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,235,233414,DEF,10116,Add,HP,138215,Add,NONE,0,Add,700006,14,30,21750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,236,235503,DEF,10180,Add,HP,139850,Add,NONE,0,Add,700006,14,30,21800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,237,237592,DEF,10244,Add,HP,141485,Add,NONE,0,Add,700006,14,30,21850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,238,239681,DEF,10308,Add,HP,143120,Add,NONE,0,Add,700006,14,30,21900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,239,241770,DEF,10372,Add,HP,144755,Add,NONE,0,Add,700006,14,30,21950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,240,243859,DEF,10436,Add,HP,146390,Add,NONE,0,Add,700006,14,30,22000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,241,245948,DEF,10500,Add,HP,148025,Add,NONE,0,Add,700006,14,30,22050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,242,248037,DEF,10564,Add,HP,149660,Add,NONE,0,Add,700006,14,30,22100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,243,250126,DEF,10628,Add,HP,151295,Add,NONE,0,Add,700006,14,30,22150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,244,252215,DEF,10692,Add,HP,152930,Add,NONE,0,Add,700006,14,30,22200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,245,254304,DEF,10756,Add,HP,154565,Add,NONE,0,Add,700006,14,30,22250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,246,256393,DEF,10820,Add,HP,156200,Add,NONE,0,Add,700006,14,30,22300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,247,258482,DEF,10884,Add,HP,157835,Add,NONE,0,Add,700006,14,30,22350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,248,260571,DEF,10948,Add,HP,159470,Add,NONE,0,Add,700006,14,30,22400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,249,262660,DEF,11012,Add,HP,161105,Add,NONE,0,Add,700006,14,30,22450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,250,264749,DEF,11076,Add,HP,162740,Add,NONE,0,Add,700006,14,30,22500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,251,267124,DEF,11155,Add,HP,164506,Add,NONE,0,Add,700006,14,30,22550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,252,269500,DEF,11234,Add,HP,166272,Add,NONE,0,Add,700006,14,30,22600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,253,271876,DEF,11313,Add,HP,168038,Add,NONE,0,Add,700006,14,30,22650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,254,274251,DEF,11392,Add,HP,169804,Add,NONE,0,Add,700006,14,30,22700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,255,276627,DEF,11471,Add,HP,171570,Add,NONE,0,Add,700006,14,30,22750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,256,279002,DEF,11550,Add,HP,173336,Add,NONE,0,Add,700006,14,30,22800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,257,281378,DEF,11629,Add,HP,175102,Add,NONE,0,Add,700006,14,30,22850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,258,283753,DEF,11708,Add,HP,176868,Add,NONE,0,Add,700006,14,30,22900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,259,286129,DEF,11787,Add,HP,178634,Add,NONE,0,Add,700006,14,30,22950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,260,288504,DEF,11866,Add,HP,180400,Add,NONE,0,Add,700006,14,30,23000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,261,290880,DEF,11945,Add,HP,182166,Add,NONE,0,Add,700006,14,30,23050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,262,293256,DEF,12024,Add,HP,183932,Add,NONE,0,Add,700006,14,30,23100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,263,295631,DEF,12103,Add,HP,185698,Add,NONE,0,Add,700006,14,30,23150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,264,298007,DEF,12182,Add,HP,187464,Add,NONE,0,Add,700006,14,30,23200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,265,300382,DEF,12261,Add,HP,189230,Add,NONE,0,Add,700006,14,30,23250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,266,302758,DEF,12340,Add,HP,190996,Add,NONE,0,Add,700006,14,30,23300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,267,305133,DEF,12419,Add,HP,192762,Add,NONE,0,Add,700006,14,30,23350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,268,307509,DEF,12498,Add,HP,194528,Add,NONE,0,Add,700006,14,30,23400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,269,309884,DEF,12577,Add,HP,196294,Add,NONE,0,Add,700006,14,30,23450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,270,312260,DEF,12656,Add,HP,198060,Add,NONE,0,Add,700006,14,30,23500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,271,314636,DEF,12735,Add,HP,199826,Add,NONE,0,Add,700006,14,30,23550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,272,317011,DEF,12814,Add,HP,201592,Add,NONE,0,Add,700006,14,30,23600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,273,319387,DEF,12893,Add,HP,203358,Add,NONE,0,Add,700006,14,30,23650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,274,321762,DEF,12972,Add,HP,205124,Add,NONE,0,Add,700006,14,30,23700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,275,324138,DEF,13051,Add,HP,206890,Add,NONE,0,Add,700006,14,30,23750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,276,326513,DEF,13130,Add,HP,208656,Add,NONE,0,Add,700006,14,30,23800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,277,328889,DEF,13209,Add,HP,210422,Add,NONE,0,Add,700006,14,30,23850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,278,331264,DEF,13288,Add,HP,212188,Add,NONE,0,Add,700006,14,30,23900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,279,333640,DEF,13367,Add,HP,213954,Add,NONE,0,Add,700006,14,30,23950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,280,336016,DEF,13446,Add,HP,215720,Add,NONE,0,Add,700006,14,30,24000,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,281,338391,DEF,13525,Add,HP,217486,Add,NONE,0,Add,700006,14,30,24050,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,282,340767,DEF,13604,Add,HP,219252,Add,NONE,0,Add,700006,14,30,24100,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,283,343142,DEF,13683,Add,HP,221018,Add,NONE,0,Add,700006,14,30,24150,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,284,345518,DEF,13762,Add,HP,222784,Add,NONE,0,Add,700006,14,30,24200,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,285,347893,DEF,13841,Add,HP,224550,Add,NONE,0,Add,700006,14,30,24250,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,286,350269,DEF,13920,Add,HP,226316,Add,NONE,0,Add,700006,14,30,24300,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,287,352644,DEF,13999,Add,HP,228082,Add,NONE,0,Add,700006,14,30,24350,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,288,355020,DEF,14078,Add,HP,229848,Add,NONE,0,Add,700006,14,30,24400,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,289,357396,DEF,14157,Add,HP,231614,Add,NONE,0,Add,700006,14,30,24450,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,290,359771,DEF,14236,Add,HP,233380,Add,NONE,0,Add,700006,14,30,24500,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,291,362147,DEF,14315,Add,HP,235146,Add,NONE,0,Add,700006,14,30,24550,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,292,364522,DEF,14394,Add,HP,236912,Add,NONE,0,Add,700006,14,30,24600,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,293,366898,DEF,14473,Add,HP,238678,Add,NONE,0,Add,700006,14,30,24650,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,294,369273,DEF,14552,Add,HP,240444,Add,NONE,0,Add,700006,14,30,24700,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,295,371649,DEF,14631,Add,HP,242210,Add,NONE,0,Add,700006,14,30,24750,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,296,374024,DEF,14710,Add,HP,243976,Add,NONE,0,Add,700006,14,30,24800,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,297,376400,DEF,14789,Add,HP,245742,Add,NONE,0,Add,700006,14,30,24850,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,298,378776,DEF,14868,Add,HP,247508,Add,NONE,0,Add,700006,14,30,24900,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,299,381151,DEF,14947,Add,HP,249274,Add,NONE,0,Add,700006,14,30,24950,Add,NONE,Caster,20 +10024,WorldBoss Vampiric Rune,300,383527,DEF,15026,Add,HP,251040,Add,NONE,0,Add,700006,14,30,25000,Add,NONE,Caster,20 +10025,Adventure Stamina Rune,1,1508,HP,868,Add,HIT,300,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,2,1875,HP,1096,Add,HIT,369,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,3,2241,HP,1324,Add,HIT,438,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,4,2608,HP,1552,Add,HIT,507,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,5,2974,HP,1780,Add,HIT,576,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,6,3341,HP,2008,Add,HIT,645,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,7,3708,HP,2236,Add,HIT,714,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,8,4074,HP,2464,Add,HIT,783,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,9,4441,HP,2692,Add,HIT,852,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,10,4807,HP,2920,Add,HIT,921,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,11,5174,HP,3148,Add,HIT,990,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,12,5541,HP,3376,Add,HIT,1059,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,13,5907,HP,3604,Add,HIT,1128,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,14,6274,HP,3832,Add,HIT,1197,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,15,6640,HP,4060,Add,HIT,1266,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,16,7007,HP,4288,Add,HIT,1335,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,17,7374,HP,4516,Add,HIT,1404,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,18,7740,HP,4744,Add,HIT,1473,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,19,8107,HP,4972,Add,HIT,1542,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,20,8473,HP,5200,Add,HIT,1611,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,21,8840,HP,5428,Add,HIT,1680,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,22,9207,HP,5656,Add,HIT,1749,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,23,9573,HP,5884,Add,HIT,1818,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,24,9940,HP,6112,Add,HIT,1887,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,25,10306,HP,6340,Add,HIT,1956,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,26,10673,HP,6568,Add,HIT,2025,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,27,11040,HP,6796,Add,HIT,2094,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,28,11406,HP,7024,Add,HIT,2163,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,29,11773,HP,7252,Add,HIT,2232,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,30,12139,HP,7480,Add,HIT,2301,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,31,12506,HP,7708,Add,HIT,2370,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,32,12873,HP,7936,Add,HIT,2439,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,33,13239,HP,8164,Add,HIT,2508,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,34,13606,HP,8392,Add,HIT,2577,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,35,13972,HP,8620,Add,HIT,2646,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,36,14339,HP,8848,Add,HIT,2715,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,37,14706,HP,9076,Add,HIT,2784,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,38,15072,HP,9304,Add,HIT,2853,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,39,15439,HP,9532,Add,HIT,2922,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,40,15805,HP,9760,Add,HIT,2991,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,41,16172,HP,9988,Add,HIT,3060,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,42,16539,HP,10216,Add,HIT,3129,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,43,16905,HP,10444,Add,HIT,3198,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,44,17272,HP,10672,Add,HIT,3267,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,45,17638,HP,10900,Add,HIT,3336,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,46,18005,HP,11128,Add,HIT,3405,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,47,18372,HP,11356,Add,HIT,3474,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,48,18738,HP,11584,Add,HIT,3543,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,49,19105,HP,11812,Add,HIT,3612,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,50,19471,HP,12040,Add,HIT,3681,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,51,19964,HP,12281,Add,HIT,3789,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,52,20457,HP,12522,Add,HIT,3897,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,53,20950,HP,12763,Add,HIT,4005,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,54,21442,HP,13004,Add,HIT,4113,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,55,21935,HP,13245,Add,HIT,4221,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,56,22428,HP,13486,Add,HIT,4329,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,57,22920,HP,13727,Add,HIT,4437,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,58,23413,HP,13968,Add,HIT,4545,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,59,23906,HP,14209,Add,HIT,4653,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,60,24398,HP,14450,Add,HIT,4761,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,61,24891,HP,14691,Add,HIT,4869,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,62,25384,HP,14932,Add,HIT,4977,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,63,25877,HP,15173,Add,HIT,5085,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,64,26369,HP,15414,Add,HIT,5193,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,65,26862,HP,15655,Add,HIT,5301,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,66,27355,HP,15896,Add,HIT,5409,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,67,27847,HP,16137,Add,HIT,5517,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,68,28340,HP,16378,Add,HIT,5625,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,69,28833,HP,16619,Add,HIT,5733,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,70,29325,HP,16860,Add,HIT,5841,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,71,29818,HP,17101,Add,HIT,5949,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,72,30311,HP,17342,Add,HIT,6057,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,73,30804,HP,17583,Add,HIT,6165,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,74,31296,HP,17824,Add,HIT,6273,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,75,31789,HP,18065,Add,HIT,6381,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,76,32282,HP,18306,Add,HIT,6489,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,77,32774,HP,18547,Add,HIT,6597,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,78,33267,HP,18788,Add,HIT,6705,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,79,33760,HP,19029,Add,HIT,6813,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,80,34252,HP,19270,Add,HIT,6921,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,81,34745,HP,19511,Add,HIT,7029,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,82,35238,HP,19752,Add,HIT,7137,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,83,35731,HP,19993,Add,HIT,7245,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,84,36223,HP,20234,Add,HIT,7353,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,85,36716,HP,20475,Add,HIT,7461,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,86,37209,HP,20716,Add,HIT,7569,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,87,37701,HP,20957,Add,HIT,7677,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,88,38194,HP,21198,Add,HIT,7785,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,89,38687,HP,21439,Add,HIT,7893,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,90,39179,HP,21680,Add,HIT,8001,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,91,39672,HP,21921,Add,HIT,8109,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,92,40165,HP,22162,Add,HIT,8217,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,93,40658,HP,22403,Add,HIT,8325,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,94,41150,HP,22644,Add,HIT,8433,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,95,41643,HP,22885,Add,HIT,8541,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,96,42136,HP,23126,Add,HIT,8649,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,97,42628,HP,23367,Add,HIT,8757,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,98,43121,HP,23608,Add,HIT,8865,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,99,43614,HP,23849,Add,HIT,8973,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,100,44106,HP,24090,Add,HIT,9081,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,101,44720,HP,24396,Add,HIT,9214,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,102,45333,HP,24702,Add,HIT,9347,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,103,45946,HP,25008,Add,HIT,9480,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,104,46559,HP,25314,Add,HIT,9613,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,105,47172,HP,25620,Add,HIT,9746,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,106,47786,HP,25926,Add,HIT,9879,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,107,48399,HP,26232,Add,HIT,10012,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,108,49012,HP,26538,Add,HIT,10145,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,109,49625,HP,26844,Add,HIT,10278,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,110,50238,HP,27150,Add,HIT,10411,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,111,50852,HP,27456,Add,HIT,10544,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,112,51465,HP,27762,Add,HIT,10677,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,113,52078,HP,28068,Add,HIT,10810,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,114,52691,HP,28374,Add,HIT,10943,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,115,53304,HP,28680,Add,HIT,11076,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,116,53918,HP,28986,Add,HIT,11209,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,117,54531,HP,29292,Add,HIT,11342,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,118,55144,HP,29598,Add,HIT,11475,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,119,55757,HP,29904,Add,HIT,11608,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,120,56370,HP,30210,Add,HIT,11741,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,121,56984,HP,30516,Add,HIT,11874,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,122,57597,HP,30822,Add,HIT,12007,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,123,58210,HP,31128,Add,HIT,12140,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,124,58823,HP,31434,Add,HIT,12273,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,125,59436,HP,31740,Add,HIT,12406,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,126,60050,HP,32046,Add,HIT,12539,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,127,60663,HP,32352,Add,HIT,12672,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,128,61276,HP,32658,Add,HIT,12805,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,129,61889,HP,32964,Add,HIT,12938,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,130,62502,HP,33270,Add,HIT,13071,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,131,63116,HP,33576,Add,HIT,13204,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,132,63729,HP,33882,Add,HIT,13337,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,133,64342,HP,34188,Add,HIT,13470,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,134,64955,HP,34494,Add,HIT,13603,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,135,65568,HP,34800,Add,HIT,13736,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,136,66182,HP,35106,Add,HIT,13869,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,137,66795,HP,35412,Add,HIT,14002,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,138,67408,HP,35718,Add,HIT,14135,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,139,68021,HP,36024,Add,HIT,14268,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,140,68634,HP,36330,Add,HIT,14401,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,141,69248,HP,36636,Add,HIT,14534,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,142,69861,HP,36942,Add,HIT,14667,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,143,70474,HP,37248,Add,HIT,14800,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,144,71087,HP,37554,Add,HIT,14933,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,145,71700,HP,37860,Add,HIT,15066,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,146,72314,HP,38166,Add,HIT,15199,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,147,72927,HP,38472,Add,HIT,15332,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,148,73540,HP,38778,Add,HIT,15465,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,149,74153,HP,39084,Add,HIT,15598,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,150,74766,HP,39390,Add,HIT,15731,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,151,76397,HP,41025,Add,HIT,15893,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,152,78027,HP,42660,Add,HIT,16055,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,153,79658,HP,44295,Add,HIT,16217,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,154,81288,HP,45930,Add,HIT,16379,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,155,82919,HP,47565,Add,HIT,16541,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,156,84549,HP,49200,Add,HIT,16703,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,157,86180,HP,50835,Add,HIT,16865,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,158,87810,HP,52470,Add,HIT,17027,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,159,89441,HP,54105,Add,HIT,17189,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,160,91071,HP,55740,Add,HIT,17351,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,161,92702,HP,57375,Add,HIT,17513,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,162,94332,HP,59010,Add,HIT,17675,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,163,95963,HP,60645,Add,HIT,17837,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,164,97593,HP,62280,Add,HIT,17999,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,165,99224,HP,63915,Add,HIT,18161,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,166,100854,HP,65550,Add,HIT,18323,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,167,102485,HP,67185,Add,HIT,18485,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,168,104115,HP,68820,Add,HIT,18647,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,169,105746,HP,70455,Add,HIT,18809,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,170,107376,HP,72090,Add,HIT,18971,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,171,109007,HP,73725,Add,HIT,19133,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,172,110637,HP,75360,Add,HIT,19295,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,173,112268,HP,76995,Add,HIT,19457,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,174,113898,HP,78630,Add,HIT,19619,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,175,115529,HP,80265,Add,HIT,19781,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,176,117159,HP,81900,Add,HIT,19943,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,177,118790,HP,83535,Add,HIT,20105,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,178,120420,HP,85170,Add,HIT,20267,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,179,122051,HP,86805,Add,HIT,20429,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,180,123681,HP,88440,Add,HIT,20591,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,181,125312,HP,90075,Add,HIT,20753,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,182,126942,HP,91710,Add,HIT,20915,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,183,128573,HP,93345,Add,HIT,21077,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,184,130203,HP,94980,Add,HIT,21239,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,185,131834,HP,96615,Add,HIT,21401,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,186,133464,HP,98250,Add,HIT,21563,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,187,135095,HP,99885,Add,HIT,21725,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,188,136725,HP,101520,Add,HIT,21887,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,189,138356,HP,103155,Add,HIT,22049,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,190,139986,HP,104790,Add,HIT,22211,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,191,141617,HP,106425,Add,HIT,22373,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,192,143247,HP,108060,Add,HIT,22535,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,193,144878,HP,109695,Add,HIT,22697,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,194,146508,HP,111330,Add,HIT,22859,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,195,148139,HP,112965,Add,HIT,23021,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,196,149769,HP,114600,Add,HIT,23183,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,197,151400,HP,116235,Add,HIT,23345,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,198,153030,HP,117870,Add,HIT,23507,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,199,154661,HP,119505,Add,HIT,23669,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,200,156291,HP,121140,Add,HIT,23831,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,201,158519,HP,123593,Add,HIT,24001,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,202,160746,HP,126046,Add,HIT,24171,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,203,162973,HP,128499,Add,HIT,24341,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,204,165200,HP,130952,Add,HIT,24511,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,205,167427,HP,133405,Add,HIT,24681,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,206,169654,HP,135858,Add,HIT,24851,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,207,171881,HP,138311,Add,HIT,25021,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,208,174108,HP,140764,Add,HIT,25191,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,209,176335,HP,143217,Add,HIT,25361,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,210,178562,HP,145670,Add,HIT,25531,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,211,180790,HP,148123,Add,HIT,25701,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,212,183017,HP,150576,Add,HIT,25871,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,213,185244,HP,153029,Add,HIT,26041,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,214,187471,HP,155482,Add,HIT,26211,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,215,189698,HP,157935,Add,HIT,26381,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,216,191925,HP,160388,Add,HIT,26551,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,217,194152,HP,162841,Add,HIT,26721,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,218,196379,HP,165294,Add,HIT,26891,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,219,198606,HP,167747,Add,HIT,27061,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,220,200833,HP,170200,Add,HIT,27231,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,221,203061,HP,172653,Add,HIT,27401,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,222,205288,HP,175106,Add,HIT,27571,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,223,207515,HP,177559,Add,HIT,27741,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,224,209742,HP,180012,Add,HIT,27911,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,225,211969,HP,182465,Add,HIT,28081,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,226,214196,HP,184918,Add,HIT,28251,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,227,216423,HP,187371,Add,HIT,28421,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,228,218650,HP,189824,Add,HIT,28591,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,229,220877,HP,192277,Add,HIT,28761,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,230,223104,HP,194730,Add,HIT,28931,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,231,225332,HP,197183,Add,HIT,29101,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,232,227559,HP,199636,Add,HIT,29271,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,233,229786,HP,202089,Add,HIT,29441,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,234,232013,HP,204542,Add,HIT,29611,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,235,234240,HP,206995,Add,HIT,29781,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,236,236467,HP,209448,Add,HIT,29951,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,237,238694,HP,211901,Add,HIT,30121,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,238,240921,HP,214354,Add,HIT,30291,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,239,243148,HP,216807,Add,HIT,30461,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,240,245375,HP,219260,Add,HIT,30631,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,241,247603,HP,221713,Add,HIT,30801,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,242,249830,HP,224166,Add,HIT,30971,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,243,252057,HP,226619,Add,HIT,31141,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,244,254284,HP,229072,Add,HIT,31311,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,245,256511,HP,231525,Add,HIT,31481,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,246,258738,HP,233978,Add,HIT,31651,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,247,260965,HP,236431,Add,HIT,31821,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,248,263192,HP,238884,Add,HIT,31991,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,249,265419,HP,241337,Add,HIT,32161,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,250,267646,HP,243790,Add,HIT,32331,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,251,270050,HP,246440,Add,HIT,32514,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,252,272454,HP,249090,Add,HIT,32697,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,253,274858,HP,251740,Add,HIT,32880,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,254,277262,HP,254390,Add,HIT,33063,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,255,279666,HP,257040,Add,HIT,33246,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,256,282070,HP,259690,Add,HIT,33429,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,257,284474,HP,262340,Add,HIT,33612,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,258,286878,HP,264990,Add,HIT,33795,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,259,289282,HP,267640,Add,HIT,33978,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,260,291686,HP,270290,Add,HIT,34161,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,261,294090,HP,272940,Add,HIT,34344,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,262,296494,HP,275590,Add,HIT,34527,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,263,298898,HP,278240,Add,HIT,34710,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,264,301302,HP,280890,Add,HIT,34893,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,265,303706,HP,283540,Add,HIT,35076,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,266,306110,HP,286190,Add,HIT,35259,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,267,308514,HP,288840,Add,HIT,35442,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,268,310918,HP,291490,Add,HIT,35625,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,269,313322,HP,294140,Add,HIT,35808,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,270,315726,HP,296790,Add,HIT,35991,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,271,318130,HP,299440,Add,HIT,36174,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,272,320534,HP,302090,Add,HIT,36357,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,273,322938,HP,304740,Add,HIT,36540,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,274,325342,HP,307390,Add,HIT,36723,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,275,327746,HP,310040,Add,HIT,36906,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,276,330150,HP,312690,Add,HIT,37089,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,277,332554,HP,315340,Add,HIT,37272,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,278,334958,HP,317990,Add,HIT,37455,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,279,337362,HP,320640,Add,HIT,37638,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,280,339766,HP,323290,Add,HIT,37821,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,281,342170,HP,325940,Add,HIT,38004,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,282,344574,HP,328590,Add,HIT,38187,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,283,346978,HP,331240,Add,HIT,38370,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,284,349382,HP,333890,Add,HIT,38553,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,285,351786,HP,336540,Add,HIT,38736,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,286,354190,HP,339190,Add,HIT,38919,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,287,356594,HP,341840,Add,HIT,39102,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,288,358998,HP,344490,Add,HIT,39285,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,289,361402,HP,347140,Add,HIT,39468,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,290,363806,HP,349790,Add,HIT,39651,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,291,366210,HP,352440,Add,HIT,39834,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,292,368614,HP,355090,Add,HIT,40017,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,293,371018,HP,357740,Add,HIT,40200,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,294,373422,HP,360390,Add,HIT,40383,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,295,375826,HP,363040,Add,HIT,40566,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,296,378230,HP,365690,Add,HIT,40749,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,297,380634,HP,368340,Add,HIT,40932,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,298,383038,HP,370990,Add,HIT,41115,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,299,385442,HP,373640,Add,HIT,41298,Add,NONE,0,Add,,,,,,,, +10025,Adventure Stamina Rune,300,387846,HP,376290,Add,HIT,41481,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,1,1508,HP,868,Add,HIT,300,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,2,1875,HP,1096,Add,HIT,369,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,3,2241,HP,1324,Add,HIT,438,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,4,2608,HP,1552,Add,HIT,507,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,5,2974,HP,1780,Add,HIT,576,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,6,3341,HP,2008,Add,HIT,645,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,7,3708,HP,2236,Add,HIT,714,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,8,4074,HP,2464,Add,HIT,783,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,9,4441,HP,2692,Add,HIT,852,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,10,4807,HP,2920,Add,HIT,921,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,11,5174,HP,3148,Add,HIT,990,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,12,5541,HP,3376,Add,HIT,1059,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,13,5907,HP,3604,Add,HIT,1128,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,14,6274,HP,3832,Add,HIT,1197,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,15,6640,HP,4060,Add,HIT,1266,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,16,7007,HP,4288,Add,HIT,1335,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,17,7374,HP,4516,Add,HIT,1404,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,18,7740,HP,4744,Add,HIT,1473,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,19,8107,HP,4972,Add,HIT,1542,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,20,8473,HP,5200,Add,HIT,1611,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,21,8840,HP,5428,Add,HIT,1680,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,22,9207,HP,5656,Add,HIT,1749,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,23,9573,HP,5884,Add,HIT,1818,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,24,9940,HP,6112,Add,HIT,1887,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,25,10306,HP,6340,Add,HIT,1956,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,26,10673,HP,6568,Add,HIT,2025,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,27,11040,HP,6796,Add,HIT,2094,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,28,11406,HP,7024,Add,HIT,2163,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,29,11773,HP,7252,Add,HIT,2232,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,30,12139,HP,7480,Add,HIT,2301,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,31,12506,HP,7708,Add,HIT,2370,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,32,12873,HP,7936,Add,HIT,2439,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,33,13239,HP,8164,Add,HIT,2508,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,34,13606,HP,8392,Add,HIT,2577,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,35,13972,HP,8620,Add,HIT,2646,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,36,14339,HP,8848,Add,HIT,2715,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,37,14706,HP,9076,Add,HIT,2784,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,38,15072,HP,9304,Add,HIT,2853,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,39,15439,HP,9532,Add,HIT,2922,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,40,15805,HP,9760,Add,HIT,2991,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,41,16172,HP,9988,Add,HIT,3060,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,42,16539,HP,10216,Add,HIT,3129,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,43,16905,HP,10444,Add,HIT,3198,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,44,17272,HP,10672,Add,HIT,3267,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,45,17638,HP,10900,Add,HIT,3336,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,46,18005,HP,11128,Add,HIT,3405,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,47,18372,HP,11356,Add,HIT,3474,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,48,18738,HP,11584,Add,HIT,3543,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,49,19105,HP,11812,Add,HIT,3612,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,50,19471,HP,12040,Add,HIT,3681,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,51,19964,HP,12281,Add,HIT,3789,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,52,20457,HP,12522,Add,HIT,3897,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,53,20950,HP,12763,Add,HIT,4005,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,54,21442,HP,13004,Add,HIT,4113,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,55,21935,HP,13245,Add,HIT,4221,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,56,22428,HP,13486,Add,HIT,4329,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,57,22920,HP,13727,Add,HIT,4437,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,58,23413,HP,13968,Add,HIT,4545,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,59,23906,HP,14209,Add,HIT,4653,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,60,24398,HP,14450,Add,HIT,4761,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,61,24891,HP,14691,Add,HIT,4869,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,62,25384,HP,14932,Add,HIT,4977,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,63,25877,HP,15173,Add,HIT,5085,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,64,26369,HP,15414,Add,HIT,5193,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,65,26862,HP,15655,Add,HIT,5301,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,66,27355,HP,15896,Add,HIT,5409,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,67,27847,HP,16137,Add,HIT,5517,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,68,28340,HP,16378,Add,HIT,5625,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,69,28833,HP,16619,Add,HIT,5733,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,70,29325,HP,16860,Add,HIT,5841,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,71,29818,HP,17101,Add,HIT,5949,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,72,30311,HP,17342,Add,HIT,6057,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,73,30804,HP,17583,Add,HIT,6165,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,74,31296,HP,17824,Add,HIT,6273,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,75,31789,HP,18065,Add,HIT,6381,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,76,32282,HP,18306,Add,HIT,6489,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,77,32774,HP,18547,Add,HIT,6597,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,78,33267,HP,18788,Add,HIT,6705,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,79,33760,HP,19029,Add,HIT,6813,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,80,34252,HP,19270,Add,HIT,6921,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,81,34745,HP,19511,Add,HIT,7029,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,82,35238,HP,19752,Add,HIT,7137,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,83,35731,HP,19993,Add,HIT,7245,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,84,36223,HP,20234,Add,HIT,7353,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,85,36716,HP,20475,Add,HIT,7461,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,86,37209,HP,20716,Add,HIT,7569,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,87,37701,HP,20957,Add,HIT,7677,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,88,38194,HP,21198,Add,HIT,7785,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,89,38687,HP,21439,Add,HIT,7893,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,90,39179,HP,21680,Add,HIT,8001,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,91,39672,HP,21921,Add,HIT,8109,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,92,40165,HP,22162,Add,HIT,8217,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,93,40658,HP,22403,Add,HIT,8325,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,94,41150,HP,22644,Add,HIT,8433,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,95,41643,HP,22885,Add,HIT,8541,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,96,42136,HP,23126,Add,HIT,8649,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,97,42628,HP,23367,Add,HIT,8757,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,98,43121,HP,23608,Add,HIT,8865,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,99,43614,HP,23849,Add,HIT,8973,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,100,44106,HP,24090,Add,HIT,9081,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,101,44720,HP,24396,Add,HIT,9214,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,102,45333,HP,24702,Add,HIT,9347,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,103,45946,HP,25008,Add,HIT,9480,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,104,46559,HP,25314,Add,HIT,9613,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,105,47172,HP,25620,Add,HIT,9746,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,106,47786,HP,25926,Add,HIT,9879,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,107,48399,HP,26232,Add,HIT,10012,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,108,49012,HP,26538,Add,HIT,10145,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,109,49625,HP,26844,Add,HIT,10278,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,110,50238,HP,27150,Add,HIT,10411,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,111,50852,HP,27456,Add,HIT,10544,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,112,51465,HP,27762,Add,HIT,10677,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,113,52078,HP,28068,Add,HIT,10810,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,114,52691,HP,28374,Add,HIT,10943,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,115,53304,HP,28680,Add,HIT,11076,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,116,53918,HP,28986,Add,HIT,11209,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,117,54531,HP,29292,Add,HIT,11342,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,118,55144,HP,29598,Add,HIT,11475,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,119,55757,HP,29904,Add,HIT,11608,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,120,56370,HP,30210,Add,HIT,11741,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,121,56984,HP,30516,Add,HIT,11874,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,122,57597,HP,30822,Add,HIT,12007,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,123,58210,HP,31128,Add,HIT,12140,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,124,58823,HP,31434,Add,HIT,12273,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,125,59436,HP,31740,Add,HIT,12406,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,126,60050,HP,32046,Add,HIT,12539,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,127,60663,HP,32352,Add,HIT,12672,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,128,61276,HP,32658,Add,HIT,12805,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,129,61889,HP,32964,Add,HIT,12938,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,130,62502,HP,33270,Add,HIT,13071,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,131,63116,HP,33576,Add,HIT,13204,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,132,63729,HP,33882,Add,HIT,13337,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,133,64342,HP,34188,Add,HIT,13470,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,134,64955,HP,34494,Add,HIT,13603,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,135,65568,HP,34800,Add,HIT,13736,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,136,66182,HP,35106,Add,HIT,13869,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,137,66795,HP,35412,Add,HIT,14002,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,138,67408,HP,35718,Add,HIT,14135,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,139,68021,HP,36024,Add,HIT,14268,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,140,68634,HP,36330,Add,HIT,14401,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,141,69248,HP,36636,Add,HIT,14534,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,142,69861,HP,36942,Add,HIT,14667,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,143,70474,HP,37248,Add,HIT,14800,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,144,71087,HP,37554,Add,HIT,14933,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,145,71700,HP,37860,Add,HIT,15066,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,146,72314,HP,38166,Add,HIT,15199,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,147,72927,HP,38472,Add,HIT,15332,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,148,73540,HP,38778,Add,HIT,15465,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,149,74153,HP,39084,Add,HIT,15598,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,150,74766,HP,39390,Add,HIT,15731,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,151,76397,HP,41025,Add,HIT,15893,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,152,78027,HP,42660,Add,HIT,16055,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,153,79658,HP,44295,Add,HIT,16217,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,154,81288,HP,45930,Add,HIT,16379,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,155,82919,HP,47565,Add,HIT,16541,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,156,84549,HP,49200,Add,HIT,16703,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,157,86180,HP,50835,Add,HIT,16865,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,158,87810,HP,52470,Add,HIT,17027,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,159,89441,HP,54105,Add,HIT,17189,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,160,91071,HP,55740,Add,HIT,17351,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,161,92702,HP,57375,Add,HIT,17513,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,162,94332,HP,59010,Add,HIT,17675,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,163,95963,HP,60645,Add,HIT,17837,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,164,97593,HP,62280,Add,HIT,17999,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,165,99224,HP,63915,Add,HIT,18161,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,166,100854,HP,65550,Add,HIT,18323,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,167,102485,HP,67185,Add,HIT,18485,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,168,104115,HP,68820,Add,HIT,18647,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,169,105746,HP,70455,Add,HIT,18809,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,170,107376,HP,72090,Add,HIT,18971,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,171,109007,HP,73725,Add,HIT,19133,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,172,110637,HP,75360,Add,HIT,19295,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,173,112268,HP,76995,Add,HIT,19457,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,174,113898,HP,78630,Add,HIT,19619,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,175,115529,HP,80265,Add,HIT,19781,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,176,117159,HP,81900,Add,HIT,19943,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,177,118790,HP,83535,Add,HIT,20105,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,178,120420,HP,85170,Add,HIT,20267,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,179,122051,HP,86805,Add,HIT,20429,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,180,123681,HP,88440,Add,HIT,20591,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,181,125312,HP,90075,Add,HIT,20753,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,182,126942,HP,91710,Add,HIT,20915,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,183,128573,HP,93345,Add,HIT,21077,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,184,130203,HP,94980,Add,HIT,21239,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,185,131834,HP,96615,Add,HIT,21401,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,186,133464,HP,98250,Add,HIT,21563,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,187,135095,HP,99885,Add,HIT,21725,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,188,136725,HP,101520,Add,HIT,21887,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,189,138356,HP,103155,Add,HIT,22049,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,190,139986,HP,104790,Add,HIT,22211,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,191,141617,HP,106425,Add,HIT,22373,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,192,143247,HP,108060,Add,HIT,22535,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,193,144878,HP,109695,Add,HIT,22697,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,194,146508,HP,111330,Add,HIT,22859,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,195,148139,HP,112965,Add,HIT,23021,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,196,149769,HP,114600,Add,HIT,23183,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,197,151400,HP,116235,Add,HIT,23345,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,198,153030,HP,117870,Add,HIT,23507,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,199,154661,HP,119505,Add,HIT,23669,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,200,156291,HP,121140,Add,HIT,23831,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,201,158519,HP,123593,Add,HIT,24001,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,202,160746,HP,126046,Add,HIT,24171,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,203,162973,HP,128499,Add,HIT,24341,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,204,165200,HP,130952,Add,HIT,24511,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,205,167427,HP,133405,Add,HIT,24681,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,206,169654,HP,135858,Add,HIT,24851,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,207,171881,HP,138311,Add,HIT,25021,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,208,174108,HP,140764,Add,HIT,25191,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,209,176335,HP,143217,Add,HIT,25361,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,210,178562,HP,145670,Add,HIT,25531,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,211,180790,HP,148123,Add,HIT,25701,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,212,183017,HP,150576,Add,HIT,25871,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,213,185244,HP,153029,Add,HIT,26041,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,214,187471,HP,155482,Add,HIT,26211,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,215,189698,HP,157935,Add,HIT,26381,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,216,191925,HP,160388,Add,HIT,26551,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,217,194152,HP,162841,Add,HIT,26721,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,218,196379,HP,165294,Add,HIT,26891,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,219,198606,HP,167747,Add,HIT,27061,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,220,200833,HP,170200,Add,HIT,27231,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,221,203061,HP,172653,Add,HIT,27401,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,222,205288,HP,175106,Add,HIT,27571,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,223,207515,HP,177559,Add,HIT,27741,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,224,209742,HP,180012,Add,HIT,27911,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,225,211969,HP,182465,Add,HIT,28081,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,226,214196,HP,184918,Add,HIT,28251,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,227,216423,HP,187371,Add,HIT,28421,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,228,218650,HP,189824,Add,HIT,28591,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,229,220877,HP,192277,Add,HIT,28761,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,230,223104,HP,194730,Add,HIT,28931,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,231,225332,HP,197183,Add,HIT,29101,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,232,227559,HP,199636,Add,HIT,29271,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,233,229786,HP,202089,Add,HIT,29441,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,234,232013,HP,204542,Add,HIT,29611,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,235,234240,HP,206995,Add,HIT,29781,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,236,236467,HP,209448,Add,HIT,29951,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,237,238694,HP,211901,Add,HIT,30121,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,238,240921,HP,214354,Add,HIT,30291,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,239,243148,HP,216807,Add,HIT,30461,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,240,245375,HP,219260,Add,HIT,30631,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,241,247603,HP,221713,Add,HIT,30801,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,242,249830,HP,224166,Add,HIT,30971,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,243,252057,HP,226619,Add,HIT,31141,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,244,254284,HP,229072,Add,HIT,31311,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,245,256511,HP,231525,Add,HIT,31481,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,246,258738,HP,233978,Add,HIT,31651,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,247,260965,HP,236431,Add,HIT,31821,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,248,263192,HP,238884,Add,HIT,31991,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,249,265419,HP,241337,Add,HIT,32161,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,250,267646,HP,243790,Add,HIT,32331,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,251,270050,HP,246440,Add,HIT,32514,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,252,272454,HP,249090,Add,HIT,32697,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,253,274858,HP,251740,Add,HIT,32880,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,254,277262,HP,254390,Add,HIT,33063,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,255,279666,HP,257040,Add,HIT,33246,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,256,282070,HP,259690,Add,HIT,33429,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,257,284474,HP,262340,Add,HIT,33612,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,258,286878,HP,264990,Add,HIT,33795,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,259,289282,HP,267640,Add,HIT,33978,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,260,291686,HP,270290,Add,HIT,34161,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,261,294090,HP,272940,Add,HIT,34344,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,262,296494,HP,275590,Add,HIT,34527,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,263,298898,HP,278240,Add,HIT,34710,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,264,301302,HP,280890,Add,HIT,34893,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,265,303706,HP,283540,Add,HIT,35076,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,266,306110,HP,286190,Add,HIT,35259,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,267,308514,HP,288840,Add,HIT,35442,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,268,310918,HP,291490,Add,HIT,35625,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,269,313322,HP,294140,Add,HIT,35808,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,270,315726,HP,296790,Add,HIT,35991,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,271,318130,HP,299440,Add,HIT,36174,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,272,320534,HP,302090,Add,HIT,36357,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,273,322938,HP,304740,Add,HIT,36540,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,274,325342,HP,307390,Add,HIT,36723,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,275,327746,HP,310040,Add,HIT,36906,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,276,330150,HP,312690,Add,HIT,37089,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,277,332554,HP,315340,Add,HIT,37272,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,278,334958,HP,317990,Add,HIT,37455,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,279,337362,HP,320640,Add,HIT,37638,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,280,339766,HP,323290,Add,HIT,37821,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,281,342170,HP,325940,Add,HIT,38004,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,282,344574,HP,328590,Add,HIT,38187,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,283,346978,HP,331240,Add,HIT,38370,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,284,349382,HP,333890,Add,HIT,38553,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,285,351786,HP,336540,Add,HIT,38736,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,286,354190,HP,339190,Add,HIT,38919,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,287,356594,HP,341840,Add,HIT,39102,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,288,358998,HP,344490,Add,HIT,39285,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,289,361402,HP,347140,Add,HIT,39468,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,290,363806,HP,349790,Add,HIT,39651,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,291,366210,HP,352440,Add,HIT,39834,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,292,368614,HP,355090,Add,HIT,40017,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,293,371018,HP,357740,Add,HIT,40200,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,294,373422,HP,360390,Add,HIT,40383,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,295,375826,HP,363040,Add,HIT,40566,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,296,378230,HP,365690,Add,HIT,40749,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,297,380634,HP,368340,Add,HIT,40932,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,298,383038,HP,370990,Add,HIT,41115,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,299,385442,HP,373640,Add,HIT,41298,Add,NONE,0,Add,,,,,,,, +10026,Arena Stamina Rune,300,387846,HP,376290,Add,HIT,41481,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,1,2666,ATK,226,Add,SPD,127,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,2,2993,ATK,253,Add,SPD,146,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,3,3320,ATK,280,Add,SPD,165,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,4,3647,ATK,307,Add,SPD,184,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,5,3974,ATK,334,Add,SPD,203,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,6,4302,ATK,361,Add,SPD,222,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,7,4629,ATK,388,Add,SPD,241,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,8,4956,ATK,415,Add,SPD,260,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,9,5283,ATK,442,Add,SPD,279,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,10,5610,ATK,469,Add,SPD,298,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,11,5938,ATK,496,Add,SPD,317,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,12,6265,ATK,523,Add,SPD,336,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,13,6592,ATK,550,Add,SPD,355,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,14,6919,ATK,577,Add,SPD,374,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,15,7246,ATK,604,Add,SPD,393,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,16,7574,ATK,631,Add,SPD,412,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,17,7901,ATK,658,Add,SPD,431,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,18,8228,ATK,685,Add,SPD,450,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,19,8555,ATK,712,Add,SPD,469,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,20,8882,ATK,739,Add,SPD,488,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,21,9210,ATK,766,Add,SPD,507,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,22,9537,ATK,793,Add,SPD,526,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,23,9864,ATK,820,Add,SPD,545,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,24,10191,ATK,847,Add,SPD,564,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,25,10518,ATK,874,Add,SPD,583,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,26,10846,ATK,901,Add,SPD,602,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,27,11173,ATK,928,Add,SPD,621,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,28,11500,ATK,955,Add,SPD,640,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,29,11827,ATK,982,Add,SPD,659,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,30,12154,ATK,1009,Add,SPD,678,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,31,12482,ATK,1036,Add,SPD,697,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,32,12809,ATK,1063,Add,SPD,716,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,33,13136,ATK,1090,Add,SPD,735,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,34,13463,ATK,1117,Add,SPD,754,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,35,13790,ATK,1144,Add,SPD,773,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,36,14118,ATK,1171,Add,SPD,792,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,37,14445,ATK,1198,Add,SPD,811,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,38,14772,ATK,1225,Add,SPD,830,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,39,15099,ATK,1252,Add,SPD,849,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,40,15426,ATK,1279,Add,SPD,868,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,41,15754,ATK,1306,Add,SPD,887,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,42,16081,ATK,1333,Add,SPD,906,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,43,16408,ATK,1360,Add,SPD,925,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,44,16735,ATK,1387,Add,SPD,944,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,45,17062,ATK,1414,Add,SPD,963,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,46,17390,ATK,1441,Add,SPD,982,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,47,17717,ATK,1468,Add,SPD,1001,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,48,18044,ATK,1495,Add,SPD,1020,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,49,18371,ATK,1522,Add,SPD,1039,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,50,18698,ATK,1549,Add,SPD,1058,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,51,19207,ATK,1588,Add,SPD,1101,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,52,19715,ATK,1627,Add,SPD,1144,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,53,20224,ATK,1666,Add,SPD,1187,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,54,20732,ATK,1705,Add,SPD,1230,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,55,21240,ATK,1744,Add,SPD,1273,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,56,21749,ATK,1783,Add,SPD,1316,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,57,22257,ATK,1822,Add,SPD,1359,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,58,22766,ATK,1861,Add,SPD,1402,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,59,23274,ATK,1900,Add,SPD,1445,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,60,23782,ATK,1939,Add,SPD,1488,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,61,24291,ATK,1978,Add,SPD,1531,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,62,24799,ATK,2017,Add,SPD,1574,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,63,25308,ATK,2056,Add,SPD,1617,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,64,25816,ATK,2095,Add,SPD,1660,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,65,26324,ATK,2134,Add,SPD,1703,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,66,26833,ATK,2173,Add,SPD,1746,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,67,27341,ATK,2212,Add,SPD,1789,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,68,27850,ATK,2251,Add,SPD,1832,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,69,28358,ATK,2290,Add,SPD,1875,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,70,28866,ATK,2329,Add,SPD,1918,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,71,29375,ATK,2368,Add,SPD,1961,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,72,29883,ATK,2407,Add,SPD,2004,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,73,30392,ATK,2446,Add,SPD,2047,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,74,30900,ATK,2485,Add,SPD,2090,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,75,31408,ATK,2524,Add,SPD,2133,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,76,31917,ATK,2563,Add,SPD,2176,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,77,32425,ATK,2602,Add,SPD,2219,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,78,32934,ATK,2641,Add,SPD,2262,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,79,33442,ATK,2680,Add,SPD,2305,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,80,33950,ATK,2719,Add,SPD,2348,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,81,34459,ATK,2758,Add,SPD,2391,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,82,34967,ATK,2797,Add,SPD,2434,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,83,35476,ATK,2836,Add,SPD,2477,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,84,35984,ATK,2875,Add,SPD,2520,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,85,36492,ATK,2914,Add,SPD,2563,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,86,37001,ATK,2953,Add,SPD,2606,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,87,37509,ATK,2992,Add,SPD,2649,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,88,38018,ATK,3031,Add,SPD,2692,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,89,38526,ATK,3070,Add,SPD,2735,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,90,39034,ATK,3109,Add,SPD,2778,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,91,39543,ATK,3148,Add,SPD,2821,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,92,40051,ATK,3187,Add,SPD,2864,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,93,40560,ATK,3226,Add,SPD,2907,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,94,41068,ATK,3265,Add,SPD,2950,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,95,41576,ATK,3304,Add,SPD,2993,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,96,42085,ATK,3343,Add,SPD,3036,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,97,42593,ATK,3382,Add,SPD,3079,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,98,43102,ATK,3421,Add,SPD,3122,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,99,43610,ATK,3460,Add,SPD,3165,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,100,44118,ATK,3499,Add,SPD,3208,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,101,44895,ATK,3562,Add,SPD,3258,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,102,45671,ATK,3625,Add,SPD,3308,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,103,46448,ATK,3688,Add,SPD,3358,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,104,47224,ATK,3751,Add,SPD,3408,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,105,48001,ATK,3814,Add,SPD,3458,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,106,48777,ATK,3877,Add,SPD,3508,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,107,49554,ATK,3940,Add,SPD,3558,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,108,50330,ATK,4003,Add,SPD,3608,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,109,51107,ATK,4066,Add,SPD,3658,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,110,51883,ATK,4129,Add,SPD,3708,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,111,52660,ATK,4192,Add,SPD,3758,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,112,53436,ATK,4255,Add,SPD,3808,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,113,54213,ATK,4318,Add,SPD,3858,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,114,54989,ATK,4381,Add,SPD,3908,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,115,55766,ATK,4444,Add,SPD,3958,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,116,56542,ATK,4507,Add,SPD,4008,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,117,57319,ATK,4570,Add,SPD,4058,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,118,58095,ATK,4633,Add,SPD,4108,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,119,58872,ATK,4696,Add,SPD,4158,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,120,59648,ATK,4759,Add,SPD,4208,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,121,60425,ATK,4822,Add,SPD,4258,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,122,61201,ATK,4885,Add,SPD,4308,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,123,61978,ATK,4948,Add,SPD,4358,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,124,62754,ATK,5011,Add,SPD,4408,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,125,63531,ATK,5074,Add,SPD,4458,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,126,64307,ATK,5137,Add,SPD,4508,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,127,65084,ATK,5200,Add,SPD,4558,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,128,65860,ATK,5263,Add,SPD,4608,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,129,66637,ATK,5326,Add,SPD,4658,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,130,67413,ATK,5389,Add,SPD,4708,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,131,68190,ATK,5452,Add,SPD,4758,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,132,68966,ATK,5515,Add,SPD,4808,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,133,69743,ATK,5578,Add,SPD,4858,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,134,70519,ATK,5641,Add,SPD,4908,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,135,71296,ATK,5704,Add,SPD,4958,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,136,72072,ATK,5767,Add,SPD,5008,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,137,72849,ATK,5830,Add,SPD,5058,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,138,73625,ATK,5893,Add,SPD,5108,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,139,74402,ATK,5956,Add,SPD,5158,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,140,75178,ATK,6019,Add,SPD,5208,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,141,75955,ATK,6082,Add,SPD,5258,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,142,76731,ATK,6145,Add,SPD,5308,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,143,77508,ATK,6208,Add,SPD,5358,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,144,78284,ATK,6271,Add,SPD,5408,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,145,79061,ATK,6334,Add,SPD,5458,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,146,79837,ATK,6397,Add,SPD,5508,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,147,80614,ATK,6460,Add,SPD,5558,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,148,81390,ATK,6523,Add,SPD,5608,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,149,82167,ATK,6586,Add,SPD,5658,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,150,82943,ATK,6649,Add,SPD,5708,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,151,84148,ATK,6748,Add,SPD,5780,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,152,85354,ATK,6847,Add,SPD,5852,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,153,86559,ATK,6946,Add,SPD,5924,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,154,87764,ATK,7045,Add,SPD,5996,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,155,88969,ATK,7144,Add,SPD,6068,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,156,90174,ATK,7243,Add,SPD,6140,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,157,91379,ATK,7342,Add,SPD,6212,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,158,92584,ATK,7441,Add,SPD,6284,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,159,93789,ATK,7540,Add,SPD,6356,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,160,94994,ATK,7639,Add,SPD,6428,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,161,96199,ATK,7738,Add,SPD,6500,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,162,97405,ATK,7837,Add,SPD,6572,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,163,98610,ATK,7936,Add,SPD,6644,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,164,99815,ATK,8035,Add,SPD,6716,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,165,101020,ATK,8134,Add,SPD,6788,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,166,102225,ATK,8233,Add,SPD,6860,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,167,103430,ATK,8332,Add,SPD,6932,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,168,104635,ATK,8431,Add,SPD,7004,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,169,105840,ATK,8530,Add,SPD,7076,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,170,107045,ATK,8629,Add,SPD,7148,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,171,108250,ATK,8728,Add,SPD,7220,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,172,109456,ATK,8827,Add,SPD,7292,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,173,110661,ATK,8926,Add,SPD,7364,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,174,111866,ATK,9025,Add,SPD,7436,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,175,113071,ATK,9124,Add,SPD,7508,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,176,114276,ATK,9223,Add,SPD,7580,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,177,115481,ATK,9322,Add,SPD,7652,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,178,116686,ATK,9421,Add,SPD,7724,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,179,117891,ATK,9520,Add,SPD,7796,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,180,119096,ATK,9619,Add,SPD,7868,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,181,120301,ATK,9718,Add,SPD,7940,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,182,121507,ATK,9817,Add,SPD,8012,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,183,122712,ATK,9916,Add,SPD,8084,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,184,123917,ATK,10015,Add,SPD,8156,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,185,125122,ATK,10114,Add,SPD,8228,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,186,126327,ATK,10213,Add,SPD,8300,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,187,127532,ATK,10312,Add,SPD,8372,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,188,128737,ATK,10411,Add,SPD,8444,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,189,129942,ATK,10510,Add,SPD,8516,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,190,131147,ATK,10609,Add,SPD,8588,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,191,132352,ATK,10708,Add,SPD,8660,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,192,133558,ATK,10807,Add,SPD,8732,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,193,134763,ATK,10906,Add,SPD,8804,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,194,135968,ATK,11005,Add,SPD,8876,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,195,137173,ATK,11104,Add,SPD,8948,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,196,138378,ATK,11203,Add,SPD,9020,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,197,139583,ATK,11302,Add,SPD,9092,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,198,140788,ATK,11401,Add,SPD,9164,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,199,141993,ATK,11500,Add,SPD,9236,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,200,143198,ATK,11599,Add,SPD,9308,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,201,144727,ATK,11719,Add,SPD,9425,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,202,146257,ATK,11839,Add,SPD,9542,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,203,147786,ATK,11959,Add,SPD,9659,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,204,149315,ATK,12079,Add,SPD,9776,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,205,150844,ATK,12199,Add,SPD,9893,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,206,152373,ATK,12319,Add,SPD,10010,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,207,153902,ATK,12439,Add,SPD,10127,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,208,155431,ATK,12559,Add,SPD,10244,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,209,156960,ATK,12679,Add,SPD,10361,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,210,158489,ATK,12799,Add,SPD,10478,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,211,160018,ATK,12919,Add,SPD,10595,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,212,161548,ATK,13039,Add,SPD,10712,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,213,163077,ATK,13159,Add,SPD,10829,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,214,164606,ATK,13279,Add,SPD,10946,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,215,166135,ATK,13399,Add,SPD,11063,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,216,167664,ATK,13519,Add,SPD,11180,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,217,169193,ATK,13639,Add,SPD,11297,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,218,170722,ATK,13759,Add,SPD,11414,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,219,172251,ATK,13879,Add,SPD,11531,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,220,173780,ATK,13999,Add,SPD,11648,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,221,175309,ATK,14119,Add,SPD,11765,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,222,176839,ATK,14239,Add,SPD,11882,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,223,178368,ATK,14359,Add,SPD,11999,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,224,179897,ATK,14479,Add,SPD,12116,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,225,181426,ATK,14599,Add,SPD,12233,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,226,182955,ATK,14719,Add,SPD,12350,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,227,184484,ATK,14839,Add,SPD,12467,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,228,186013,ATK,14959,Add,SPD,12584,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,229,187542,ATK,15079,Add,SPD,12701,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,230,189071,ATK,15199,Add,SPD,12818,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,231,190600,ATK,15319,Add,SPD,12935,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,232,192130,ATK,15439,Add,SPD,13052,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,233,193659,ATK,15559,Add,SPD,13169,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,234,195188,ATK,15679,Add,SPD,13286,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,235,196717,ATK,15799,Add,SPD,13403,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,236,198246,ATK,15919,Add,SPD,13520,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,237,199775,ATK,16039,Add,SPD,13637,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,238,201304,ATK,16159,Add,SPD,13754,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,239,202833,ATK,16279,Add,SPD,13871,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,240,204362,ATK,16399,Add,SPD,13988,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,241,205891,ATK,16519,Add,SPD,14105,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,242,207421,ATK,16639,Add,SPD,14222,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,243,208950,ATK,16759,Add,SPD,14339,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,244,210479,ATK,16879,Add,SPD,14456,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,245,212008,ATK,16999,Add,SPD,14573,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,246,213537,ATK,17119,Add,SPD,14690,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,247,215066,ATK,17239,Add,SPD,14807,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,248,216595,ATK,17359,Add,SPD,14924,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,249,218124,ATK,17479,Add,SPD,15041,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,250,219653,ATK,17599,Add,SPD,15158,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,251,221890,ATK,17777,Add,SPD,15318,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,252,224127,ATK,17955,Add,SPD,15478,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,253,226364,ATK,18133,Add,SPD,15638,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,254,228601,ATK,18311,Add,SPD,15798,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,255,230838,ATK,18489,Add,SPD,15958,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,256,233075,ATK,18667,Add,SPD,16118,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,257,235312,ATK,18845,Add,SPD,16278,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,258,237549,ATK,19023,Add,SPD,16438,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,259,239786,ATK,19201,Add,SPD,16598,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,260,242023,ATK,19379,Add,SPD,16758,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,261,244260,ATK,19557,Add,SPD,16918,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,262,246497,ATK,19735,Add,SPD,17078,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,263,248734,ATK,19913,Add,SPD,17238,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,264,250971,ATK,20091,Add,SPD,17398,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,265,253208,ATK,20269,Add,SPD,17558,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,266,255445,ATK,20447,Add,SPD,17718,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,267,257682,ATK,20625,Add,SPD,17878,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,268,259919,ATK,20803,Add,SPD,18038,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,269,262156,ATK,20981,Add,SPD,18198,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,270,264393,ATK,21159,Add,SPD,18358,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,271,266630,ATK,21337,Add,SPD,18518,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,272,268867,ATK,21515,Add,SPD,18678,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,273,271104,ATK,21693,Add,SPD,18838,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,274,273341,ATK,21871,Add,SPD,18998,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,275,275578,ATK,22049,Add,SPD,19158,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,276,277815,ATK,22227,Add,SPD,19318,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,277,280052,ATK,22405,Add,SPD,19478,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,278,282289,ATK,22583,Add,SPD,19638,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,279,284526,ATK,22761,Add,SPD,19798,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,280,286763,ATK,22939,Add,SPD,19958,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,281,289000,ATK,23117,Add,SPD,20118,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,282,291237,ATK,23295,Add,SPD,20278,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,283,293474,ATK,23473,Add,SPD,20438,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,284,295711,ATK,23651,Add,SPD,20598,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,285,297948,ATK,23829,Add,SPD,20758,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,286,300185,ATK,24007,Add,SPD,20918,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,287,302422,ATK,24185,Add,SPD,21078,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,288,304659,ATK,24363,Add,SPD,21238,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,289,306896,ATK,24541,Add,SPD,21398,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,290,309133,ATK,24719,Add,SPD,21558,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,291,311370,ATK,24897,Add,SPD,21718,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,292,313607,ATK,25075,Add,SPD,21878,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,293,315844,ATK,25253,Add,SPD,22038,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,294,318081,ATK,25431,Add,SPD,22198,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,295,320318,ATK,25609,Add,SPD,22358,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,296,322555,ATK,25787,Add,SPD,22518,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,297,324792,ATK,25965,Add,SPD,22678,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,298,327029,ATK,26143,Add,SPD,22838,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,299,329266,ATK,26321,Add,SPD,22998,Add,NONE,0,Add,,,,,,,, +10027,Arena Quick Rune,300,331503,ATK,26499,Add,SPD,23158,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,1,2666,ATK,226,Add,SPD,127,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,2,2993,ATK,253,Add,SPD,146,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,3,3320,ATK,280,Add,SPD,165,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,4,3647,ATK,307,Add,SPD,184,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,5,3974,ATK,334,Add,SPD,203,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,6,4302,ATK,361,Add,SPD,222,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,7,4629,ATK,388,Add,SPD,241,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,8,4956,ATK,415,Add,SPD,260,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,9,5283,ATK,442,Add,SPD,279,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,10,5610,ATK,469,Add,SPD,298,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,11,5938,ATK,496,Add,SPD,317,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,12,6265,ATK,523,Add,SPD,336,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,13,6592,ATK,550,Add,SPD,355,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,14,6919,ATK,577,Add,SPD,374,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,15,7246,ATK,604,Add,SPD,393,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,16,7574,ATK,631,Add,SPD,412,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,17,7901,ATK,658,Add,SPD,431,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,18,8228,ATK,685,Add,SPD,450,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,19,8555,ATK,712,Add,SPD,469,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,20,8882,ATK,739,Add,SPD,488,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,21,9210,ATK,766,Add,SPD,507,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,22,9537,ATK,793,Add,SPD,526,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,23,9864,ATK,820,Add,SPD,545,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,24,10191,ATK,847,Add,SPD,564,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,25,10518,ATK,874,Add,SPD,583,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,26,10846,ATK,901,Add,SPD,602,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,27,11173,ATK,928,Add,SPD,621,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,28,11500,ATK,955,Add,SPD,640,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,29,11827,ATK,982,Add,SPD,659,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,30,12154,ATK,1009,Add,SPD,678,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,31,12482,ATK,1036,Add,SPD,697,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,32,12809,ATK,1063,Add,SPD,716,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,33,13136,ATK,1090,Add,SPD,735,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,34,13463,ATK,1117,Add,SPD,754,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,35,13790,ATK,1144,Add,SPD,773,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,36,14118,ATK,1171,Add,SPD,792,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,37,14445,ATK,1198,Add,SPD,811,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,38,14772,ATK,1225,Add,SPD,830,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,39,15099,ATK,1252,Add,SPD,849,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,40,15426,ATK,1279,Add,SPD,868,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,41,15754,ATK,1306,Add,SPD,887,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,42,16081,ATK,1333,Add,SPD,906,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,43,16408,ATK,1360,Add,SPD,925,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,44,16735,ATK,1387,Add,SPD,944,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,45,17062,ATK,1414,Add,SPD,963,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,46,17390,ATK,1441,Add,SPD,982,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,47,17717,ATK,1468,Add,SPD,1001,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,48,18044,ATK,1495,Add,SPD,1020,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,49,18371,ATK,1522,Add,SPD,1039,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,50,18698,ATK,1549,Add,SPD,1058,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,51,19207,ATK,1588,Add,SPD,1101,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,52,19715,ATK,1627,Add,SPD,1144,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,53,20224,ATK,1666,Add,SPD,1187,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,54,20732,ATK,1705,Add,SPD,1230,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,55,21240,ATK,1744,Add,SPD,1273,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,56,21749,ATK,1783,Add,SPD,1316,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,57,22257,ATK,1822,Add,SPD,1359,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,58,22766,ATK,1861,Add,SPD,1402,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,59,23274,ATK,1900,Add,SPD,1445,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,60,23782,ATK,1939,Add,SPD,1488,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,61,24291,ATK,1978,Add,SPD,1531,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,62,24799,ATK,2017,Add,SPD,1574,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,63,25308,ATK,2056,Add,SPD,1617,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,64,25816,ATK,2095,Add,SPD,1660,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,65,26324,ATK,2134,Add,SPD,1703,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,66,26833,ATK,2173,Add,SPD,1746,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,67,27341,ATK,2212,Add,SPD,1789,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,68,27850,ATK,2251,Add,SPD,1832,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,69,28358,ATK,2290,Add,SPD,1875,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,70,28866,ATK,2329,Add,SPD,1918,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,71,29375,ATK,2368,Add,SPD,1961,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,72,29883,ATK,2407,Add,SPD,2004,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,73,30392,ATK,2446,Add,SPD,2047,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,74,30900,ATK,2485,Add,SPD,2090,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,75,31408,ATK,2524,Add,SPD,2133,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,76,31917,ATK,2563,Add,SPD,2176,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,77,32425,ATK,2602,Add,SPD,2219,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,78,32934,ATK,2641,Add,SPD,2262,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,79,33442,ATK,2680,Add,SPD,2305,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,80,33950,ATK,2719,Add,SPD,2348,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,81,34459,ATK,2758,Add,SPD,2391,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,82,34967,ATK,2797,Add,SPD,2434,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,83,35476,ATK,2836,Add,SPD,2477,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,84,35984,ATK,2875,Add,SPD,2520,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,85,36492,ATK,2914,Add,SPD,2563,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,86,37001,ATK,2953,Add,SPD,2606,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,87,37509,ATK,2992,Add,SPD,2649,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,88,38018,ATK,3031,Add,SPD,2692,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,89,38526,ATK,3070,Add,SPD,2735,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,90,39034,ATK,3109,Add,SPD,2778,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,91,39543,ATK,3148,Add,SPD,2821,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,92,40051,ATK,3187,Add,SPD,2864,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,93,40560,ATK,3226,Add,SPD,2907,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,94,41068,ATK,3265,Add,SPD,2950,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,95,41576,ATK,3304,Add,SPD,2993,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,96,42085,ATK,3343,Add,SPD,3036,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,97,42593,ATK,3382,Add,SPD,3079,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,98,43102,ATK,3421,Add,SPD,3122,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,99,43610,ATK,3460,Add,SPD,3165,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,100,44118,ATK,3499,Add,SPD,3208,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,101,44895,ATK,3562,Add,SPD,3258,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,102,45671,ATK,3625,Add,SPD,3308,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,103,46448,ATK,3688,Add,SPD,3358,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,104,47224,ATK,3751,Add,SPD,3408,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,105,48001,ATK,3814,Add,SPD,3458,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,106,48777,ATK,3877,Add,SPD,3508,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,107,49554,ATK,3940,Add,SPD,3558,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,108,50330,ATK,4003,Add,SPD,3608,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,109,51107,ATK,4066,Add,SPD,3658,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,110,51883,ATK,4129,Add,SPD,3708,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,111,52660,ATK,4192,Add,SPD,3758,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,112,53436,ATK,4255,Add,SPD,3808,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,113,54213,ATK,4318,Add,SPD,3858,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,114,54989,ATK,4381,Add,SPD,3908,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,115,55766,ATK,4444,Add,SPD,3958,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,116,56542,ATK,4507,Add,SPD,4008,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,117,57319,ATK,4570,Add,SPD,4058,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,118,58095,ATK,4633,Add,SPD,4108,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,119,58872,ATK,4696,Add,SPD,4158,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,120,59648,ATK,4759,Add,SPD,4208,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,121,60425,ATK,4822,Add,SPD,4258,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,122,61201,ATK,4885,Add,SPD,4308,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,123,61978,ATK,4948,Add,SPD,4358,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,124,62754,ATK,5011,Add,SPD,4408,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,125,63531,ATK,5074,Add,SPD,4458,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,126,64307,ATK,5137,Add,SPD,4508,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,127,65084,ATK,5200,Add,SPD,4558,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,128,65860,ATK,5263,Add,SPD,4608,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,129,66637,ATK,5326,Add,SPD,4658,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,130,67413,ATK,5389,Add,SPD,4708,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,131,68190,ATK,5452,Add,SPD,4758,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,132,68966,ATK,5515,Add,SPD,4808,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,133,69743,ATK,5578,Add,SPD,4858,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,134,70519,ATK,5641,Add,SPD,4908,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,135,71296,ATK,5704,Add,SPD,4958,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,136,72072,ATK,5767,Add,SPD,5008,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,137,72849,ATK,5830,Add,SPD,5058,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,138,73625,ATK,5893,Add,SPD,5108,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,139,74402,ATK,5956,Add,SPD,5158,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,140,75178,ATK,6019,Add,SPD,5208,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,141,75955,ATK,6082,Add,SPD,5258,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,142,76731,ATK,6145,Add,SPD,5308,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,143,77508,ATK,6208,Add,SPD,5358,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,144,78284,ATK,6271,Add,SPD,5408,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,145,79061,ATK,6334,Add,SPD,5458,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,146,79837,ATK,6397,Add,SPD,5508,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,147,80614,ATK,6460,Add,SPD,5558,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,148,81390,ATK,6523,Add,SPD,5608,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,149,82167,ATK,6586,Add,SPD,5658,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,150,82943,ATK,6649,Add,SPD,5708,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,151,84148,ATK,6748,Add,SPD,5780,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,152,85354,ATK,6847,Add,SPD,5852,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,153,86559,ATK,6946,Add,SPD,5924,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,154,87764,ATK,7045,Add,SPD,5996,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,155,88969,ATK,7144,Add,SPD,6068,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,156,90174,ATK,7243,Add,SPD,6140,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,157,91379,ATK,7342,Add,SPD,6212,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,158,92584,ATK,7441,Add,SPD,6284,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,159,93789,ATK,7540,Add,SPD,6356,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,160,94994,ATK,7639,Add,SPD,6428,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,161,96199,ATK,7738,Add,SPD,6500,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,162,97405,ATK,7837,Add,SPD,6572,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,163,98610,ATK,7936,Add,SPD,6644,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,164,99815,ATK,8035,Add,SPD,6716,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,165,101020,ATK,8134,Add,SPD,6788,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,166,102225,ATK,8233,Add,SPD,6860,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,167,103430,ATK,8332,Add,SPD,6932,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,168,104635,ATK,8431,Add,SPD,7004,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,169,105840,ATK,8530,Add,SPD,7076,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,170,107045,ATK,8629,Add,SPD,7148,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,171,108250,ATK,8728,Add,SPD,7220,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,172,109456,ATK,8827,Add,SPD,7292,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,173,110661,ATK,8926,Add,SPD,7364,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,174,111866,ATK,9025,Add,SPD,7436,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,175,113071,ATK,9124,Add,SPD,7508,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,176,114276,ATK,9223,Add,SPD,7580,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,177,115481,ATK,9322,Add,SPD,7652,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,178,116686,ATK,9421,Add,SPD,7724,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,179,117891,ATK,9520,Add,SPD,7796,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,180,119096,ATK,9619,Add,SPD,7868,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,181,120301,ATK,9718,Add,SPD,7940,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,182,121507,ATK,9817,Add,SPD,8012,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,183,122712,ATK,9916,Add,SPD,8084,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,184,123917,ATK,10015,Add,SPD,8156,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,185,125122,ATK,10114,Add,SPD,8228,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,186,126327,ATK,10213,Add,SPD,8300,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,187,127532,ATK,10312,Add,SPD,8372,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,188,128737,ATK,10411,Add,SPD,8444,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,189,129942,ATK,10510,Add,SPD,8516,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,190,131147,ATK,10609,Add,SPD,8588,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,191,132352,ATK,10708,Add,SPD,8660,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,192,133558,ATK,10807,Add,SPD,8732,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,193,134763,ATK,10906,Add,SPD,8804,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,194,135968,ATK,11005,Add,SPD,8876,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,195,137173,ATK,11104,Add,SPD,8948,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,196,138378,ATK,11203,Add,SPD,9020,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,197,139583,ATK,11302,Add,SPD,9092,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,198,140788,ATK,11401,Add,SPD,9164,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,199,141993,ATK,11500,Add,SPD,9236,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,200,143198,ATK,11599,Add,SPD,9308,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,201,144727,ATK,11719,Add,SPD,9425,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,202,146257,ATK,11839,Add,SPD,9542,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,203,147786,ATK,11959,Add,SPD,9659,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,204,149315,ATK,12079,Add,SPD,9776,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,205,150844,ATK,12199,Add,SPD,9893,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,206,152373,ATK,12319,Add,SPD,10010,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,207,153902,ATK,12439,Add,SPD,10127,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,208,155431,ATK,12559,Add,SPD,10244,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,209,156960,ATK,12679,Add,SPD,10361,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,210,158489,ATK,12799,Add,SPD,10478,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,211,160018,ATK,12919,Add,SPD,10595,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,212,161548,ATK,13039,Add,SPD,10712,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,213,163077,ATK,13159,Add,SPD,10829,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,214,164606,ATK,13279,Add,SPD,10946,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,215,166135,ATK,13399,Add,SPD,11063,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,216,167664,ATK,13519,Add,SPD,11180,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,217,169193,ATK,13639,Add,SPD,11297,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,218,170722,ATK,13759,Add,SPD,11414,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,219,172251,ATK,13879,Add,SPD,11531,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,220,173780,ATK,13999,Add,SPD,11648,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,221,175309,ATK,14119,Add,SPD,11765,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,222,176839,ATK,14239,Add,SPD,11882,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,223,178368,ATK,14359,Add,SPD,11999,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,224,179897,ATK,14479,Add,SPD,12116,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,225,181426,ATK,14599,Add,SPD,12233,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,226,182955,ATK,14719,Add,SPD,12350,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,227,184484,ATK,14839,Add,SPD,12467,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,228,186013,ATK,14959,Add,SPD,12584,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,229,187542,ATK,15079,Add,SPD,12701,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,230,189071,ATK,15199,Add,SPD,12818,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,231,190600,ATK,15319,Add,SPD,12935,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,232,192130,ATK,15439,Add,SPD,13052,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,233,193659,ATK,15559,Add,SPD,13169,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,234,195188,ATK,15679,Add,SPD,13286,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,235,196717,ATK,15799,Add,SPD,13403,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,236,198246,ATK,15919,Add,SPD,13520,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,237,199775,ATK,16039,Add,SPD,13637,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,238,201304,ATK,16159,Add,SPD,13754,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,239,202833,ATK,16279,Add,SPD,13871,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,240,204362,ATK,16399,Add,SPD,13988,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,241,205891,ATK,16519,Add,SPD,14105,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,242,207421,ATK,16639,Add,SPD,14222,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,243,208950,ATK,16759,Add,SPD,14339,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,244,210479,ATK,16879,Add,SPD,14456,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,245,212008,ATK,16999,Add,SPD,14573,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,246,213537,ATK,17119,Add,SPD,14690,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,247,215066,ATK,17239,Add,SPD,14807,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,248,216595,ATK,17359,Add,SPD,14924,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,249,218124,ATK,17479,Add,SPD,15041,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,250,219653,ATK,17599,Add,SPD,15158,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,251,221890,ATK,17777,Add,SPD,15318,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,252,224127,ATK,17955,Add,SPD,15478,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,253,226364,ATK,18133,Add,SPD,15638,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,254,228601,ATK,18311,Add,SPD,15798,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,255,230838,ATK,18489,Add,SPD,15958,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,256,233075,ATK,18667,Add,SPD,16118,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,257,235312,ATK,18845,Add,SPD,16278,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,258,237549,ATK,19023,Add,SPD,16438,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,259,239786,ATK,19201,Add,SPD,16598,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,260,242023,ATK,19379,Add,SPD,16758,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,261,244260,ATK,19557,Add,SPD,16918,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,262,246497,ATK,19735,Add,SPD,17078,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,263,248734,ATK,19913,Add,SPD,17238,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,264,250971,ATK,20091,Add,SPD,17398,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,265,253208,ATK,20269,Add,SPD,17558,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,266,255445,ATK,20447,Add,SPD,17718,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,267,257682,ATK,20625,Add,SPD,17878,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,268,259919,ATK,20803,Add,SPD,18038,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,269,262156,ATK,20981,Add,SPD,18198,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,270,264393,ATK,21159,Add,SPD,18358,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,271,266630,ATK,21337,Add,SPD,18518,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,272,268867,ATK,21515,Add,SPD,18678,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,273,271104,ATK,21693,Add,SPD,18838,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,274,273341,ATK,21871,Add,SPD,18998,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,275,275578,ATK,22049,Add,SPD,19158,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,276,277815,ATK,22227,Add,SPD,19318,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,277,280052,ATK,22405,Add,SPD,19478,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,278,282289,ATK,22583,Add,SPD,19638,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,279,284526,ATK,22761,Add,SPD,19798,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,280,286763,ATK,22939,Add,SPD,19958,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,281,289000,ATK,23117,Add,SPD,20118,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,282,291237,ATK,23295,Add,SPD,20278,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,283,293474,ATK,23473,Add,SPD,20438,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,284,295711,ATK,23651,Add,SPD,20598,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,285,297948,ATK,23829,Add,SPD,20758,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,286,300185,ATK,24007,Add,SPD,20918,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,287,302422,ATK,24185,Add,SPD,21078,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,288,304659,ATK,24363,Add,SPD,21238,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,289,306896,ATK,24541,Add,SPD,21398,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,290,309133,ATK,24719,Add,SPD,21558,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,291,311370,ATK,24897,Add,SPD,21718,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,292,313607,ATK,25075,Add,SPD,21878,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,293,315844,ATK,25253,Add,SPD,22038,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,294,318081,ATK,25431,Add,SPD,22198,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,295,320318,ATK,25609,Add,SPD,22358,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,296,322555,ATK,25787,Add,SPD,22518,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,297,324792,ATK,25965,Add,SPD,22678,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,298,327029,ATK,26143,Add,SPD,22838,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,299,329266,ATK,26321,Add,SPD,22998,Add,NONE,0,Add,,,,,,,, +10028,WorldBoss Quick Rune,300,331503,ATK,26499,Add,SPD,23158,Add,NONE,0,Add,,,,,,,, \ No newline at end of file diff --git a/Lib9c/TableCSV/RuneCostSheet.csv b/Lib9c/TableCSV/RuneCostSheet.csv index 9e1bbd813..1b37f1bea 100644 --- a/Lib9c/TableCSV/RuneCostSheet.csv +++ b/Lib9c/TableCSV/RuneCostSheet.csv @@ -2398,4 +2398,2404 @@ id,_name,rune_level,rune_stone_quantity,crystal_quantity,ncg_quantity,level_up_s 20001,Golden leaf Rune,297,80,800000,0,10000 20001,Golden leaf Rune,298,80,800000,0,9000 20001,Golden leaf Rune,299,80,800000,0,8000 -20001,Golden leaf Rune,300,0,5000000,0,5000 \ No newline at end of file +20001,Golden leaf Rune,300,0,5000000,0,5000 +10021,Adventure Stun Rune,1,1,0,0,10000 +10021,Adventure Stun Rune,2,1,0,0,10000 +10021,Adventure Stun Rune,3,1,0,0,10000 +10021,Adventure Stun Rune,4,1,0,0,10000 +10021,Adventure Stun Rune,5,1,0,0,10000 +10021,Adventure Stun Rune,6,1,0,0,10000 +10021,Adventure Stun Rune,7,1,0,0,10000 +10021,Adventure Stun Rune,8,1,0,0,10000 +10021,Adventure Stun Rune,9,1,0,0,10000 +10021,Adventure Stun Rune,10,1,0,0,10000 +10021,Adventure Stun Rune,11,1,1,0,10000 +10021,Adventure Stun Rune,12,1,1,0,10000 +10021,Adventure Stun Rune,13,1,1,0,10000 +10021,Adventure Stun Rune,14,1,1,0,10000 +10021,Adventure Stun Rune,15,1,1,0,10000 +10021,Adventure Stun Rune,16,1,1,0,10000 +10021,Adventure Stun Rune,17,1,1,0,10000 +10021,Adventure Stun Rune,18,1,1,0,10000 +10021,Adventure Stun Rune,19,1,1,0,10000 +10021,Adventure Stun Rune,20,1,1,0,10000 +10021,Adventure Stun Rune,21,1,1,0,10000 +10021,Adventure Stun Rune,22,1,1,0,10000 +10021,Adventure Stun Rune,23,1,1,0,10000 +10021,Adventure Stun Rune,24,1,1,0,10000 +10021,Adventure Stun Rune,25,1,1,0,10000 +10021,Adventure Stun Rune,26,1,1,0,10000 +10021,Adventure Stun Rune,27,1,1,0,10000 +10021,Adventure Stun Rune,28,1,1,0,10000 +10021,Adventure Stun Rune,29,1,1,0,10000 +10021,Adventure Stun Rune,30,1,1,0,10000 +10021,Adventure Stun Rune,31,2,10,0,10000 +10021,Adventure Stun Rune,32,2,10,0,10000 +10021,Adventure Stun Rune,33,2,10,0,10000 +10021,Adventure Stun Rune,34,2,10,0,10000 +10021,Adventure Stun Rune,35,2,10,0,10000 +10021,Adventure Stun Rune,36,2,10,0,10000 +10021,Adventure Stun Rune,37,2,10,0,10000 +10021,Adventure Stun Rune,38,2,10,0,10000 +10021,Adventure Stun Rune,39,2,10,0,10000 +10021,Adventure Stun Rune,40,2,10,0,10000 +10021,Adventure Stun Rune,41,2,10,0,10000 +10021,Adventure Stun Rune,42,2,10,0,10000 +10021,Adventure Stun Rune,43,2,10,0,10000 +10021,Adventure Stun Rune,44,2,10,0,10000 +10021,Adventure Stun Rune,45,2,10,0,10000 +10021,Adventure Stun Rune,46,2,10,0,10000 +10021,Adventure Stun Rune,47,2,10,0,10000 +10021,Adventure Stun Rune,48,2,10,0,10000 +10021,Adventure Stun Rune,49,2,10,0,10000 +10021,Adventure Stun Rune,50,2,10,0,10000 +10021,Adventure Stun Rune,51,2,10,1,10000 +10021,Adventure Stun Rune,52,2,10,0,10000 +10021,Adventure Stun Rune,53,2,10,0,10000 +10021,Adventure Stun Rune,54,2,10,0,10000 +10021,Adventure Stun Rune,55,2,10,0,10000 +10021,Adventure Stun Rune,56,2,10,0,10000 +10021,Adventure Stun Rune,57,2,10,0,10000 +10021,Adventure Stun Rune,58,2,10,0,10000 +10021,Adventure Stun Rune,59,2,10,0,10000 +10021,Adventure Stun Rune,60,2,10,0,10000 +10021,Adventure Stun Rune,61,2,10,1,10000 +10021,Adventure Stun Rune,62,2,10,0,10000 +10021,Adventure Stun Rune,63,2,10,0,10000 +10021,Adventure Stun Rune,64,2,10,0,10000 +10021,Adventure Stun Rune,65,2,10,0,10000 +10021,Adventure Stun Rune,66,2,10,0,10000 +10021,Adventure Stun Rune,67,2,10,0,10000 +10021,Adventure Stun Rune,68,2,10,0,10000 +10021,Adventure Stun Rune,69,2,10,0,10000 +10021,Adventure Stun Rune,70,2,10,0,10000 +10021,Adventure Stun Rune,71,3,20,1,10000 +10021,Adventure Stun Rune,72,3,20,0,10000 +10021,Adventure Stun Rune,73,3,20,0,10000 +10021,Adventure Stun Rune,74,3,20,0,10000 +10021,Adventure Stun Rune,75,3,20,0,10000 +10021,Adventure Stun Rune,76,3,20,0,10000 +10021,Adventure Stun Rune,77,3,20,0,10000 +10021,Adventure Stun Rune,78,3,20,0,10000 +10021,Adventure Stun Rune,79,3,20,0,10000 +10021,Adventure Stun Rune,80,3,20,0,10000 +10021,Adventure Stun Rune,81,3,20,1,10000 +10021,Adventure Stun Rune,82,3,20,0,10000 +10021,Adventure Stun Rune,83,3,20,0,10000 +10021,Adventure Stun Rune,84,3,20,0,10000 +10021,Adventure Stun Rune,85,3,20,0,10000 +10021,Adventure Stun Rune,86,3,20,0,10000 +10021,Adventure Stun Rune,87,3,20,0,10000 +10021,Adventure Stun Rune,88,3,20,0,10000 +10021,Adventure Stun Rune,89,3,20,0,10000 +10021,Adventure Stun Rune,90,3,20,0,10000 +10021,Adventure Stun Rune,91,3,20,2,10000 +10021,Adventure Stun Rune,92,3,20,0,10000 +10021,Adventure Stun Rune,93,3,20,0,10000 +10021,Adventure Stun Rune,94,3,20,0,10000 +10021,Adventure Stun Rune,95,3,20,0,10000 +10021,Adventure Stun Rune,96,3,20,0,10000 +10021,Adventure Stun Rune,97,3,20,0,10000 +10021,Adventure Stun Rune,98,3,20,0,10000 +10021,Adventure Stun Rune,99,3,20,0,10000 +10021,Adventure Stun Rune,100,3,20,0,10000 +10021,Adventure Stun Rune,101,3,20,2,10000 +10021,Adventure Stun Rune,102,3,20,0,8000 +10021,Adventure Stun Rune,103,3,20,0,8000 +10021,Adventure Stun Rune,104,3,20,0,8000 +10021,Adventure Stun Rune,105,3,20,0,8000 +10021,Adventure Stun Rune,106,3,20,0,8000 +10021,Adventure Stun Rune,107,3,20,0,8000 +10021,Adventure Stun Rune,108,3,20,0,8000 +10021,Adventure Stun Rune,109,3,20,0,8000 +10021,Adventure Stun Rune,110,3,20,0,8000 +10021,Adventure Stun Rune,111,3,20,2,10000 +10021,Adventure Stun Rune,112,3,20,0,8000 +10021,Adventure Stun Rune,113,3,20,0,8000 +10021,Adventure Stun Rune,114,3,20,0,8000 +10021,Adventure Stun Rune,115,3,20,0,8000 +10021,Adventure Stun Rune,116,3,20,0,8000 +10021,Adventure Stun Rune,117,3,20,0,8000 +10021,Adventure Stun Rune,118,3,20,0,8000 +10021,Adventure Stun Rune,119,3,20,0,8000 +10021,Adventure Stun Rune,120,3,20,0,8000 +10021,Adventure Stun Rune,121,3,20,2,10000 +10021,Adventure Stun Rune,122,3,20,0,8000 +10021,Adventure Stun Rune,123,3,20,0,8000 +10021,Adventure Stun Rune,124,3,20,0,8000 +10021,Adventure Stun Rune,125,3,20,0,8000 +10021,Adventure Stun Rune,126,10,500,0,8000 +10021,Adventure Stun Rune,127,10,500,0,8000 +10021,Adventure Stun Rune,128,10,500,0,8000 +10021,Adventure Stun Rune,129,10,500,0,8000 +10021,Adventure Stun Rune,130,10,500,0,8000 +10021,Adventure Stun Rune,131,10,500,5,10000 +10021,Adventure Stun Rune,132,10,500,0,8000 +10021,Adventure Stun Rune,133,10,500,0,8000 +10021,Adventure Stun Rune,134,10,500,0,8000 +10021,Adventure Stun Rune,135,10,500,0,8000 +10021,Adventure Stun Rune,136,10,500,0,8000 +10021,Adventure Stun Rune,137,10,500,0,8000 +10021,Adventure Stun Rune,138,10,500,0,8000 +10021,Adventure Stun Rune,139,10,500,0,8000 +10021,Adventure Stun Rune,140,10,500,0,8000 +10021,Adventure Stun Rune,141,10,500,5,10000 +10021,Adventure Stun Rune,142,10,500,0,8000 +10021,Adventure Stun Rune,143,10,500,0,8000 +10021,Adventure Stun Rune,144,10,500,0,8000 +10021,Adventure Stun Rune,145,10,500,0,8000 +10021,Adventure Stun Rune,146,10,500,0,8000 +10021,Adventure Stun Rune,147,10,500,0,8000 +10021,Adventure Stun Rune,148,10,500,0,8000 +10021,Adventure Stun Rune,149,10,500,0,8000 +10021,Adventure Stun Rune,150,10,500,0,8000 +10021,Adventure Stun Rune,151,10,500,5,10000 +10021,Adventure Stun Rune,152,10,500,0,8000 +10021,Adventure Stun Rune,153,10,500,0,8000 +10021,Adventure Stun Rune,154,10,500,0,8000 +10021,Adventure Stun Rune,155,10,500,0,8000 +10021,Adventure Stun Rune,156,10,500,0,8000 +10021,Adventure Stun Rune,157,10,500,0,8000 +10021,Adventure Stun Rune,158,10,500,0,8000 +10021,Adventure Stun Rune,159,10,500,0,8000 +10021,Adventure Stun Rune,160,10,500,0,8000 +10021,Adventure Stun Rune,161,10,500,5,10000 +10021,Adventure Stun Rune,162,10,500,0,8000 +10021,Adventure Stun Rune,163,10,500,0,8000 +10021,Adventure Stun Rune,164,10,500,0,8000 +10021,Adventure Stun Rune,165,10,500,0,8000 +10021,Adventure Stun Rune,166,10,500,0,8000 +10021,Adventure Stun Rune,167,10,500,0,8000 +10021,Adventure Stun Rune,168,10,500,0,8000 +10021,Adventure Stun Rune,169,10,500,0,8000 +10021,Adventure Stun Rune,170,10,500,0,8000 +10021,Adventure Stun Rune,171,10,500,5,10000 +10021,Adventure Stun Rune,172,10,500,0,8000 +10021,Adventure Stun Rune,173,10,500,0,8000 +10021,Adventure Stun Rune,174,10,500,0,8000 +10021,Adventure Stun Rune,175,10,500,0,8000 +10021,Adventure Stun Rune,176,10,500,0,8000 +10021,Adventure Stun Rune,177,10,500,0,8000 +10021,Adventure Stun Rune,178,10,500,0,8000 +10021,Adventure Stun Rune,179,10,500,0,8000 +10021,Adventure Stun Rune,180,10,500,0,8000 +10021,Adventure Stun Rune,181,10,500,5,10000 +10021,Adventure Stun Rune,182,10,500,0,8000 +10021,Adventure Stun Rune,183,10,500,0,8000 +10021,Adventure Stun Rune,184,10,500,0,8000 +10021,Adventure Stun Rune,185,10,500,0,8000 +10021,Adventure Stun Rune,186,10,500,0,8000 +10021,Adventure Stun Rune,187,10,500,0,8000 +10021,Adventure Stun Rune,188,10,500,0,8000 +10021,Adventure Stun Rune,189,10,500,0,8000 +10021,Adventure Stun Rune,190,10,500,0,8000 +10021,Adventure Stun Rune,191,10,500,5,10000 +10021,Adventure Stun Rune,192,10,500,0,8000 +10021,Adventure Stun Rune,193,10,500,0,8000 +10021,Adventure Stun Rune,194,10,500,0,8000 +10021,Adventure Stun Rune,195,10,500,0,8000 +10021,Adventure Stun Rune,196,10,500,0,8000 +10021,Adventure Stun Rune,197,10,500,0,8000 +10021,Adventure Stun Rune,198,10,500,0,8000 +10021,Adventure Stun Rune,199,10,500,0,8000 +10021,Adventure Stun Rune,200,10,500,0,8000 +10021,Adventure Stun Rune,201,20,500,10,10000 +10021,Adventure Stun Rune,202,20,500,0,6000 +10021,Adventure Stun Rune,203,20,500,0,6000 +10021,Adventure Stun Rune,204,20,500,0,6000 +10021,Adventure Stun Rune,205,20,500,0,6000 +10021,Adventure Stun Rune,206,20,500,0,6000 +10021,Adventure Stun Rune,207,20,500,0,6000 +10021,Adventure Stun Rune,208,20,500,0,6000 +10021,Adventure Stun Rune,209,20,500,0,6000 +10021,Adventure Stun Rune,210,20,500,0,6000 +10021,Adventure Stun Rune,211,20,500,10,10000 +10021,Adventure Stun Rune,212,20,500,0,6000 +10021,Adventure Stun Rune,213,20,500,0,6000 +10021,Adventure Stun Rune,214,20,500,0,6000 +10021,Adventure Stun Rune,215,20,500,0,6000 +10021,Adventure Stun Rune,216,20,500,0,6000 +10021,Adventure Stun Rune,217,20,500,0,6000 +10021,Adventure Stun Rune,218,20,500,0,6000 +10021,Adventure Stun Rune,219,20,500,0,6000 +10021,Adventure Stun Rune,220,20,500,0,6000 +10021,Adventure Stun Rune,221,20,500,10,10000 +10021,Adventure Stun Rune,222,20,500,0,6000 +10021,Adventure Stun Rune,223,20,500,0,6000 +10021,Adventure Stun Rune,224,20,500,0,6000 +10021,Adventure Stun Rune,225,20,500,0,6000 +10021,Adventure Stun Rune,226,20,500,0,6000 +10021,Adventure Stun Rune,227,20,500,0,6000 +10021,Adventure Stun Rune,228,20,500,0,6000 +10021,Adventure Stun Rune,229,20,500,0,6000 +10021,Adventure Stun Rune,230,20,500,0,6000 +10021,Adventure Stun Rune,231,20,500,10,10000 +10021,Adventure Stun Rune,232,20,500,0,6000 +10021,Adventure Stun Rune,233,20,500,0,6000 +10021,Adventure Stun Rune,234,20,500,0,6000 +10021,Adventure Stun Rune,235,20,500,0,6000 +10021,Adventure Stun Rune,236,20,500,0,6000 +10021,Adventure Stun Rune,237,20,500,0,6000 +10021,Adventure Stun Rune,238,20,500,0,6000 +10021,Adventure Stun Rune,239,20,500,0,6000 +10021,Adventure Stun Rune,240,20,500,0,6000 +10021,Adventure Stun Rune,241,20,500,10,10000 +10021,Adventure Stun Rune,242,20,500,0,6000 +10021,Adventure Stun Rune,243,20,500,0,6000 +10021,Adventure Stun Rune,244,20,500,0,6000 +10021,Adventure Stun Rune,245,20,500,0,6000 +10021,Adventure Stun Rune,246,20,500,0,6000 +10021,Adventure Stun Rune,247,20,500,0,6000 +10021,Adventure Stun Rune,248,20,500,0,6000 +10021,Adventure Stun Rune,249,20,500,0,6000 +10021,Adventure Stun Rune,250,20,500,0,6000 +10021,Adventure Stun Rune,251,20,500,10,10000 +10021,Adventure Stun Rune,252,20,500,0,6000 +10021,Adventure Stun Rune,253,20,500,0,6000 +10021,Adventure Stun Rune,254,20,500,0,6000 +10021,Adventure Stun Rune,255,20,500,0,6000 +10021,Adventure Stun Rune,256,20,500,0,6000 +10021,Adventure Stun Rune,257,20,500,0,6000 +10021,Adventure Stun Rune,258,20,500,0,6000 +10021,Adventure Stun Rune,259,20,500,0,6000 +10021,Adventure Stun Rune,260,20,500,0,6000 +10021,Adventure Stun Rune,261,20,500,10,10000 +10021,Adventure Stun Rune,262,20,500,0,6000 +10021,Adventure Stun Rune,263,20,500,0,6000 +10021,Adventure Stun Rune,264,20,500,0,6000 +10021,Adventure Stun Rune,265,20,500,0,6000 +10021,Adventure Stun Rune,266,20,500,0,6000 +10021,Adventure Stun Rune,267,20,500,0,6000 +10021,Adventure Stun Rune,268,20,500,0,6000 +10021,Adventure Stun Rune,269,20,500,0,6000 +10021,Adventure Stun Rune,270,20,500,0,6000 +10021,Adventure Stun Rune,271,20,500,10,10000 +10021,Adventure Stun Rune,272,20,500,0,6000 +10021,Adventure Stun Rune,273,20,500,0,6000 +10021,Adventure Stun Rune,274,20,500,0,6000 +10021,Adventure Stun Rune,275,20,500,0,6000 +10021,Adventure Stun Rune,276,20,500,0,6000 +10021,Adventure Stun Rune,277,20,500,0,6000 +10021,Adventure Stun Rune,278,20,500,0,6000 +10021,Adventure Stun Rune,279,20,500,0,6000 +10021,Adventure Stun Rune,280,20,500,0,6000 +10021,Adventure Stun Rune,281,20,500,10,10000 +10021,Adventure Stun Rune,282,20,500,0,6000 +10021,Adventure Stun Rune,283,20,500,0,6000 +10021,Adventure Stun Rune,284,20,500,0,6000 +10021,Adventure Stun Rune,285,20,500,0,6000 +10021,Adventure Stun Rune,286,20,500,0,6000 +10021,Adventure Stun Rune,287,20,500,0,6000 +10021,Adventure Stun Rune,288,20,500,0,6000 +10021,Adventure Stun Rune,289,20,500,0,6000 +10021,Adventure Stun Rune,290,20,500,0,6000 +10021,Adventure Stun Rune,291,20,500,10,10000 +10021,Adventure Stun Rune,292,20,500,0,6000 +10021,Adventure Stun Rune,293,20,500,0,6000 +10021,Adventure Stun Rune,294,20,500,0,6000 +10021,Adventure Stun Rune,295,20,500,0,6000 +10021,Adventure Stun Rune,296,20,500,0,6000 +10021,Adventure Stun Rune,297,20,500,0,6000 +10021,Adventure Stun Rune,298,20,500,0,6000 +10021,Adventure Stun Rune,299,20,500,0,6000 +10021,Adventure Stun Rune,300,20,500,0,6000 +10022,Arena Stun Rune,1,100,2000,0,10000 +10022,Arena Stun Rune,2,10,2000,0,8000 +10022,Arena Stun Rune,3,10,2000,0,6000 +10022,Arena Stun Rune,4,10,2000,0,10000 +10022,Arena Stun Rune,5,10,2000,0,8000 +10022,Arena Stun Rune,6,10,2000,0,6000 +10022,Arena Stun Rune,7,10,2000,0,10000 +10022,Arena Stun Rune,8,10,2000,0,8000 +10022,Arena Stun Rune,9,10,2000,0,6000 +10022,Arena Stun Rune,10,100,2000,0,5000 +10022,Arena Stun Rune,11,10,2000,0,8000 +10022,Arena Stun Rune,12,10,2000,0,8000 +10022,Arena Stun Rune,13,10,2000,0,6000 +10022,Arena Stun Rune,14,10,2000,0,10000 +10022,Arena Stun Rune,15,10,2000,0,8000 +10022,Arena Stun Rune,16,10,2000,0,6000 +10022,Arena Stun Rune,17,10,2000,0,10000 +10022,Arena Stun Rune,18,10,2000,0,8000 +10022,Arena Stun Rune,19,10,2000,0,6000 +10022,Arena Stun Rune,20,100,2000,0,5000 +10022,Arena Stun Rune,21,10,2000,0,8000 +10022,Arena Stun Rune,22,10,2000,0,8000 +10022,Arena Stun Rune,23,10,2000,0,6000 +10022,Arena Stun Rune,24,10,2000,0,10000 +10022,Arena Stun Rune,25,10,2000,0,8000 +10022,Arena Stun Rune,26,10,2000,0,6000 +10022,Arena Stun Rune,27,10,2000,0,10000 +10022,Arena Stun Rune,28,10,2000,0,8000 +10022,Arena Stun Rune,29,10,2000,0,6000 +10022,Arena Stun Rune,30,100,2000,0,5000 +10022,Arena Stun Rune,31,30,10000,0,8000 +10022,Arena Stun Rune,32,30,10000,0,8000 +10022,Arena Stun Rune,33,30,10000,0,6000 +10022,Arena Stun Rune,34,30,10000,0,10000 +10022,Arena Stun Rune,35,30,10000,0,8000 +10022,Arena Stun Rune,36,30,10000,0,6000 +10022,Arena Stun Rune,37,30,10000,0,10000 +10022,Arena Stun Rune,38,30,10000,0,8000 +10022,Arena Stun Rune,39,30,10000,0,6000 +10022,Arena Stun Rune,40,300,10000,0,5000 +10022,Arena Stun Rune,41,30,10000,0,8000 +10022,Arena Stun Rune,42,30,10000,0,8000 +10022,Arena Stun Rune,43,30,10000,0,6000 +10022,Arena Stun Rune,44,30,10000,0,10000 +10022,Arena Stun Rune,45,30,10000,0,8000 +10022,Arena Stun Rune,46,30,10000,0,6000 +10022,Arena Stun Rune,47,30,10000,0,10000 +10022,Arena Stun Rune,48,30,10000,0,8000 +10022,Arena Stun Rune,49,30,10000,0,6000 +10022,Arena Stun Rune,50,300,10000,0,5000 +10022,Arena Stun Rune,51,30,10000,20,8000 +10022,Arena Stun Rune,52,30,10000,0,8000 +10022,Arena Stun Rune,53,30,10000,0,6000 +10022,Arena Stun Rune,54,30,10000,0,10000 +10022,Arena Stun Rune,55,30,10000,0,8000 +10022,Arena Stun Rune,56,30,10000,0,6000 +10022,Arena Stun Rune,57,30,10000,0,10000 +10022,Arena Stun Rune,58,30,10000,0,8000 +10022,Arena Stun Rune,59,30,10000,0,6000 +10022,Arena Stun Rune,60,300,10000,0,5000 +10022,Arena Stun Rune,61,30,10000,20,8000 +10022,Arena Stun Rune,62,30,10000,0,8000 +10022,Arena Stun Rune,63,30,10000,0,6000 +10022,Arena Stun Rune,64,30,10000,0,10000 +10022,Arena Stun Rune,65,30,10000,0,8000 +10022,Arena Stun Rune,66,30,10000,0,6000 +10022,Arena Stun Rune,67,30,10000,0,10000 +10022,Arena Stun Rune,68,30,10000,0,8000 +10022,Arena Stun Rune,69,30,10000,0,6000 +10022,Arena Stun Rune,70,300,10000,0,5000 +10022,Arena Stun Rune,71,60,50000,20,8000 +10022,Arena Stun Rune,72,60,50000,0,9000 +10022,Arena Stun Rune,73,60,50000,0,8000 +10022,Arena Stun Rune,74,60,50000,0,7000 +10022,Arena Stun Rune,75,60,50000,0,6000 +10022,Arena Stun Rune,76,60,50000,0,5000 +10022,Arena Stun Rune,77,60,50000,0,4000 +10022,Arena Stun Rune,78,60,50000,0,3000 +10022,Arena Stun Rune,79,60,50000,0,2000 +10022,Arena Stun Rune,80,300,50000,0,1000 +10022,Arena Stun Rune,81,60,50000,20,8000 +10022,Arena Stun Rune,82,60,50000,0,9000 +10022,Arena Stun Rune,83,60,50000,0,8000 +10022,Arena Stun Rune,84,60,50000,0,7000 +10022,Arena Stun Rune,85,60,50000,0,6000 +10022,Arena Stun Rune,86,60,50000,0,5000 +10022,Arena Stun Rune,87,60,50000,0,4000 +10022,Arena Stun Rune,88,60,50000,0,3000 +10022,Arena Stun Rune,89,60,50000,0,2000 +10022,Arena Stun Rune,90,300,50000,0,1000 +10022,Arena Stun Rune,91,60,50000,50,8000 +10022,Arena Stun Rune,92,60,50000,0,9000 +10022,Arena Stun Rune,93,60,50000,0,8000 +10022,Arena Stun Rune,94,60,50000,0,7000 +10022,Arena Stun Rune,95,60,50000,0,6000 +10022,Arena Stun Rune,96,60,50000,0,5000 +10022,Arena Stun Rune,97,60,50000,0,4000 +10022,Arena Stun Rune,98,60,50000,0,3000 +10022,Arena Stun Rune,99,60,50000,0,2000 +10022,Arena Stun Rune,100,300,50000,0,1000 +10022,Arena Stun Rune,101,60,50000,50,8000 +10022,Arena Stun Rune,102,60,50000,0,9000 +10022,Arena Stun Rune,103,60,50000,0,8000 +10022,Arena Stun Rune,104,60,50000,0,7000 +10022,Arena Stun Rune,105,60,50000,0,6000 +10022,Arena Stun Rune,106,60,50000,0,5000 +10022,Arena Stun Rune,107,60,50000,0,4000 +10022,Arena Stun Rune,108,60,50000,0,3000 +10022,Arena Stun Rune,109,60,50000,0,2000 +10022,Arena Stun Rune,110,300,50000,0,1000 +10022,Arena Stun Rune,111,60,50000,50,8000 +10022,Arena Stun Rune,112,60,50000,0,9000 +10022,Arena Stun Rune,113,60,50000,0,8000 +10022,Arena Stun Rune,114,60,50000,0,7000 +10022,Arena Stun Rune,115,60,50000,0,6000 +10022,Arena Stun Rune,116,60,50000,0,5000 +10022,Arena Stun Rune,117,60,50000,0,4000 +10022,Arena Stun Rune,118,60,50000,0,3000 +10022,Arena Stun Rune,119,60,50000,0,2000 +10022,Arena Stun Rune,120,300,50000,0,1000 +10022,Arena Stun Rune,121,60,50000,50,8000 +10022,Arena Stun Rune,122,60,50000,0,9000 +10022,Arena Stun Rune,123,60,50000,0,8000 +10022,Arena Stun Rune,124,60,50000,0,7000 +10022,Arena Stun Rune,125,60,50000,0,6000 +10022,Arena Stun Rune,126,60,200000,0,5000 +10022,Arena Stun Rune,127,60,200000,0,4000 +10022,Arena Stun Rune,128,60,200000,0,3000 +10022,Arena Stun Rune,129,60,200000,0,2000 +10022,Arena Stun Rune,130,300,200000,0,1000 +10022,Arena Stun Rune,131,80,200000,50,8000 +10022,Arena Stun Rune,132,80,200000,0,8000 +10022,Arena Stun Rune,133,80,200000,0,6000 +10022,Arena Stun Rune,134,80,200000,0,4000 +10022,Arena Stun Rune,135,400,200000,0,1000 +10022,Arena Stun Rune,136,80,200000,0,10000 +10022,Arena Stun Rune,137,80,200000,0,8000 +10022,Arena Stun Rune,138,80,200000,0,6000 +10022,Arena Stun Rune,139,80,200000,0,4000 +10022,Arena Stun Rune,140,400,200000,0,1000 +10022,Arena Stun Rune,141,80,200000,50,10000 +10022,Arena Stun Rune,142,80,200000,0,9000 +10022,Arena Stun Rune,143,80,200000,0,8000 +10022,Arena Stun Rune,144,80,200000,0,7000 +10022,Arena Stun Rune,145,80,200000,0,6000 +10022,Arena Stun Rune,146,80,200000,0,5000 +10022,Arena Stun Rune,147,80,200000,0,4000 +10022,Arena Stun Rune,148,80,200000,0,3000 +10022,Arena Stun Rune,149,80,200000,0,2000 +10022,Arena Stun Rune,150,400,200000,0,1000 +10022,Arena Stun Rune,151,80,200000,50,10000 +10022,Arena Stun Rune,152,80,200000,0,9000 +10022,Arena Stun Rune,153,80,200000,0,8000 +10022,Arena Stun Rune,154,80,200000,0,7000 +10022,Arena Stun Rune,155,80,200000,0,6000 +10022,Arena Stun Rune,156,80,200000,0,5000 +10022,Arena Stun Rune,157,80,200000,0,4000 +10022,Arena Stun Rune,158,80,200000,0,3000 +10022,Arena Stun Rune,159,80,200000,0,2000 +10022,Arena Stun Rune,160,400,200000,0,1000 +10022,Arena Stun Rune,161,80,200000,50,10000 +10022,Arena Stun Rune,162,80,200000,0,9000 +10022,Arena Stun Rune,163,80,200000,0,8000 +10022,Arena Stun Rune,164,80,200000,0,7000 +10022,Arena Stun Rune,165,80,200000,0,6000 +10022,Arena Stun Rune,166,80,200000,0,5000 +10022,Arena Stun Rune,167,80,200000,0,4000 +10022,Arena Stun Rune,168,80,200000,0,3000 +10022,Arena Stun Rune,169,80,200000,0,2000 +10022,Arena Stun Rune,170,400,200000,0,1000 +10022,Arena Stun Rune,171,80,200000,50,10000 +10022,Arena Stun Rune,172,80,200000,0,9000 +10022,Arena Stun Rune,173,80,200000,0,8000 +10022,Arena Stun Rune,174,80,200000,0,7000 +10022,Arena Stun Rune,175,80,200000,0,6000 +10022,Arena Stun Rune,176,80,200000,0,5000 +10022,Arena Stun Rune,177,80,200000,0,4000 +10022,Arena Stun Rune,178,80,200000,0,3000 +10022,Arena Stun Rune,179,80,200000,0,2000 +10022,Arena Stun Rune,180,400,200000,0,1000 +10022,Arena Stun Rune,181,80,200000,100,10000 +10022,Arena Stun Rune,182,80,200000,0,9000 +10022,Arena Stun Rune,183,80,200000,0,8000 +10022,Arena Stun Rune,184,80,200000,0,7000 +10022,Arena Stun Rune,185,80,200000,0,6000 +10022,Arena Stun Rune,186,80,200000,0,5000 +10022,Arena Stun Rune,187,80,200000,0,4000 +10022,Arena Stun Rune,188,80,200000,0,3000 +10022,Arena Stun Rune,189,80,200000,0,2000 +10022,Arena Stun Rune,190,400,200000,0,1000 +10022,Arena Stun Rune,191,80,200000,100,10000 +10022,Arena Stun Rune,192,80,200000,0,9000 +10022,Arena Stun Rune,193,80,200000,0,8000 +10022,Arena Stun Rune,194,80,200000,0,7000 +10022,Arena Stun Rune,195,80,200000,0,6000 +10022,Arena Stun Rune,196,80,200000,0,5000 +10022,Arena Stun Rune,197,80,200000,0,4000 +10022,Arena Stun Rune,198,80,200000,0,3000 +10022,Arena Stun Rune,199,80,200000,0,2000 +10022,Arena Stun Rune,200,400,200000,0,1000 +10022,Arena Stun Rune,201,100,500000,100,10000 +10022,Arena Stun Rune,202,100,500000,0,9000 +10022,Arena Stun Rune,203,100,500000,0,8000 +10022,Arena Stun Rune,204,100,500000,0,7000 +10022,Arena Stun Rune,205,100,500000,0,6000 +10022,Arena Stun Rune,206,100,500000,0,5000 +10022,Arena Stun Rune,207,100,500000,0,4000 +10022,Arena Stun Rune,208,100,500000,0,3000 +10022,Arena Stun Rune,209,100,500000,0,2000 +10022,Arena Stun Rune,210,800,500000,0,1000 +10022,Arena Stun Rune,211,100,500000,100,10000 +10022,Arena Stun Rune,212,100,500000,0,9000 +10022,Arena Stun Rune,213,100,500000,0,8000 +10022,Arena Stun Rune,214,100,500000,0,7000 +10022,Arena Stun Rune,215,100,500000,0,6000 +10022,Arena Stun Rune,216,100,500000,0,5000 +10022,Arena Stun Rune,217,100,500000,0,4000 +10022,Arena Stun Rune,218,100,500000,0,3000 +10022,Arena Stun Rune,219,100,500000,0,2000 +10022,Arena Stun Rune,220,800,500000,0,1000 +10022,Arena Stun Rune,221,100,500000,100,10000 +10022,Arena Stun Rune,222,100,500000,0,9000 +10022,Arena Stun Rune,223,100,500000,0,8000 +10022,Arena Stun Rune,224,100,500000,0,7000 +10022,Arena Stun Rune,225,100,500000,0,6000 +10022,Arena Stun Rune,226,100,500000,0,5000 +10022,Arena Stun Rune,227,100,500000,0,4000 +10022,Arena Stun Rune,228,100,500000,0,3000 +10022,Arena Stun Rune,229,100,500000,0,2000 +10022,Arena Stun Rune,230,800,500000,0,1000 +10022,Arena Stun Rune,231,100,500000,100,10000 +10022,Arena Stun Rune,232,100,500000,0,9000 +10022,Arena Stun Rune,233,100,500000,0,8000 +10022,Arena Stun Rune,234,100,500000,0,7000 +10022,Arena Stun Rune,235,100,500000,0,6000 +10022,Arena Stun Rune,236,100,500000,0,5000 +10022,Arena Stun Rune,237,100,500000,0,4000 +10022,Arena Stun Rune,238,100,500000,0,3000 +10022,Arena Stun Rune,239,100,500000,0,2000 +10022,Arena Stun Rune,240,800,500000,0,1000 +10022,Arena Stun Rune,241,100,500000,100,10000 +10022,Arena Stun Rune,242,100,500000,0,9000 +10022,Arena Stun Rune,243,100,500000,0,8000 +10022,Arena Stun Rune,244,100,500000,0,7000 +10022,Arena Stun Rune,245,100,500000,0,6000 +10022,Arena Stun Rune,246,100,500000,0,5000 +10022,Arena Stun Rune,247,100,500000,0,4000 +10022,Arena Stun Rune,248,100,500000,0,3000 +10022,Arena Stun Rune,249,100,500000,0,2000 +10022,Arena Stun Rune,250,800,500000,0,1000 +10022,Arena Stun Rune,251,100,1000000,200,10000 +10022,Arena Stun Rune,252,100,1000000,0,9000 +10022,Arena Stun Rune,253,100,1000000,0,8000 +10022,Arena Stun Rune,254,100,1000000,0,7000 +10022,Arena Stun Rune,255,100,1000000,0,6000 +10022,Arena Stun Rune,256,100,1000000,0,5000 +10022,Arena Stun Rune,257,100,1000000,0,4000 +10022,Arena Stun Rune,258,100,1000000,0,3000 +10022,Arena Stun Rune,259,100,1000000,0,2000 +10022,Arena Stun Rune,260,800,1000000,0,1000 +10022,Arena Stun Rune,261,100,1000000,200,10000 +10022,Arena Stun Rune,262,100,1000000,0,9000 +10022,Arena Stun Rune,263,100,1000000,0,8000 +10022,Arena Stun Rune,264,100,1000000,0,7000 +10022,Arena Stun Rune,265,100,1000000,0,6000 +10022,Arena Stun Rune,266,100,1000000,0,5000 +10022,Arena Stun Rune,267,100,1000000,0,4000 +10022,Arena Stun Rune,268,100,1000000,0,3000 +10022,Arena Stun Rune,269,100,1000000,0,2000 +10022,Arena Stun Rune,270,800,1000000,0,1000 +10022,Arena Stun Rune,271,100,1000000,200,10000 +10022,Arena Stun Rune,272,100,1000000,0,9000 +10022,Arena Stun Rune,273,100,1000000,0,8000 +10022,Arena Stun Rune,274,100,1000000,0,7000 +10022,Arena Stun Rune,275,100,1000000,0,6000 +10022,Arena Stun Rune,276,100,1000000,0,5000 +10022,Arena Stun Rune,277,100,1000000,0,4000 +10022,Arena Stun Rune,278,100,1000000,0,3000 +10022,Arena Stun Rune,279,100,1000000,0,2000 +10022,Arena Stun Rune,280,800,1000000,0,1000 +10022,Arena Stun Rune,281,100,1000000,200,10000 +10022,Arena Stun Rune,282,100,1000000,0,9000 +10022,Arena Stun Rune,283,100,1000000,0,8000 +10022,Arena Stun Rune,284,100,1000000,0,7000 +10022,Arena Stun Rune,285,100,1000000,0,6000 +10022,Arena Stun Rune,286,100,1000000,0,5000 +10022,Arena Stun Rune,287,100,1000000,0,4000 +10022,Arena Stun Rune,288,100,1000000,0,3000 +10022,Arena Stun Rune,289,100,1000000,0,2000 +10022,Arena Stun Rune,290,800,1000000,0,1000 +10022,Arena Stun Rune,291,100,1000000,200,10000 +10022,Arena Stun Rune,292,100,1000000,0,9000 +10022,Arena Stun Rune,293,100,1000000,0,8000 +10022,Arena Stun Rune,294,100,1000000,0,7000 +10022,Arena Stun Rune,295,100,1000000,0,6000 +10022,Arena Stun Rune,296,100,1000000,0,5000 +10022,Arena Stun Rune,297,100,1000000,0,4000 +10022,Arena Stun Rune,298,100,1000000,0,3000 +10022,Arena Stun Rune,299,100,1000000,0,2000 +10022,Arena Stun Rune,300,800,1000000,0,1000 +10023,Adventure Vampiric Rune,1,50,5000,0,10000 +10023,Adventure Vampiric Rune,2,5,5000,0,8000 +10023,Adventure Vampiric Rune,3,5,5000,0,6000 +10023,Adventure Vampiric Rune,4,5,5000,0,10000 +10023,Adventure Vampiric Rune,5,5,5000,0,8000 +10023,Adventure Vampiric Rune,6,5,5000,0,6000 +10023,Adventure Vampiric Rune,7,5,5000,0,10000 +10023,Adventure Vampiric Rune,8,5,5000,0,8000 +10023,Adventure Vampiric Rune,9,5,5000,0,6000 +10023,Adventure Vampiric Rune,10,50,50000,0,5000 +10023,Adventure Vampiric Rune,11,5,5000,0,8000 +10023,Adventure Vampiric Rune,12,5,5000,0,8000 +10023,Adventure Vampiric Rune,13,5,5000,0,6000 +10023,Adventure Vampiric Rune,14,5,5000,0,10000 +10023,Adventure Vampiric Rune,15,5,5000,0,8000 +10023,Adventure Vampiric Rune,16,5,5000,0,6000 +10023,Adventure Vampiric Rune,17,5,5000,0,10000 +10023,Adventure Vampiric Rune,18,5,5000,0,8000 +10023,Adventure Vampiric Rune,19,5,5000,0,6000 +10023,Adventure Vampiric Rune,20,50,50000,0,5000 +10023,Adventure Vampiric Rune,21,5,5000,0,8000 +10023,Adventure Vampiric Rune,22,5,5000,0,8000 +10023,Adventure Vampiric Rune,23,5,5000,0,6000 +10023,Adventure Vampiric Rune,24,5,5000,0,10000 +10023,Adventure Vampiric Rune,25,5,5000,0,8000 +10023,Adventure Vampiric Rune,26,5,5000,0,6000 +10023,Adventure Vampiric Rune,27,5,5000,0,10000 +10023,Adventure Vampiric Rune,28,5,5000,0,8000 +10023,Adventure Vampiric Rune,29,5,5000,0,6000 +10023,Adventure Vampiric Rune,30,50,50000,0,5000 +10023,Adventure Vampiric Rune,31,10,20000,0,8000 +10023,Adventure Vampiric Rune,32,10,20000,0,8000 +10023,Adventure Vampiric Rune,33,10,20000,0,6000 +10023,Adventure Vampiric Rune,34,10,20000,0,10000 +10023,Adventure Vampiric Rune,35,10,20000,0,8000 +10023,Adventure Vampiric Rune,36,10,20000,0,6000 +10023,Adventure Vampiric Rune,37,10,20000,0,10000 +10023,Adventure Vampiric Rune,38,10,20000,0,8000 +10023,Adventure Vampiric Rune,39,10,20000,0,6000 +10023,Adventure Vampiric Rune,40,100,100000,0,5000 +10023,Adventure Vampiric Rune,41,10,20000,0,8000 +10023,Adventure Vampiric Rune,42,10,20000,0,8000 +10023,Adventure Vampiric Rune,43,10,20000,0,6000 +10023,Adventure Vampiric Rune,44,10,20000,0,10000 +10023,Adventure Vampiric Rune,45,10,20000,0,8000 +10023,Adventure Vampiric Rune,46,10,20000,0,6000 +10023,Adventure Vampiric Rune,47,10,20000,0,10000 +10023,Adventure Vampiric Rune,48,10,20000,0,8000 +10023,Adventure Vampiric Rune,49,10,20000,0,6000 +10023,Adventure Vampiric Rune,50,100,100000,0,5000 +10023,Adventure Vampiric Rune,51,15,20000,60,8000 +10023,Adventure Vampiric Rune,52,15,20000,0,8000 +10023,Adventure Vampiric Rune,53,15,20000,0,6000 +10023,Adventure Vampiric Rune,54,15,20000,0,10000 +10023,Adventure Vampiric Rune,55,15,20000,0,8000 +10023,Adventure Vampiric Rune,56,15,20000,0,6000 +10023,Adventure Vampiric Rune,57,15,20000,0,10000 +10023,Adventure Vampiric Rune,58,15,20000,0,8000 +10023,Adventure Vampiric Rune,59,15,20000,0,6000 +10023,Adventure Vampiric Rune,60,150,100000,0,5000 +10023,Adventure Vampiric Rune,61,15,20000,60,8000 +10023,Adventure Vampiric Rune,62,15,20000,0,8000 +10023,Adventure Vampiric Rune,63,15,20000,0,6000 +10023,Adventure Vampiric Rune,64,15,20000,0,10000 +10023,Adventure Vampiric Rune,65,15,20000,0,8000 +10023,Adventure Vampiric Rune,66,15,20000,0,6000 +10023,Adventure Vampiric Rune,67,15,20000,0,10000 +10023,Adventure Vampiric Rune,68,15,20000,0,8000 +10023,Adventure Vampiric Rune,69,15,20000,0,6000 +10023,Adventure Vampiric Rune,70,150,100000,0,5000 +10023,Adventure Vampiric Rune,71,20,50000,60,8000 +10023,Adventure Vampiric Rune,72,20,50000,0,9000 +10023,Adventure Vampiric Rune,73,20,50000,0,8000 +10023,Adventure Vampiric Rune,74,20,50000,0,7000 +10023,Adventure Vampiric Rune,75,20,50000,0,6000 +10023,Adventure Vampiric Rune,76,20,50000,0,5000 +10023,Adventure Vampiric Rune,77,20,50000,0,4000 +10023,Adventure Vampiric Rune,78,20,50000,0,3000 +10023,Adventure Vampiric Rune,79,20,50000,0,2000 +10023,Adventure Vampiric Rune,80,150,300000,0,1000 +10023,Adventure Vampiric Rune,81,20,50000,60,8000 +10023,Adventure Vampiric Rune,82,20,50000,0,9000 +10023,Adventure Vampiric Rune,83,20,50000,0,8000 +10023,Adventure Vampiric Rune,84,20,50000,0,7000 +10023,Adventure Vampiric Rune,85,20,50000,0,6000 +10023,Adventure Vampiric Rune,86,20,50000,0,5000 +10023,Adventure Vampiric Rune,87,20,50000,0,4000 +10023,Adventure Vampiric Rune,88,20,50000,0,3000 +10023,Adventure Vampiric Rune,89,20,50000,0,2000 +10023,Adventure Vampiric Rune,90,150,300000,0,1000 +10023,Adventure Vampiric Rune,91,20,50000,150,8000 +10023,Adventure Vampiric Rune,92,20,50000,0,9000 +10023,Adventure Vampiric Rune,93,20,50000,0,8000 +10023,Adventure Vampiric Rune,94,20,50000,0,7000 +10023,Adventure Vampiric Rune,95,20,50000,0,6000 +10023,Adventure Vampiric Rune,96,20,50000,0,5000 +10023,Adventure Vampiric Rune,97,20,50000,0,4000 +10023,Adventure Vampiric Rune,98,20,50000,0,3000 +10023,Adventure Vampiric Rune,99,20,50000,0,2000 +10023,Adventure Vampiric Rune,100,150,300000,0,1000 +10023,Adventure Vampiric Rune,101,30,50000,150,8000 +10023,Adventure Vampiric Rune,102,30,50000,0,9000 +10023,Adventure Vampiric Rune,103,30,50000,0,8000 +10023,Adventure Vampiric Rune,104,30,50000,0,7000 +10023,Adventure Vampiric Rune,105,30,50000,0,6000 +10023,Adventure Vampiric Rune,106,30,50000,0,5000 +10023,Adventure Vampiric Rune,107,30,50000,0,4000 +10023,Adventure Vampiric Rune,108,30,50000,0,3000 +10023,Adventure Vampiric Rune,109,30,50000,0,2000 +10023,Adventure Vampiric Rune,110,150,300000,0,1000 +10023,Adventure Vampiric Rune,111,30,50000,150,8000 +10023,Adventure Vampiric Rune,112,30,50000,0,9000 +10023,Adventure Vampiric Rune,113,30,50000,0,8000 +10023,Adventure Vampiric Rune,114,30,50000,0,7000 +10023,Adventure Vampiric Rune,115,30,50000,0,6000 +10023,Adventure Vampiric Rune,116,30,50000,0,5000 +10023,Adventure Vampiric Rune,117,30,50000,0,4000 +10023,Adventure Vampiric Rune,118,30,50000,0,3000 +10023,Adventure Vampiric Rune,119,30,50000,0,2000 +10023,Adventure Vampiric Rune,120,150,300000,0,1000 +10023,Adventure Vampiric Rune,121,30,50000,150,8000 +10023,Adventure Vampiric Rune,122,30,50000,0,9000 +10023,Adventure Vampiric Rune,123,30,50000,0,8000 +10023,Adventure Vampiric Rune,124,30,50000,0,7000 +10023,Adventure Vampiric Rune,125,30,50000,0,6000 +10023,Adventure Vampiric Rune,126,30,50000,0,5000 +10023,Adventure Vampiric Rune,127,30,50000,0,4000 +10023,Adventure Vampiric Rune,128,30,50000,0,3000 +10023,Adventure Vampiric Rune,129,30,50000,0,2000 +10023,Adventure Vampiric Rune,130,150,300000,0,1000 +10023,Adventure Vampiric Rune,131,40,300000,150,8000 +10023,Adventure Vampiric Rune,132,40,300000,0,8000 +10023,Adventure Vampiric Rune,133,40,300000,0,6000 +10023,Adventure Vampiric Rune,134,40,300000,0,4000 +10023,Adventure Vampiric Rune,135,200,1000000,0,1000 +10023,Adventure Vampiric Rune,136,40,300000,0,10000 +10023,Adventure Vampiric Rune,137,40,300000,0,8000 +10023,Adventure Vampiric Rune,138,40,300000,0,6000 +10023,Adventure Vampiric Rune,139,40,300000,0,4000 +10023,Adventure Vampiric Rune,140,200,1000000,0,1000 +10023,Adventure Vampiric Rune,141,40,300000,150,10000 +10023,Adventure Vampiric Rune,142,40,300000,0,9000 +10023,Adventure Vampiric Rune,143,40,300000,0,8000 +10023,Adventure Vampiric Rune,144,40,300000,0,7000 +10023,Adventure Vampiric Rune,145,40,300000,0,6000 +10023,Adventure Vampiric Rune,146,40,300000,0,5000 +10023,Adventure Vampiric Rune,147,40,300000,0,4000 +10023,Adventure Vampiric Rune,148,40,300000,0,3000 +10023,Adventure Vampiric Rune,149,40,300000,0,2000 +10023,Adventure Vampiric Rune,150,200,1000000,0,1000 +10023,Adventure Vampiric Rune,151,40,300000,150,10000 +10023,Adventure Vampiric Rune,152,40,300000,0,9000 +10023,Adventure Vampiric Rune,153,40,300000,0,8000 +10023,Adventure Vampiric Rune,154,40,300000,0,7000 +10023,Adventure Vampiric Rune,155,40,300000,0,6000 +10023,Adventure Vampiric Rune,156,40,300000,0,5000 +10023,Adventure Vampiric Rune,157,40,300000,0,4000 +10023,Adventure Vampiric Rune,158,40,300000,0,3000 +10023,Adventure Vampiric Rune,159,40,300000,0,2000 +10023,Adventure Vampiric Rune,160,200,1000000,0,1000 +10023,Adventure Vampiric Rune,161,40,300000,150,10000 +10023,Adventure Vampiric Rune,162,40,300000,0,9000 +10023,Adventure Vampiric Rune,163,40,300000,0,8000 +10023,Adventure Vampiric Rune,164,40,300000,0,7000 +10023,Adventure Vampiric Rune,165,40,300000,0,6000 +10023,Adventure Vampiric Rune,166,40,300000,0,5000 +10023,Adventure Vampiric Rune,167,40,300000,0,4000 +10023,Adventure Vampiric Rune,168,40,300000,0,3000 +10023,Adventure Vampiric Rune,169,40,300000,0,2000 +10023,Adventure Vampiric Rune,170,200,1000000,0,1000 +10023,Adventure Vampiric Rune,171,40,300000,150,10000 +10023,Adventure Vampiric Rune,172,40,300000,0,9000 +10023,Adventure Vampiric Rune,173,40,300000,0,8000 +10023,Adventure Vampiric Rune,174,40,300000,0,7000 +10023,Adventure Vampiric Rune,175,40,300000,0,6000 +10023,Adventure Vampiric Rune,176,40,300000,0,5000 +10023,Adventure Vampiric Rune,177,40,300000,0,4000 +10023,Adventure Vampiric Rune,178,40,300000,0,3000 +10023,Adventure Vampiric Rune,179,40,300000,0,2000 +10023,Adventure Vampiric Rune,180,200,1000000,0,1000 +10023,Adventure Vampiric Rune,181,40,300000,300,10000 +10023,Adventure Vampiric Rune,182,40,300000,0,9000 +10023,Adventure Vampiric Rune,183,40,300000,0,8000 +10023,Adventure Vampiric Rune,184,40,300000,0,7000 +10023,Adventure Vampiric Rune,185,40,300000,0,6000 +10023,Adventure Vampiric Rune,186,40,300000,0,5000 +10023,Adventure Vampiric Rune,187,40,300000,0,4000 +10023,Adventure Vampiric Rune,188,40,300000,0,3000 +10023,Adventure Vampiric Rune,189,40,300000,0,2000 +10023,Adventure Vampiric Rune,190,200,1000000,0,1000 +10023,Adventure Vampiric Rune,191,40,300000,300,10000 +10023,Adventure Vampiric Rune,192,40,300000,0,9000 +10023,Adventure Vampiric Rune,193,40,300000,0,8000 +10023,Adventure Vampiric Rune,194,40,300000,0,7000 +10023,Adventure Vampiric Rune,195,40,300000,0,6000 +10023,Adventure Vampiric Rune,196,40,300000,0,5000 +10023,Adventure Vampiric Rune,197,40,300000,0,4000 +10023,Adventure Vampiric Rune,198,40,300000,0,3000 +10023,Adventure Vampiric Rune,199,40,300000,0,2000 +10023,Adventure Vampiric Rune,200,200,1000000,0,1000 +10023,Adventure Vampiric Rune,201,50,500000,300,10000 +10023,Adventure Vampiric Rune,202,50,500000,0,9000 +10023,Adventure Vampiric Rune,203,50,500000,0,8000 +10023,Adventure Vampiric Rune,204,50,500000,0,7000 +10023,Adventure Vampiric Rune,205,50,500000,0,6000 +10023,Adventure Vampiric Rune,206,50,500000,0,5000 +10023,Adventure Vampiric Rune,207,50,500000,0,4000 +10023,Adventure Vampiric Rune,208,50,500000,0,3000 +10023,Adventure Vampiric Rune,209,50,500000,0,2000 +10023,Adventure Vampiric Rune,210,400,2000000,0,1000 +10023,Adventure Vampiric Rune,211,50,500000,300,10000 +10023,Adventure Vampiric Rune,212,50,500000,0,9000 +10023,Adventure Vampiric Rune,213,50,500000,0,8000 +10023,Adventure Vampiric Rune,214,50,500000,0,7000 +10023,Adventure Vampiric Rune,215,50,500000,0,6000 +10023,Adventure Vampiric Rune,216,50,500000,0,5000 +10023,Adventure Vampiric Rune,217,50,500000,0,4000 +10023,Adventure Vampiric Rune,218,50,500000,0,3000 +10023,Adventure Vampiric Rune,219,50,500000,0,2000 +10023,Adventure Vampiric Rune,220,400,2000000,0,1000 +10023,Adventure Vampiric Rune,221,50,500000,300,10000 +10023,Adventure Vampiric Rune,222,50,500000,0,9000 +10023,Adventure Vampiric Rune,223,50,500000,0,8000 +10023,Adventure Vampiric Rune,224,50,500000,0,7000 +10023,Adventure Vampiric Rune,225,50,500000,0,6000 +10023,Adventure Vampiric Rune,226,50,500000,0,5000 +10023,Adventure Vampiric Rune,227,50,500000,0,4000 +10023,Adventure Vampiric Rune,228,50,500000,0,3000 +10023,Adventure Vampiric Rune,229,50,500000,0,2000 +10023,Adventure Vampiric Rune,230,400,2000000,0,1000 +10023,Adventure Vampiric Rune,231,50,500000,300,10000 +10023,Adventure Vampiric Rune,232,50,500000,0,9000 +10023,Adventure Vampiric Rune,233,50,500000,0,8000 +10023,Adventure Vampiric Rune,234,50,500000,0,7000 +10023,Adventure Vampiric Rune,235,50,500000,0,6000 +10023,Adventure Vampiric Rune,236,50,500000,0,5000 +10023,Adventure Vampiric Rune,237,50,500000,0,4000 +10023,Adventure Vampiric Rune,238,50,500000,0,3000 +10023,Adventure Vampiric Rune,239,50,500000,0,2000 +10023,Adventure Vampiric Rune,240,400,2000000,0,1000 +10023,Adventure Vampiric Rune,241,50,500000,300,10000 +10023,Adventure Vampiric Rune,242,50,500000,0,9000 +10023,Adventure Vampiric Rune,243,50,500000,0,8000 +10023,Adventure Vampiric Rune,244,50,500000,0,7000 +10023,Adventure Vampiric Rune,245,50,500000,0,6000 +10023,Adventure Vampiric Rune,246,50,500000,0,5000 +10023,Adventure Vampiric Rune,247,50,500000,0,4000 +10023,Adventure Vampiric Rune,248,50,500000,0,3000 +10023,Adventure Vampiric Rune,249,50,500000,0,2000 +10023,Adventure Vampiric Rune,250,400,2000000,0,1000 +10023,Adventure Vampiric Rune,251,50,500000,600,10000 +10023,Adventure Vampiric Rune,252,50,500000,0,9000 +10023,Adventure Vampiric Rune,253,50,500000,0,8000 +10023,Adventure Vampiric Rune,254,50,500000,0,7000 +10023,Adventure Vampiric Rune,255,50,500000,0,6000 +10023,Adventure Vampiric Rune,256,50,500000,0,5000 +10023,Adventure Vampiric Rune,257,50,500000,0,4000 +10023,Adventure Vampiric Rune,258,50,500000,0,3000 +10023,Adventure Vampiric Rune,259,50,500000,0,2000 +10023,Adventure Vampiric Rune,260,400,2000000,0,1000 +10023,Adventure Vampiric Rune,261,50,500000,600,10000 +10023,Adventure Vampiric Rune,262,50,500000,0,9000 +10023,Adventure Vampiric Rune,263,50,500000,0,8000 +10023,Adventure Vampiric Rune,264,50,500000,0,7000 +10023,Adventure Vampiric Rune,265,50,500000,0,6000 +10023,Adventure Vampiric Rune,266,50,500000,0,5000 +10023,Adventure Vampiric Rune,267,50,500000,0,4000 +10023,Adventure Vampiric Rune,268,50,500000,0,3000 +10023,Adventure Vampiric Rune,269,50,500000,0,2000 +10023,Adventure Vampiric Rune,270,400,2000000,0,1000 +10023,Adventure Vampiric Rune,271,50,500000,600,10000 +10023,Adventure Vampiric Rune,272,50,500000,0,9000 +10023,Adventure Vampiric Rune,273,50,500000,0,8000 +10023,Adventure Vampiric Rune,274,50,500000,0,7000 +10023,Adventure Vampiric Rune,275,50,500000,0,6000 +10023,Adventure Vampiric Rune,276,50,500000,0,5000 +10023,Adventure Vampiric Rune,277,50,500000,0,4000 +10023,Adventure Vampiric Rune,278,50,500000,0,3000 +10023,Adventure Vampiric Rune,279,50,500000,0,2000 +10023,Adventure Vampiric Rune,280,400,2000000,0,1000 +10023,Adventure Vampiric Rune,281,50,500000,600,10000 +10023,Adventure Vampiric Rune,282,50,500000,0,9000 +10023,Adventure Vampiric Rune,283,50,500000,0,8000 +10023,Adventure Vampiric Rune,284,50,500000,0,7000 +10023,Adventure Vampiric Rune,285,50,500000,0,6000 +10023,Adventure Vampiric Rune,286,50,500000,0,5000 +10023,Adventure Vampiric Rune,287,50,500000,0,4000 +10023,Adventure Vampiric Rune,288,50,500000,0,3000 +10023,Adventure Vampiric Rune,289,50,500000,0,2000 +10023,Adventure Vampiric Rune,290,400,2000000,0,1000 +10023,Adventure Vampiric Rune,291,50,500000,600,10000 +10023,Adventure Vampiric Rune,292,50,500000,0,9000 +10023,Adventure Vampiric Rune,293,50,500000,0,8000 +10023,Adventure Vampiric Rune,294,50,500000,0,7000 +10023,Adventure Vampiric Rune,295,50,500000,0,6000 +10023,Adventure Vampiric Rune,296,50,500000,0,5000 +10023,Adventure Vampiric Rune,297,50,500000,0,4000 +10023,Adventure Vampiric Rune,298,50,500000,0,3000 +10023,Adventure Vampiric Rune,299,50,500000,0,2000 +10023,Adventure Vampiric Rune,300,400,2000000,0,1000 +10024,WorldBoss Vampiric Rune,1,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,2,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,3,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,4,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,5,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,6,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,7,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,8,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,9,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,10,10,2000000,0,10000 +10024,WorldBoss Vampiric Rune,11,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,12,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,13,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,14,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,15,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,16,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,17,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,18,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,19,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,20,10,2000000,0,10000 +10024,WorldBoss Vampiric Rune,21,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,22,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,23,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,24,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,25,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,26,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,27,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,28,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,29,10,400000,0,10000 +10024,WorldBoss Vampiric Rune,30,10,2000000,0,10000 +10024,WorldBoss Vampiric Rune,31,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,32,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,33,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,34,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,35,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,36,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,37,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,38,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,39,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,40,30,3000000,0,10000 +10024,WorldBoss Vampiric Rune,41,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,42,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,43,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,44,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,45,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,46,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,47,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,48,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,49,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,50,30,3000000,0,10000 +10024,WorldBoss Vampiric Rune,51,30,600000,100,10000 +10024,WorldBoss Vampiric Rune,52,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,53,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,54,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,55,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,56,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,57,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,58,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,59,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,60,30,3000000,0,10000 +10024,WorldBoss Vampiric Rune,61,30,600000,100,10000 +10024,WorldBoss Vampiric Rune,62,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,63,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,64,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,65,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,66,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,67,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,68,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,69,30,600000,0,10000 +10024,WorldBoss Vampiric Rune,70,30,3000000,0,10000 +10024,WorldBoss Vampiric Rune,71,40,1000000,150,10000 +10024,WorldBoss Vampiric Rune,72,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,73,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,74,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,75,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,76,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,77,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,78,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,79,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,80,40,5000000,0,10000 +10024,WorldBoss Vampiric Rune,81,40,1000000,150,10000 +10024,WorldBoss Vampiric Rune,82,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,83,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,84,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,85,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,86,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,87,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,88,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,89,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,90,40,5000000,0,10000 +10024,WorldBoss Vampiric Rune,91,40,1000000,150,10000 +10024,WorldBoss Vampiric Rune,92,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,93,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,94,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,95,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,96,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,97,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,98,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,99,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,100,40,5000000,0,10000 +10024,WorldBoss Vampiric Rune,101,40,1000000,200,10000 +10024,WorldBoss Vampiric Rune,102,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,103,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,104,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,105,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,106,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,107,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,108,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,109,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,110,40,5000000,0,10000 +10024,WorldBoss Vampiric Rune,111,40,1000000,200,10000 +10024,WorldBoss Vampiric Rune,112,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,113,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,114,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,115,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,116,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,117,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,118,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,119,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,120,40,5000000,0,10000 +10024,WorldBoss Vampiric Rune,121,40,1000000,200,10000 +10024,WorldBoss Vampiric Rune,122,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,123,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,124,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,125,40,1000000,0,10000 +10024,WorldBoss Vampiric Rune,126,50,1000000,0,10000 +10024,WorldBoss Vampiric Rune,127,50,1000000,0,10000 +10024,WorldBoss Vampiric Rune,128,50,1000000,0,10000 +10024,WorldBoss Vampiric Rune,129,50,1000000,0,10000 +10024,WorldBoss Vampiric Rune,130,50,5000000,0,10000 +10024,WorldBoss Vampiric Rune,131,50,1500000,200,10000 +10024,WorldBoss Vampiric Rune,132,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,133,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,134,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,135,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,136,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,137,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,138,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,139,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,140,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,141,50,1500000,200,10000 +10024,WorldBoss Vampiric Rune,142,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,143,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,144,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,145,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,146,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,147,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,148,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,149,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,150,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,151,50,1500000,200,10000 +10024,WorldBoss Vampiric Rune,152,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,153,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,154,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,155,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,156,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,157,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,158,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,159,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,160,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,161,50,1500000,200,10000 +10024,WorldBoss Vampiric Rune,162,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,163,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,164,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,165,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,166,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,167,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,168,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,169,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,170,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,171,50,1500000,200,10000 +10024,WorldBoss Vampiric Rune,172,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,173,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,174,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,175,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,176,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,177,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,178,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,179,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,180,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,181,50,1500000,300,10000 +10024,WorldBoss Vampiric Rune,182,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,183,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,184,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,185,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,186,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,187,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,188,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,189,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,190,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,191,50,1500000,300,10000 +10024,WorldBoss Vampiric Rune,192,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,193,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,194,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,195,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,196,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,197,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,198,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,199,50,1500000,0,10000 +10024,WorldBoss Vampiric Rune,200,50,6000000,0,10000 +10024,WorldBoss Vampiric Rune,201,80,2000000,300,10000 +10024,WorldBoss Vampiric Rune,202,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,203,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,204,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,205,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,206,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,207,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,208,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,209,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,210,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,211,80,2000000,500,10000 +10024,WorldBoss Vampiric Rune,212,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,213,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,214,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,215,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,216,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,217,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,218,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,219,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,220,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,221,80,2000000,500,10000 +10024,WorldBoss Vampiric Rune,222,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,223,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,224,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,225,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,226,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,227,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,228,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,229,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,230,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,231,80,2000000,500,10000 +10024,WorldBoss Vampiric Rune,232,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,233,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,234,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,235,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,236,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,237,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,238,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,239,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,240,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,241,80,2000000,500,10000 +10024,WorldBoss Vampiric Rune,242,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,243,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,244,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,245,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,246,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,247,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,248,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,249,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,250,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,251,80,2000000,500,10000 +10024,WorldBoss Vampiric Rune,252,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,253,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,254,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,255,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,256,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,257,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,258,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,259,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,260,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,261,80,2000000,1000,10000 +10024,WorldBoss Vampiric Rune,262,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,263,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,264,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,265,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,266,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,267,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,268,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,269,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,270,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,271,80,2000000,1000,10000 +10024,WorldBoss Vampiric Rune,272,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,273,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,274,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,275,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,276,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,277,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,278,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,279,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,280,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,281,80,2000000,1000,10000 +10024,WorldBoss Vampiric Rune,282,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,283,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,284,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,285,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,286,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,287,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,288,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,289,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,290,80,8000000,0,10000 +10024,WorldBoss Vampiric Rune,291,80,2000000,1000,10000 +10024,WorldBoss Vampiric Rune,292,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,293,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,294,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,295,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,296,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,297,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,298,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,299,80,2000000,0,10000 +10024,WorldBoss Vampiric Rune,300,80,8000000,0,10000 +10025,Adventure Stamina Rune,1,100,2000,0,10000 +10025,Adventure Stamina Rune,2,10,2000,0,8000 +10025,Adventure Stamina Rune,3,10,2000,0,6000 +10025,Adventure Stamina Rune,4,10,2000,0,10000 +10025,Adventure Stamina Rune,5,10,2000,0,8000 +10025,Adventure Stamina Rune,6,10,2000,0,6000 +10025,Adventure Stamina Rune,7,10,2000,0,10000 +10025,Adventure Stamina Rune,8,10,2000,0,8000 +10025,Adventure Stamina Rune,9,10,2000,0,6000 +10025,Adventure Stamina Rune,10,100,2000,0,5000 +10025,Adventure Stamina Rune,11,10,2000,0,10000 +10025,Adventure Stamina Rune,12,10,2000,0,8000 +10025,Adventure Stamina Rune,13,10,2000,0,6000 +10025,Adventure Stamina Rune,14,10,2000,0,10000 +10025,Adventure Stamina Rune,15,10,2000,0,8000 +10025,Adventure Stamina Rune,16,10,2000,0,6000 +10025,Adventure Stamina Rune,17,10,2000,0,10000 +10025,Adventure Stamina Rune,18,10,2000,0,8000 +10025,Adventure Stamina Rune,19,10,2000,0,6000 +10025,Adventure Stamina Rune,20,100,2000,0,5000 +10025,Adventure Stamina Rune,21,10,2000,0,10000 +10025,Adventure Stamina Rune,22,10,2000,0,8000 +10025,Adventure Stamina Rune,23,10,2000,0,6000 +10025,Adventure Stamina Rune,24,10,2000,0,10000 +10025,Adventure Stamina Rune,25,10,2000,0,8000 +10025,Adventure Stamina Rune,26,10,2000,0,6000 +10025,Adventure Stamina Rune,27,10,2000,0,10000 +10025,Adventure Stamina Rune,28,10,2000,0,8000 +10025,Adventure Stamina Rune,29,10,2000,0,6000 +10025,Adventure Stamina Rune,30,100,2000,0,5000 +10025,Adventure Stamina Rune,31,30,10000,0,10000 +10025,Adventure Stamina Rune,32,30,10000,0,8000 +10025,Adventure Stamina Rune,33,30,10000,0,6000 +10025,Adventure Stamina Rune,34,30,10000,0,10000 +10025,Adventure Stamina Rune,35,30,10000,0,8000 +10025,Adventure Stamina Rune,36,30,10000,0,6000 +10025,Adventure Stamina Rune,37,30,10000,0,10000 +10025,Adventure Stamina Rune,38,30,10000,0,8000 +10025,Adventure Stamina Rune,39,30,10000,0,6000 +10025,Adventure Stamina Rune,40,300,10000,0,5000 +10025,Adventure Stamina Rune,41,30,10000,0,10000 +10025,Adventure Stamina Rune,42,30,10000,0,8000 +10025,Adventure Stamina Rune,43,30,10000,0,6000 +10025,Adventure Stamina Rune,44,30,10000,0,10000 +10025,Adventure Stamina Rune,45,30,10000,0,8000 +10025,Adventure Stamina Rune,46,30,10000,0,6000 +10025,Adventure Stamina Rune,47,30,10000,0,10000 +10025,Adventure Stamina Rune,48,30,10000,0,8000 +10025,Adventure Stamina Rune,49,30,10000,0,6000 +10025,Adventure Stamina Rune,50,300,10000,0,5000 +10025,Adventure Stamina Rune,51,30,10000,20,10000 +10025,Adventure Stamina Rune,52,30,10000,0,8000 +10025,Adventure Stamina Rune,53,30,10000,0,6000 +10025,Adventure Stamina Rune,54,30,10000,0,10000 +10025,Adventure Stamina Rune,55,30,10000,0,8000 +10025,Adventure Stamina Rune,56,30,10000,0,6000 +10025,Adventure Stamina Rune,57,30,10000,0,10000 +10025,Adventure Stamina Rune,58,30,10000,0,8000 +10025,Adventure Stamina Rune,59,30,10000,0,6000 +10025,Adventure Stamina Rune,60,300,10000,0,5000 +10025,Adventure Stamina Rune,61,30,10000,20,10000 +10025,Adventure Stamina Rune,62,30,10000,0,8000 +10025,Adventure Stamina Rune,63,30,10000,0,6000 +10025,Adventure Stamina Rune,64,30,10000,0,10000 +10025,Adventure Stamina Rune,65,30,10000,0,8000 +10025,Adventure Stamina Rune,66,30,10000,0,6000 +10025,Adventure Stamina Rune,67,30,10000,0,10000 +10025,Adventure Stamina Rune,68,30,10000,0,8000 +10025,Adventure Stamina Rune,69,30,10000,0,6000 +10025,Adventure Stamina Rune,70,300,10000,0,5000 +10025,Adventure Stamina Rune,71,60,50000,20,10000 +10025,Adventure Stamina Rune,72,60,50000,0,9000 +10025,Adventure Stamina Rune,73,60,50000,0,8000 +10025,Adventure Stamina Rune,74,60,50000,0,7000 +10025,Adventure Stamina Rune,75,60,50000,0,6000 +10025,Adventure Stamina Rune,76,60,50000,0,5000 +10025,Adventure Stamina Rune,77,60,50000,0,4000 +10025,Adventure Stamina Rune,78,60,50000,0,3000 +10025,Adventure Stamina Rune,79,60,50000,0,2000 +10025,Adventure Stamina Rune,80,300,50000,0,1000 +10025,Adventure Stamina Rune,81,60,50000,20,10000 +10025,Adventure Stamina Rune,82,60,50000,0,9000 +10025,Adventure Stamina Rune,83,60,50000,0,8000 +10025,Adventure Stamina Rune,84,60,50000,0,7000 +10025,Adventure Stamina Rune,85,60,50000,0,6000 +10025,Adventure Stamina Rune,86,60,50000,0,5000 +10025,Adventure Stamina Rune,87,60,50000,0,4000 +10025,Adventure Stamina Rune,88,60,50000,0,3000 +10025,Adventure Stamina Rune,89,60,50000,0,2000 +10025,Adventure Stamina Rune,90,300,50000,0,1000 +10025,Adventure Stamina Rune,91,60,50000,50,10000 +10025,Adventure Stamina Rune,92,60,50000,0,9000 +10025,Adventure Stamina Rune,93,60,50000,0,8000 +10025,Adventure Stamina Rune,94,60,50000,0,7000 +10025,Adventure Stamina Rune,95,60,50000,0,6000 +10025,Adventure Stamina Rune,96,60,50000,0,5000 +10025,Adventure Stamina Rune,97,60,50000,0,4000 +10025,Adventure Stamina Rune,98,60,50000,0,3000 +10025,Adventure Stamina Rune,99,60,50000,0,2000 +10025,Adventure Stamina Rune,100,300,50000,0,1000 +10025,Adventure Stamina Rune,101,60,50000,50,10000 +10025,Adventure Stamina Rune,102,60,50000,0,9000 +10025,Adventure Stamina Rune,103,60,50000,0,8000 +10025,Adventure Stamina Rune,104,60,50000,0,7000 +10025,Adventure Stamina Rune,105,60,50000,0,6000 +10025,Adventure Stamina Rune,106,60,50000,0,5000 +10025,Adventure Stamina Rune,107,60,50000,0,4000 +10025,Adventure Stamina Rune,108,60,50000,0,3000 +10025,Adventure Stamina Rune,109,60,50000,0,2000 +10025,Adventure Stamina Rune,110,300,50000,0,1000 +10025,Adventure Stamina Rune,111,60,50000,50,10000 +10025,Adventure Stamina Rune,112,60,50000,0,9000 +10025,Adventure Stamina Rune,113,60,50000,0,8000 +10025,Adventure Stamina Rune,114,60,50000,0,7000 +10025,Adventure Stamina Rune,115,60,50000,0,6000 +10025,Adventure Stamina Rune,116,60,50000,0,5000 +10025,Adventure Stamina Rune,117,60,50000,0,4000 +10025,Adventure Stamina Rune,118,60,50000,0,3000 +10025,Adventure Stamina Rune,119,60,50000,0,2000 +10025,Adventure Stamina Rune,120,300,50000,0,1000 +10025,Adventure Stamina Rune,121,60,50000,50,10000 +10025,Adventure Stamina Rune,122,60,50000,0,9000 +10025,Adventure Stamina Rune,123,60,50000,0,8000 +10025,Adventure Stamina Rune,124,60,50000,0,7000 +10025,Adventure Stamina Rune,125,60,50000,0,6000 +10025,Adventure Stamina Rune,126,60,200000,0,5000 +10025,Adventure Stamina Rune,127,60,200000,0,4000 +10025,Adventure Stamina Rune,128,60,200000,0,3000 +10025,Adventure Stamina Rune,129,60,200000,0,2000 +10025,Adventure Stamina Rune,130,300,200000,0,1000 +10025,Adventure Stamina Rune,131,80,200000,50,10000 +10025,Adventure Stamina Rune,132,80,200000,0,8000 +10025,Adventure Stamina Rune,133,80,200000,0,6000 +10025,Adventure Stamina Rune,134,80,200000,0,4000 +10025,Adventure Stamina Rune,135,400,200000,0,1000 +10025,Adventure Stamina Rune,136,80,200000,0,10000 +10025,Adventure Stamina Rune,137,80,200000,0,8000 +10025,Adventure Stamina Rune,138,80,200000,0,6000 +10025,Adventure Stamina Rune,139,80,200000,0,4000 +10025,Adventure Stamina Rune,140,400,200000,0,1000 +10025,Adventure Stamina Rune,141,80,200000,50,10000 +10025,Adventure Stamina Rune,142,80,200000,0,9000 +10025,Adventure Stamina Rune,143,80,200000,0,8000 +10025,Adventure Stamina Rune,144,80,200000,0,7000 +10025,Adventure Stamina Rune,145,80,200000,0,6000 +10025,Adventure Stamina Rune,146,80,200000,0,5000 +10025,Adventure Stamina Rune,147,80,200000,0,4000 +10025,Adventure Stamina Rune,148,80,200000,0,3000 +10025,Adventure Stamina Rune,149,80,200000,0,2000 +10025,Adventure Stamina Rune,150,400,200000,0,1000 +10025,Adventure Stamina Rune,151,80,200000,50,10000 +10025,Adventure Stamina Rune,152,80,200000,0,9000 +10025,Adventure Stamina Rune,153,80,200000,0,8000 +10025,Adventure Stamina Rune,154,80,200000,0,7000 +10025,Adventure Stamina Rune,155,80,200000,0,6000 +10025,Adventure Stamina Rune,156,80,200000,0,5000 +10025,Adventure Stamina Rune,157,80,200000,0,4000 +10025,Adventure Stamina Rune,158,80,200000,0,3000 +10025,Adventure Stamina Rune,159,80,200000,0,2000 +10025,Adventure Stamina Rune,160,400,200000,0,1000 +10025,Adventure Stamina Rune,161,80,200000,50,10000 +10025,Adventure Stamina Rune,162,80,200000,0,9000 +10025,Adventure Stamina Rune,163,80,200000,0,8000 +10025,Adventure Stamina Rune,164,80,200000,0,7000 +10025,Adventure Stamina Rune,165,80,200000,0,6000 +10025,Adventure Stamina Rune,166,80,200000,0,5000 +10025,Adventure Stamina Rune,167,80,200000,0,4000 +10025,Adventure Stamina Rune,168,80,200000,0,3000 +10025,Adventure Stamina Rune,169,80,200000,0,2000 +10025,Adventure Stamina Rune,170,400,200000,0,1000 +10025,Adventure Stamina Rune,171,80,200000,50,10000 +10025,Adventure Stamina Rune,172,80,200000,0,9000 +10025,Adventure Stamina Rune,173,80,200000,0,8000 +10025,Adventure Stamina Rune,174,80,200000,0,7000 +10025,Adventure Stamina Rune,175,80,200000,0,6000 +10025,Adventure Stamina Rune,176,80,200000,0,5000 +10025,Adventure Stamina Rune,177,80,200000,0,4000 +10025,Adventure Stamina Rune,178,80,200000,0,3000 +10025,Adventure Stamina Rune,179,80,200000,0,2000 +10025,Adventure Stamina Rune,180,400,200000,0,1000 +10025,Adventure Stamina Rune,181,80,200000,100,10000 +10025,Adventure Stamina Rune,182,80,200000,0,9000 +10025,Adventure Stamina Rune,183,80,200000,0,8000 +10025,Adventure Stamina Rune,184,80,200000,0,7000 +10025,Adventure Stamina Rune,185,80,200000,0,6000 +10025,Adventure Stamina Rune,186,80,200000,0,5000 +10025,Adventure Stamina Rune,187,80,200000,0,4000 +10025,Adventure Stamina Rune,188,80,200000,0,3000 +10025,Adventure Stamina Rune,189,80,200000,0,2000 +10025,Adventure Stamina Rune,190,400,200000,0,1000 +10025,Adventure Stamina Rune,191,80,200000,100,10000 +10025,Adventure Stamina Rune,192,80,200000,0,9000 +10025,Adventure Stamina Rune,193,80,200000,0,8000 +10025,Adventure Stamina Rune,194,80,200000,0,7000 +10025,Adventure Stamina Rune,195,80,200000,0,6000 +10025,Adventure Stamina Rune,196,80,200000,0,5000 +10025,Adventure Stamina Rune,197,80,200000,0,4000 +10025,Adventure Stamina Rune,198,80,200000,0,3000 +10025,Adventure Stamina Rune,199,80,200000,0,2000 +10025,Adventure Stamina Rune,200,400,200000,0,1000 +10025,Adventure Stamina Rune,201,100,500000,100,10000 +10025,Adventure Stamina Rune,202,100,500000,0,9000 +10025,Adventure Stamina Rune,203,100,500000,0,8000 +10025,Adventure Stamina Rune,204,100,500000,0,7000 +10025,Adventure Stamina Rune,205,100,500000,0,6000 +10025,Adventure Stamina Rune,206,100,500000,0,5000 +10025,Adventure Stamina Rune,207,100,500000,0,4000 +10025,Adventure Stamina Rune,208,100,500000,0,3000 +10025,Adventure Stamina Rune,209,100,500000,0,2000 +10025,Adventure Stamina Rune,210,800,500000,0,1000 +10025,Adventure Stamina Rune,211,100,500000,100,10000 +10025,Adventure Stamina Rune,212,100,500000,0,9000 +10025,Adventure Stamina Rune,213,100,500000,0,8000 +10025,Adventure Stamina Rune,214,100,500000,0,7000 +10025,Adventure Stamina Rune,215,100,500000,0,6000 +10025,Adventure Stamina Rune,216,100,500000,0,5000 +10025,Adventure Stamina Rune,217,100,500000,0,4000 +10025,Adventure Stamina Rune,218,100,500000,0,3000 +10025,Adventure Stamina Rune,219,100,500000,0,2000 +10025,Adventure Stamina Rune,220,800,500000,0,1000 +10025,Adventure Stamina Rune,221,100,500000,100,10000 +10025,Adventure Stamina Rune,222,100,500000,0,9000 +10025,Adventure Stamina Rune,223,100,500000,0,8000 +10025,Adventure Stamina Rune,224,100,500000,0,7000 +10025,Adventure Stamina Rune,225,100,500000,0,6000 +10025,Adventure Stamina Rune,226,100,500000,0,5000 +10025,Adventure Stamina Rune,227,100,500000,0,4000 +10025,Adventure Stamina Rune,228,100,500000,0,3000 +10025,Adventure Stamina Rune,229,100,500000,0,2000 +10025,Adventure Stamina Rune,230,800,500000,0,1000 +10025,Adventure Stamina Rune,231,100,500000,100,10000 +10025,Adventure Stamina Rune,232,100,500000,0,9000 +10025,Adventure Stamina Rune,233,100,500000,0,8000 +10025,Adventure Stamina Rune,234,100,500000,0,7000 +10025,Adventure Stamina Rune,235,100,500000,0,6000 +10025,Adventure Stamina Rune,236,100,500000,0,5000 +10025,Adventure Stamina Rune,237,100,500000,0,4000 +10025,Adventure Stamina Rune,238,100,500000,0,3000 +10025,Adventure Stamina Rune,239,100,500000,0,2000 +10025,Adventure Stamina Rune,240,800,500000,0,1000 +10025,Adventure Stamina Rune,241,100,500000,100,10000 +10025,Adventure Stamina Rune,242,100,500000,0,9000 +10025,Adventure Stamina Rune,243,100,500000,0,8000 +10025,Adventure Stamina Rune,244,100,500000,0,7000 +10025,Adventure Stamina Rune,245,100,500000,0,6000 +10025,Adventure Stamina Rune,246,100,500000,0,5000 +10025,Adventure Stamina Rune,247,100,500000,0,4000 +10025,Adventure Stamina Rune,248,100,500000,0,3000 +10025,Adventure Stamina Rune,249,100,500000,0,2000 +10025,Adventure Stamina Rune,250,800,500000,0,1000 +10025,Adventure Stamina Rune,251,100,1000000,200,10000 +10025,Adventure Stamina Rune,252,100,1000000,0,9000 +10025,Adventure Stamina Rune,253,100,1000000,0,8000 +10025,Adventure Stamina Rune,254,100,1000000,0,7000 +10025,Adventure Stamina Rune,255,100,1000000,0,6000 +10025,Adventure Stamina Rune,256,100,1000000,0,5000 +10025,Adventure Stamina Rune,257,100,1000000,0,4000 +10025,Adventure Stamina Rune,258,100,1000000,0,3000 +10025,Adventure Stamina Rune,259,100,1000000,0,2000 +10025,Adventure Stamina Rune,260,800,1000000,0,1000 +10025,Adventure Stamina Rune,261,100,1000000,200,10000 +10025,Adventure Stamina Rune,262,100,1000000,0,9000 +10025,Adventure Stamina Rune,263,100,1000000,0,8000 +10025,Adventure Stamina Rune,264,100,1000000,0,7000 +10025,Adventure Stamina Rune,265,100,1000000,0,6000 +10025,Adventure Stamina Rune,266,100,1000000,0,5000 +10025,Adventure Stamina Rune,267,100,1000000,0,4000 +10025,Adventure Stamina Rune,268,100,1000000,0,3000 +10025,Adventure Stamina Rune,269,100,1000000,0,2000 +10025,Adventure Stamina Rune,270,800,1000000,0,1000 +10025,Adventure Stamina Rune,271,100,1000000,200,10000 +10025,Adventure Stamina Rune,272,100,1000000,0,9000 +10025,Adventure Stamina Rune,273,100,1000000,0,8000 +10025,Adventure Stamina Rune,274,100,1000000,0,7000 +10025,Adventure Stamina Rune,275,100,1000000,0,6000 +10025,Adventure Stamina Rune,276,100,1000000,0,5000 +10025,Adventure Stamina Rune,277,100,1000000,0,4000 +10025,Adventure Stamina Rune,278,100,1000000,0,3000 +10025,Adventure Stamina Rune,279,100,1000000,0,2000 +10025,Adventure Stamina Rune,280,800,1000000,0,1000 +10025,Adventure Stamina Rune,281,100,1000000,200,10000 +10025,Adventure Stamina Rune,282,100,1000000,0,9000 +10025,Adventure Stamina Rune,283,100,1000000,0,8000 +10025,Adventure Stamina Rune,284,100,1000000,0,7000 +10025,Adventure Stamina Rune,285,100,1000000,0,6000 +10025,Adventure Stamina Rune,286,100,1000000,0,5000 +10025,Adventure Stamina Rune,287,100,1000000,0,4000 +10025,Adventure Stamina Rune,288,100,1000000,0,3000 +10025,Adventure Stamina Rune,289,100,1000000,0,2000 +10025,Adventure Stamina Rune,290,800,1000000,0,1000 +10025,Adventure Stamina Rune,291,100,1000000,200,10000 +10025,Adventure Stamina Rune,292,100,1000000,0,9000 +10025,Adventure Stamina Rune,293,100,1000000,0,8000 +10025,Adventure Stamina Rune,294,100,1000000,0,7000 +10025,Adventure Stamina Rune,295,100,1000000,0,6000 +10025,Adventure Stamina Rune,296,100,1000000,0,5000 +10025,Adventure Stamina Rune,297,100,1000000,0,4000 +10025,Adventure Stamina Rune,298,100,1000000,0,3000 +10025,Adventure Stamina Rune,299,100,1000000,0,2000 +10025,Adventure Stamina Rune,300,800,1000000,0,1000 +10026,Arena Stamina Rune,1,50,5000,0,10000 +10026,Arena Stamina Rune,2,5,5000,0,8000 +10026,Arena Stamina Rune,3,5,5000,0,6000 +10026,Arena Stamina Rune,4,5,5000,0,10000 +10026,Arena Stamina Rune,5,5,5000,0,8000 +10026,Arena Stamina Rune,6,5,5000,0,6000 +10026,Arena Stamina Rune,7,5,5000,0,10000 +10026,Arena Stamina Rune,8,5,5000,0,8000 +10026,Arena Stamina Rune,9,5,5000,0,6000 +10026,Arena Stamina Rune,10,50,50000,0,5000 +10026,Arena Stamina Rune,11,5,5000,0,10000 +10026,Arena Stamina Rune,12,5,5000,0,8000 +10026,Arena Stamina Rune,13,5,5000,0,6000 +10026,Arena Stamina Rune,14,5,5000,0,10000 +10026,Arena Stamina Rune,15,5,5000,0,8000 +10026,Arena Stamina Rune,16,5,5000,0,6000 +10026,Arena Stamina Rune,17,5,5000,0,10000 +10026,Arena Stamina Rune,18,5,5000,0,8000 +10026,Arena Stamina Rune,19,5,5000,0,6000 +10026,Arena Stamina Rune,20,50,50000,0,5000 +10026,Arena Stamina Rune,21,5,5000,0,10000 +10026,Arena Stamina Rune,22,5,5000,0,8000 +10026,Arena Stamina Rune,23,5,5000,0,6000 +10026,Arena Stamina Rune,24,5,5000,0,10000 +10026,Arena Stamina Rune,25,5,5000,0,8000 +10026,Arena Stamina Rune,26,5,5000,0,6000 +10026,Arena Stamina Rune,27,5,5000,0,10000 +10026,Arena Stamina Rune,28,5,5000,0,8000 +10026,Arena Stamina Rune,29,5,5000,0,6000 +10026,Arena Stamina Rune,30,50,50000,0,5000 +10026,Arena Stamina Rune,31,10,20000,0,10000 +10026,Arena Stamina Rune,32,10,20000,0,8000 +10026,Arena Stamina Rune,33,10,20000,0,6000 +10026,Arena Stamina Rune,34,10,20000,0,10000 +10026,Arena Stamina Rune,35,10,20000,0,8000 +10026,Arena Stamina Rune,36,10,20000,0,6000 +10026,Arena Stamina Rune,37,10,20000,0,10000 +10026,Arena Stamina Rune,38,10,20000,0,8000 +10026,Arena Stamina Rune,39,10,20000,0,6000 +10026,Arena Stamina Rune,40,100,100000,0,5000 +10026,Arena Stamina Rune,41,10,20000,0,10000 +10026,Arena Stamina Rune,42,10,20000,0,8000 +10026,Arena Stamina Rune,43,10,20000,0,6000 +10026,Arena Stamina Rune,44,10,20000,0,10000 +10026,Arena Stamina Rune,45,10,20000,0,8000 +10026,Arena Stamina Rune,46,10,20000,0,6000 +10026,Arena Stamina Rune,47,10,20000,0,10000 +10026,Arena Stamina Rune,48,10,20000,0,8000 +10026,Arena Stamina Rune,49,10,20000,0,6000 +10026,Arena Stamina Rune,50,100,100000,0,5000 +10026,Arena Stamina Rune,51,15,20000,60,10000 +10026,Arena Stamina Rune,52,15,20000,0,8000 +10026,Arena Stamina Rune,53,15,20000,0,6000 +10026,Arena Stamina Rune,54,15,20000,0,10000 +10026,Arena Stamina Rune,55,15,20000,0,8000 +10026,Arena Stamina Rune,56,15,20000,0,6000 +10026,Arena Stamina Rune,57,15,20000,0,10000 +10026,Arena Stamina Rune,58,15,20000,0,8000 +10026,Arena Stamina Rune,59,15,20000,0,6000 +10026,Arena Stamina Rune,60,150,100000,0,5000 +10026,Arena Stamina Rune,61,15,20000,60,10000 +10026,Arena Stamina Rune,62,15,20000,0,8000 +10026,Arena Stamina Rune,63,15,20000,0,6000 +10026,Arena Stamina Rune,64,15,20000,0,10000 +10026,Arena Stamina Rune,65,15,20000,0,8000 +10026,Arena Stamina Rune,66,15,20000,0,6000 +10026,Arena Stamina Rune,67,15,20000,0,10000 +10026,Arena Stamina Rune,68,15,20000,0,8000 +10026,Arena Stamina Rune,69,15,20000,0,6000 +10026,Arena Stamina Rune,70,150,100000,0,5000 +10026,Arena Stamina Rune,71,20,50000,60,10000 +10026,Arena Stamina Rune,72,20,50000,0,9000 +10026,Arena Stamina Rune,73,20,50000,0,8000 +10026,Arena Stamina Rune,74,20,50000,0,7000 +10026,Arena Stamina Rune,75,20,50000,0,6000 +10026,Arena Stamina Rune,76,20,50000,0,5000 +10026,Arena Stamina Rune,77,20,50000,0,4000 +10026,Arena Stamina Rune,78,20,50000,0,3000 +10026,Arena Stamina Rune,79,20,50000,0,2000 +10026,Arena Stamina Rune,80,150,300000,0,1000 +10026,Arena Stamina Rune,81,20,50000,60,10000 +10026,Arena Stamina Rune,82,20,50000,0,9000 +10026,Arena Stamina Rune,83,20,50000,0,8000 +10026,Arena Stamina Rune,84,20,50000,0,7000 +10026,Arena Stamina Rune,85,20,50000,0,6000 +10026,Arena Stamina Rune,86,20,50000,0,5000 +10026,Arena Stamina Rune,87,20,50000,0,4000 +10026,Arena Stamina Rune,88,20,50000,0,3000 +10026,Arena Stamina Rune,89,20,50000,0,2000 +10026,Arena Stamina Rune,90,150,300000,0,1000 +10026,Arena Stamina Rune,91,20,50000,150,10000 +10026,Arena Stamina Rune,92,20,50000,0,9000 +10026,Arena Stamina Rune,93,20,50000,0,8000 +10026,Arena Stamina Rune,94,20,50000,0,7000 +10026,Arena Stamina Rune,95,20,50000,0,6000 +10026,Arena Stamina Rune,96,20,50000,0,5000 +10026,Arena Stamina Rune,97,20,50000,0,4000 +10026,Arena Stamina Rune,98,20,50000,0,3000 +10026,Arena Stamina Rune,99,20,50000,0,2000 +10026,Arena Stamina Rune,100,150,300000,0,1000 +10026,Arena Stamina Rune,101,30,50000,150,10000 +10026,Arena Stamina Rune,102,30,50000,0,9000 +10026,Arena Stamina Rune,103,30,50000,0,8000 +10026,Arena Stamina Rune,104,30,50000,0,7000 +10026,Arena Stamina Rune,105,30,50000,0,6000 +10026,Arena Stamina Rune,106,30,50000,0,5000 +10026,Arena Stamina Rune,107,30,50000,0,4000 +10026,Arena Stamina Rune,108,30,50000,0,3000 +10026,Arena Stamina Rune,109,30,50000,0,2000 +10026,Arena Stamina Rune,110,150,300000,0,1000 +10026,Arena Stamina Rune,111,30,50000,150,10000 +10026,Arena Stamina Rune,112,30,50000,0,9000 +10026,Arena Stamina Rune,113,30,50000,0,8000 +10026,Arena Stamina Rune,114,30,50000,0,7000 +10026,Arena Stamina Rune,115,30,50000,0,6000 +10026,Arena Stamina Rune,116,30,50000,0,5000 +10026,Arena Stamina Rune,117,30,50000,0,4000 +10026,Arena Stamina Rune,118,30,50000,0,3000 +10026,Arena Stamina Rune,119,30,50000,0,2000 +10026,Arena Stamina Rune,120,150,300000,0,1000 +10026,Arena Stamina Rune,121,30,50000,150,10000 +10026,Arena Stamina Rune,122,30,50000,0,9000 +10026,Arena Stamina Rune,123,30,50000,0,8000 +10026,Arena Stamina Rune,124,30,50000,0,7000 +10026,Arena Stamina Rune,125,30,50000,0,6000 +10026,Arena Stamina Rune,126,30,50000,0,5000 +10026,Arena Stamina Rune,127,30,50000,0,4000 +10026,Arena Stamina Rune,128,30,50000,0,3000 +10026,Arena Stamina Rune,129,30,50000,0,2000 +10026,Arena Stamina Rune,130,150,300000,0,1000 +10026,Arena Stamina Rune,131,40,300000,150,10000 +10026,Arena Stamina Rune,132,40,300000,0,8000 +10026,Arena Stamina Rune,133,40,300000,0,6000 +10026,Arena Stamina Rune,134,40,300000,0,4000 +10026,Arena Stamina Rune,135,200,1000000,0,1000 +10026,Arena Stamina Rune,136,40,300000,0,10000 +10026,Arena Stamina Rune,137,40,300000,0,8000 +10026,Arena Stamina Rune,138,40,300000,0,6000 +10026,Arena Stamina Rune,139,40,300000,0,4000 +10026,Arena Stamina Rune,140,200,1000000,0,1000 +10026,Arena Stamina Rune,141,40,300000,150,10000 +10026,Arena Stamina Rune,142,40,300000,0,9000 +10026,Arena Stamina Rune,143,40,300000,0,8000 +10026,Arena Stamina Rune,144,40,300000,0,7000 +10026,Arena Stamina Rune,145,40,300000,0,6000 +10026,Arena Stamina Rune,146,40,300000,0,5000 +10026,Arena Stamina Rune,147,40,300000,0,4000 +10026,Arena Stamina Rune,148,40,300000,0,3000 +10026,Arena Stamina Rune,149,40,300000,0,2000 +10026,Arena Stamina Rune,150,200,1000000,0,1000 +10026,Arena Stamina Rune,151,40,300000,150,10000 +10026,Arena Stamina Rune,152,40,300000,0,9000 +10026,Arena Stamina Rune,153,40,300000,0,8000 +10026,Arena Stamina Rune,154,40,300000,0,7000 +10026,Arena Stamina Rune,155,40,300000,0,6000 +10026,Arena Stamina Rune,156,40,300000,0,5000 +10026,Arena Stamina Rune,157,40,300000,0,4000 +10026,Arena Stamina Rune,158,40,300000,0,3000 +10026,Arena Stamina Rune,159,40,300000,0,2000 +10026,Arena Stamina Rune,160,200,1000000,0,1000 +10026,Arena Stamina Rune,161,40,300000,150,10000 +10026,Arena Stamina Rune,162,40,300000,0,9000 +10026,Arena Stamina Rune,163,40,300000,0,8000 +10026,Arena Stamina Rune,164,40,300000,0,7000 +10026,Arena Stamina Rune,165,40,300000,0,6000 +10026,Arena Stamina Rune,166,40,300000,0,5000 +10026,Arena Stamina Rune,167,40,300000,0,4000 +10026,Arena Stamina Rune,168,40,300000,0,3000 +10026,Arena Stamina Rune,169,40,300000,0,2000 +10026,Arena Stamina Rune,170,200,1000000,0,1000 +10026,Arena Stamina Rune,171,40,300000,150,10000 +10026,Arena Stamina Rune,172,40,300000,0,9000 +10026,Arena Stamina Rune,173,40,300000,0,8000 +10026,Arena Stamina Rune,174,40,300000,0,7000 +10026,Arena Stamina Rune,175,40,300000,0,6000 +10026,Arena Stamina Rune,176,40,300000,0,5000 +10026,Arena Stamina Rune,177,40,300000,0,4000 +10026,Arena Stamina Rune,178,40,300000,0,3000 +10026,Arena Stamina Rune,179,40,300000,0,2000 +10026,Arena Stamina Rune,180,200,1000000,0,1000 +10026,Arena Stamina Rune,181,40,300000,300,10000 +10026,Arena Stamina Rune,182,40,300000,0,9000 +10026,Arena Stamina Rune,183,40,300000,0,8000 +10026,Arena Stamina Rune,184,40,300000,0,7000 +10026,Arena Stamina Rune,185,40,300000,0,6000 +10026,Arena Stamina Rune,186,40,300000,0,5000 +10026,Arena Stamina Rune,187,40,300000,0,4000 +10026,Arena Stamina Rune,188,40,300000,0,3000 +10026,Arena Stamina Rune,189,40,300000,0,2000 +10026,Arena Stamina Rune,190,200,1000000,0,1000 +10026,Arena Stamina Rune,191,40,300000,300,10000 +10026,Arena Stamina Rune,192,40,300000,0,9000 +10026,Arena Stamina Rune,193,40,300000,0,8000 +10026,Arena Stamina Rune,194,40,300000,0,7000 +10026,Arena Stamina Rune,195,40,300000,0,6000 +10026,Arena Stamina Rune,196,40,300000,0,5000 +10026,Arena Stamina Rune,197,40,300000,0,4000 +10026,Arena Stamina Rune,198,40,300000,0,3000 +10026,Arena Stamina Rune,199,40,300000,0,2000 +10026,Arena Stamina Rune,200,200,1000000,0,1000 +10026,Arena Stamina Rune,201,50,500000,300,10000 +10026,Arena Stamina Rune,202,50,500000,0,9000 +10026,Arena Stamina Rune,203,50,500000,0,8000 +10026,Arena Stamina Rune,204,50,500000,0,7000 +10026,Arena Stamina Rune,205,50,500000,0,6000 +10026,Arena Stamina Rune,206,50,500000,0,5000 +10026,Arena Stamina Rune,207,50,500000,0,4000 +10026,Arena Stamina Rune,208,50,500000,0,3000 +10026,Arena Stamina Rune,209,50,500000,0,2000 +10026,Arena Stamina Rune,210,400,2000000,0,1000 +10026,Arena Stamina Rune,211,50,500000,300,10000 +10026,Arena Stamina Rune,212,50,500000,0,9000 +10026,Arena Stamina Rune,213,50,500000,0,8000 +10026,Arena Stamina Rune,214,50,500000,0,7000 +10026,Arena Stamina Rune,215,50,500000,0,6000 +10026,Arena Stamina Rune,216,50,500000,0,5000 +10026,Arena Stamina Rune,217,50,500000,0,4000 +10026,Arena Stamina Rune,218,50,500000,0,3000 +10026,Arena Stamina Rune,219,50,500000,0,2000 +10026,Arena Stamina Rune,220,400,2000000,0,1000 +10026,Arena Stamina Rune,221,50,500000,300,10000 +10026,Arena Stamina Rune,222,50,500000,0,9000 +10026,Arena Stamina Rune,223,50,500000,0,8000 +10026,Arena Stamina Rune,224,50,500000,0,7000 +10026,Arena Stamina Rune,225,50,500000,0,6000 +10026,Arena Stamina Rune,226,50,500000,0,5000 +10026,Arena Stamina Rune,227,50,500000,0,4000 +10026,Arena Stamina Rune,228,50,500000,0,3000 +10026,Arena Stamina Rune,229,50,500000,0,2000 +10026,Arena Stamina Rune,230,400,2000000,0,1000 +10026,Arena Stamina Rune,231,50,500000,300,10000 +10026,Arena Stamina Rune,232,50,500000,0,9000 +10026,Arena Stamina Rune,233,50,500000,0,8000 +10026,Arena Stamina Rune,234,50,500000,0,7000 +10026,Arena Stamina Rune,235,50,500000,0,6000 +10026,Arena Stamina Rune,236,50,500000,0,5000 +10026,Arena Stamina Rune,237,50,500000,0,4000 +10026,Arena Stamina Rune,238,50,500000,0,3000 +10026,Arena Stamina Rune,239,50,500000,0,2000 +10026,Arena Stamina Rune,240,400,2000000,0,1000 +10026,Arena Stamina Rune,241,50,500000,300,10000 +10026,Arena Stamina Rune,242,50,500000,0,9000 +10026,Arena Stamina Rune,243,50,500000,0,8000 +10026,Arena Stamina Rune,244,50,500000,0,7000 +10026,Arena Stamina Rune,245,50,500000,0,6000 +10026,Arena Stamina Rune,246,50,500000,0,5000 +10026,Arena Stamina Rune,247,50,500000,0,4000 +10026,Arena Stamina Rune,248,50,500000,0,3000 +10026,Arena Stamina Rune,249,50,500000,0,2000 +10026,Arena Stamina Rune,250,400,2000000,0,1000 +10026,Arena Stamina Rune,251,50,500000,600,10000 +10026,Arena Stamina Rune,252,50,500000,0,9000 +10026,Arena Stamina Rune,253,50,500000,0,8000 +10026,Arena Stamina Rune,254,50,500000,0,7000 +10026,Arena Stamina Rune,255,50,500000,0,6000 +10026,Arena Stamina Rune,256,50,500000,0,5000 +10026,Arena Stamina Rune,257,50,500000,0,4000 +10026,Arena Stamina Rune,258,50,500000,0,3000 +10026,Arena Stamina Rune,259,50,500000,0,2000 +10026,Arena Stamina Rune,260,400,2000000,0,1000 +10026,Arena Stamina Rune,261,50,500000,600,10000 +10026,Arena Stamina Rune,262,50,500000,0,9000 +10026,Arena Stamina Rune,263,50,500000,0,8000 +10026,Arena Stamina Rune,264,50,500000,0,7000 +10026,Arena Stamina Rune,265,50,500000,0,6000 +10026,Arena Stamina Rune,266,50,500000,0,5000 +10026,Arena Stamina Rune,267,50,500000,0,4000 +10026,Arena Stamina Rune,268,50,500000,0,3000 +10026,Arena Stamina Rune,269,50,500000,0,2000 +10026,Arena Stamina Rune,270,400,2000000,0,1000 +10026,Arena Stamina Rune,271,50,500000,600,10000 +10026,Arena Stamina Rune,272,50,500000,0,9000 +10026,Arena Stamina Rune,273,50,500000,0,8000 +10026,Arena Stamina Rune,274,50,500000,0,7000 +10026,Arena Stamina Rune,275,50,500000,0,6000 +10026,Arena Stamina Rune,276,50,500000,0,5000 +10026,Arena Stamina Rune,277,50,500000,0,4000 +10026,Arena Stamina Rune,278,50,500000,0,3000 +10026,Arena Stamina Rune,279,50,500000,0,2000 +10026,Arena Stamina Rune,280,400,2000000,0,1000 +10026,Arena Stamina Rune,281,50,500000,600,10000 +10026,Arena Stamina Rune,282,50,500000,0,9000 +10026,Arena Stamina Rune,283,50,500000,0,8000 +10026,Arena Stamina Rune,284,50,500000,0,7000 +10026,Arena Stamina Rune,285,50,500000,0,6000 +10026,Arena Stamina Rune,286,50,500000,0,5000 +10026,Arena Stamina Rune,287,50,500000,0,4000 +10026,Arena Stamina Rune,288,50,500000,0,3000 +10026,Arena Stamina Rune,289,50,500000,0,2000 +10026,Arena Stamina Rune,290,400,2000000,0,1000 +10026,Arena Stamina Rune,291,50,500000,600,10000 +10026,Arena Stamina Rune,292,50,500000,0,9000 +10026,Arena Stamina Rune,293,50,500000,0,8000 +10026,Arena Stamina Rune,294,50,500000,0,7000 +10026,Arena Stamina Rune,295,50,500000,0,6000 +10026,Arena Stamina Rune,296,50,500000,0,5000 +10026,Arena Stamina Rune,297,50,500000,0,4000 +10026,Arena Stamina Rune,298,50,500000,0,3000 +10026,Arena Stamina Rune,299,50,500000,0,2000 +10026,Arena Stamina Rune,300,400,2000000,0,1000 +10027,Arena Quick Rune,1,10,400000,0,10000 +10027,Arena Quick Rune,2,10,400000,0,10000 +10027,Arena Quick Rune,3,10,400000,0,10000 +10027,Arena Quick Rune,4,10,400000,0,10000 +10027,Arena Quick Rune,5,10,400000,0,10000 +10027,Arena Quick Rune,6,10,400000,0,10000 +10027,Arena Quick Rune,7,10,400000,0,10000 +10027,Arena Quick Rune,8,10,400000,0,10000 +10027,Arena Quick Rune,9,10,400000,0,10000 +10027,Arena Quick Rune,10,10,2000000,0,10000 +10027,Arena Quick Rune,11,10,400000,0,10000 +10027,Arena Quick Rune,12,10,400000,0,10000 +10027,Arena Quick Rune,13,10,400000,0,10000 +10027,Arena Quick Rune,14,10,400000,0,10000 +10027,Arena Quick Rune,15,10,400000,0,10000 +10027,Arena Quick Rune,16,10,400000,0,10000 +10027,Arena Quick Rune,17,10,400000,0,10000 +10027,Arena Quick Rune,18,10,400000,0,10000 +10027,Arena Quick Rune,19,10,400000,0,10000 +10027,Arena Quick Rune,20,10,2000000,0,10000 +10027,Arena Quick Rune,21,10,400000,0,10000 +10027,Arena Quick Rune,22,10,400000,0,10000 +10027,Arena Quick Rune,23,10,400000,0,10000 +10027,Arena Quick Rune,24,10,400000,0,10000 +10027,Arena Quick Rune,25,10,400000,0,10000 +10027,Arena Quick Rune,26,10,400000,0,10000 +10027,Arena Quick Rune,27,10,400000,0,10000 +10027,Arena Quick Rune,28,10,400000,0,10000 +10027,Arena Quick Rune,29,10,400000,0,10000 +10027,Arena Quick Rune,30,10,2000000,0,10000 +10027,Arena Quick Rune,31,30,600000,0,10000 +10027,Arena Quick Rune,32,30,600000,0,10000 +10027,Arena Quick Rune,33,30,600000,0,10000 +10027,Arena Quick Rune,34,30,600000,0,10000 +10027,Arena Quick Rune,35,30,600000,0,10000 +10027,Arena Quick Rune,36,30,600000,0,10000 +10027,Arena Quick Rune,37,30,600000,0,10000 +10027,Arena Quick Rune,38,30,600000,0,10000 +10027,Arena Quick Rune,39,30,600000,0,10000 +10027,Arena Quick Rune,40,30,3000000,0,10000 +10027,Arena Quick Rune,41,30,600000,0,10000 +10027,Arena Quick Rune,42,30,600000,0,10000 +10027,Arena Quick Rune,43,30,600000,0,10000 +10027,Arena Quick Rune,44,30,600000,0,10000 +10027,Arena Quick Rune,45,30,600000,0,10000 +10027,Arena Quick Rune,46,30,600000,0,10000 +10027,Arena Quick Rune,47,30,600000,0,10000 +10027,Arena Quick Rune,48,30,600000,0,10000 +10027,Arena Quick Rune,49,30,600000,0,10000 +10027,Arena Quick Rune,50,30,3000000,0,10000 +10027,Arena Quick Rune,51,30,600000,100,10000 +10027,Arena Quick Rune,52,30,600000,0,10000 +10027,Arena Quick Rune,53,30,600000,0,10000 +10027,Arena Quick Rune,54,30,600000,0,10000 +10027,Arena Quick Rune,55,30,600000,0,10000 +10027,Arena Quick Rune,56,30,600000,0,10000 +10027,Arena Quick Rune,57,30,600000,0,10000 +10027,Arena Quick Rune,58,30,600000,0,10000 +10027,Arena Quick Rune,59,30,600000,0,10000 +10027,Arena Quick Rune,60,30,3000000,0,10000 +10027,Arena Quick Rune,61,30,600000,100,10000 +10027,Arena Quick Rune,62,30,600000,0,10000 +10027,Arena Quick Rune,63,30,600000,0,10000 +10027,Arena Quick Rune,64,30,600000,0,10000 +10027,Arena Quick Rune,65,30,600000,0,10000 +10027,Arena Quick Rune,66,30,600000,0,10000 +10027,Arena Quick Rune,67,30,600000,0,10000 +10027,Arena Quick Rune,68,30,600000,0,10000 +10027,Arena Quick Rune,69,30,600000,0,10000 +10027,Arena Quick Rune,70,30,3000000,0,10000 +10027,Arena Quick Rune,71,40,1000000,150,10000 +10027,Arena Quick Rune,72,40,1000000,0,10000 +10027,Arena Quick Rune,73,40,1000000,0,10000 +10027,Arena Quick Rune,74,40,1000000,0,10000 +10027,Arena Quick Rune,75,40,1000000,0,10000 +10027,Arena Quick Rune,76,40,1000000,0,10000 +10027,Arena Quick Rune,77,40,1000000,0,10000 +10027,Arena Quick Rune,78,40,1000000,0,10000 +10027,Arena Quick Rune,79,40,1000000,0,10000 +10027,Arena Quick Rune,80,40,5000000,0,10000 +10027,Arena Quick Rune,81,40,1000000,150,10000 +10027,Arena Quick Rune,82,40,1000000,0,10000 +10027,Arena Quick Rune,83,40,1000000,0,10000 +10027,Arena Quick Rune,84,40,1000000,0,10000 +10027,Arena Quick Rune,85,40,1000000,0,10000 +10027,Arena Quick Rune,86,40,1000000,0,10000 +10027,Arena Quick Rune,87,40,1000000,0,10000 +10027,Arena Quick Rune,88,40,1000000,0,10000 +10027,Arena Quick Rune,89,40,1000000,0,10000 +10027,Arena Quick Rune,90,40,5000000,0,10000 +10027,Arena Quick Rune,91,40,1000000,150,10000 +10027,Arena Quick Rune,92,40,1000000,0,10000 +10027,Arena Quick Rune,93,40,1000000,0,10000 +10027,Arena Quick Rune,94,40,1000000,0,10000 +10027,Arena Quick Rune,95,40,1000000,0,10000 +10027,Arena Quick Rune,96,40,1000000,0,10000 +10027,Arena Quick Rune,97,40,1000000,0,10000 +10027,Arena Quick Rune,98,40,1000000,0,10000 +10027,Arena Quick Rune,99,40,1000000,0,10000 +10027,Arena Quick Rune,100,40,5000000,0,10000 +10027,Arena Quick Rune,101,40,1000000,200,10000 +10027,Arena Quick Rune,102,40,1000000,0,10000 +10027,Arena Quick Rune,103,40,1000000,0,10000 +10027,Arena Quick Rune,104,40,1000000,0,10000 +10027,Arena Quick Rune,105,40,1000000,0,10000 +10027,Arena Quick Rune,106,40,1000000,0,10000 +10027,Arena Quick Rune,107,40,1000000,0,10000 +10027,Arena Quick Rune,108,40,1000000,0,10000 +10027,Arena Quick Rune,109,40,1000000,0,10000 +10027,Arena Quick Rune,110,40,5000000,0,10000 +10027,Arena Quick Rune,111,40,1000000,200,10000 +10027,Arena Quick Rune,112,40,1000000,0,10000 +10027,Arena Quick Rune,113,40,1000000,0,10000 +10027,Arena Quick Rune,114,40,1000000,0,10000 +10027,Arena Quick Rune,115,40,1000000,0,10000 +10027,Arena Quick Rune,116,40,1000000,0,10000 +10027,Arena Quick Rune,117,40,1000000,0,10000 +10027,Arena Quick Rune,118,40,1000000,0,10000 +10027,Arena Quick Rune,119,40,1000000,0,10000 +10027,Arena Quick Rune,120,40,5000000,0,10000 +10027,Arena Quick Rune,121,40,1000000,200,10000 +10027,Arena Quick Rune,122,40,1000000,0,10000 +10027,Arena Quick Rune,123,40,1000000,0,10000 +10027,Arena Quick Rune,124,40,1000000,0,10000 +10027,Arena Quick Rune,125,40,1000000,0,10000 +10027,Arena Quick Rune,126,50,1000000,0,10000 +10027,Arena Quick Rune,127,50,1000000,0,10000 +10027,Arena Quick Rune,128,50,1000000,0,10000 +10027,Arena Quick Rune,129,50,1000000,0,10000 +10027,Arena Quick Rune,130,50,5000000,0,10000 +10027,Arena Quick Rune,131,50,1500000,200,10000 +10027,Arena Quick Rune,132,50,1500000,0,10000 +10027,Arena Quick Rune,133,50,1500000,0,10000 +10027,Arena Quick Rune,134,50,1500000,0,10000 +10027,Arena Quick Rune,135,50,1500000,0,10000 +10027,Arena Quick Rune,136,50,1500000,0,10000 +10027,Arena Quick Rune,137,50,1500000,0,10000 +10027,Arena Quick Rune,138,50,1500000,0,10000 +10027,Arena Quick Rune,139,50,1500000,0,10000 +10027,Arena Quick Rune,140,50,6000000,0,10000 +10027,Arena Quick Rune,141,50,1500000,200,10000 +10027,Arena Quick Rune,142,50,1500000,0,10000 +10027,Arena Quick Rune,143,50,1500000,0,10000 +10027,Arena Quick Rune,144,50,1500000,0,10000 +10027,Arena Quick Rune,145,50,1500000,0,10000 +10027,Arena Quick Rune,146,50,1500000,0,10000 +10027,Arena Quick Rune,147,50,1500000,0,10000 +10027,Arena Quick Rune,148,50,1500000,0,10000 +10027,Arena Quick Rune,149,50,1500000,0,10000 +10027,Arena Quick Rune,150,50,6000000,0,10000 +10027,Arena Quick Rune,151,50,1500000,200,10000 +10027,Arena Quick Rune,152,50,1500000,0,10000 +10027,Arena Quick Rune,153,50,1500000,0,10000 +10027,Arena Quick Rune,154,50,1500000,0,10000 +10027,Arena Quick Rune,155,50,1500000,0,10000 +10027,Arena Quick Rune,156,50,1500000,0,10000 +10027,Arena Quick Rune,157,50,1500000,0,10000 +10027,Arena Quick Rune,158,50,1500000,0,10000 +10027,Arena Quick Rune,159,50,1500000,0,10000 +10027,Arena Quick Rune,160,50,6000000,0,10000 +10027,Arena Quick Rune,161,50,1500000,200,10000 +10027,Arena Quick Rune,162,50,1500000,0,10000 +10027,Arena Quick Rune,163,50,1500000,0,10000 +10027,Arena Quick Rune,164,50,1500000,0,10000 +10027,Arena Quick Rune,165,50,1500000,0,10000 +10027,Arena Quick Rune,166,50,1500000,0,10000 +10027,Arena Quick Rune,167,50,1500000,0,10000 +10027,Arena Quick Rune,168,50,1500000,0,10000 +10027,Arena Quick Rune,169,50,1500000,0,10000 +10027,Arena Quick Rune,170,50,6000000,0,10000 +10027,Arena Quick Rune,171,50,1500000,200,10000 +10027,Arena Quick Rune,172,50,1500000,0,10000 +10027,Arena Quick Rune,173,50,1500000,0,10000 +10027,Arena Quick Rune,174,50,1500000,0,10000 +10027,Arena Quick Rune,175,50,1500000,0,10000 +10027,Arena Quick Rune,176,50,1500000,0,10000 +10027,Arena Quick Rune,177,50,1500000,0,10000 +10027,Arena Quick Rune,178,50,1500000,0,10000 +10027,Arena Quick Rune,179,50,1500000,0,10000 +10027,Arena Quick Rune,180,50,6000000,0,10000 +10027,Arena Quick Rune,181,50,1500000,300,10000 +10027,Arena Quick Rune,182,50,1500000,0,10000 +10027,Arena Quick Rune,183,50,1500000,0,10000 +10027,Arena Quick Rune,184,50,1500000,0,10000 +10027,Arena Quick Rune,185,50,1500000,0,10000 +10027,Arena Quick Rune,186,50,1500000,0,10000 +10027,Arena Quick Rune,187,50,1500000,0,10000 +10027,Arena Quick Rune,188,50,1500000,0,10000 +10027,Arena Quick Rune,189,50,1500000,0,10000 +10027,Arena Quick Rune,190,50,6000000,0,10000 +10027,Arena Quick Rune,191,50,1500000,300,10000 +10027,Arena Quick Rune,192,50,1500000,0,10000 +10027,Arena Quick Rune,193,50,1500000,0,10000 +10027,Arena Quick Rune,194,50,1500000,0,10000 +10027,Arena Quick Rune,195,50,1500000,0,10000 +10027,Arena Quick Rune,196,50,1500000,0,10000 +10027,Arena Quick Rune,197,50,1500000,0,10000 +10027,Arena Quick Rune,198,50,1500000,0,10000 +10027,Arena Quick Rune,199,50,1500000,0,10000 +10027,Arena Quick Rune,200,50,6000000,0,10000 +10027,Arena Quick Rune,201,80,2000000,300,10000 +10027,Arena Quick Rune,202,80,2000000,0,10000 +10027,Arena Quick Rune,203,80,2000000,0,10000 +10027,Arena Quick Rune,204,80,2000000,0,10000 +10027,Arena Quick Rune,205,80,2000000,0,10000 +10027,Arena Quick Rune,206,80,2000000,0,10000 +10027,Arena Quick Rune,207,80,2000000,0,10000 +10027,Arena Quick Rune,208,80,2000000,0,10000 +10027,Arena Quick Rune,209,80,2000000,0,10000 +10027,Arena Quick Rune,210,80,8000000,0,10000 +10027,Arena Quick Rune,211,80,2000000,500,10000 +10027,Arena Quick Rune,212,80,2000000,0,10000 +10027,Arena Quick Rune,213,80,2000000,0,10000 +10027,Arena Quick Rune,214,80,2000000,0,10000 +10027,Arena Quick Rune,215,80,2000000,0,10000 +10027,Arena Quick Rune,216,80,2000000,0,10000 +10027,Arena Quick Rune,217,80,2000000,0,10000 +10027,Arena Quick Rune,218,80,2000000,0,10000 +10027,Arena Quick Rune,219,80,2000000,0,10000 +10027,Arena Quick Rune,220,80,8000000,0,10000 +10027,Arena Quick Rune,221,80,2000000,500,10000 +10027,Arena Quick Rune,222,80,2000000,0,10000 +10027,Arena Quick Rune,223,80,2000000,0,10000 +10027,Arena Quick Rune,224,80,2000000,0,10000 +10027,Arena Quick Rune,225,80,2000000,0,10000 +10027,Arena Quick Rune,226,80,2000000,0,10000 +10027,Arena Quick Rune,227,80,2000000,0,10000 +10027,Arena Quick Rune,228,80,2000000,0,10000 +10027,Arena Quick Rune,229,80,2000000,0,10000 +10027,Arena Quick Rune,230,80,8000000,0,10000 +10027,Arena Quick Rune,231,80,2000000,500,10000 +10027,Arena Quick Rune,232,80,2000000,0,10000 +10027,Arena Quick Rune,233,80,2000000,0,10000 +10027,Arena Quick Rune,234,80,2000000,0,10000 +10027,Arena Quick Rune,235,80,2000000,0,10000 +10027,Arena Quick Rune,236,80,2000000,0,10000 +10027,Arena Quick Rune,237,80,2000000,0,10000 +10027,Arena Quick Rune,238,80,2000000,0,10000 +10027,Arena Quick Rune,239,80,2000000,0,10000 +10027,Arena Quick Rune,240,80,8000000,0,10000 +10027,Arena Quick Rune,241,80,2000000,500,10000 +10027,Arena Quick Rune,242,80,2000000,0,10000 +10027,Arena Quick Rune,243,80,2000000,0,10000 +10027,Arena Quick Rune,244,80,2000000,0,10000 +10027,Arena Quick Rune,245,80,2000000,0,10000 +10027,Arena Quick Rune,246,80,2000000,0,10000 +10027,Arena Quick Rune,247,80,2000000,0,10000 +10027,Arena Quick Rune,248,80,2000000,0,10000 +10027,Arena Quick Rune,249,80,2000000,0,10000 +10027,Arena Quick Rune,250,80,8000000,0,10000 +10027,Arena Quick Rune,251,80,2000000,500,10000 +10027,Arena Quick Rune,252,80,2000000,0,10000 +10027,Arena Quick Rune,253,80,2000000,0,10000 +10027,Arena Quick Rune,254,80,2000000,0,10000 +10027,Arena Quick Rune,255,80,2000000,0,10000 +10027,Arena Quick Rune,256,80,2000000,0,10000 +10027,Arena Quick Rune,257,80,2000000,0,10000 +10027,Arena Quick Rune,258,80,2000000,0,10000 +10027,Arena Quick Rune,259,80,2000000,0,10000 +10027,Arena Quick Rune,260,80,8000000,0,10000 +10027,Arena Quick Rune,261,80,2000000,1000,10000 +10027,Arena Quick Rune,262,80,2000000,0,10000 +10027,Arena Quick Rune,263,80,2000000,0,10000 +10027,Arena Quick Rune,264,80,2000000,0,10000 +10027,Arena Quick Rune,265,80,2000000,0,10000 +10027,Arena Quick Rune,266,80,2000000,0,10000 +10027,Arena Quick Rune,267,80,2000000,0,10000 +10027,Arena Quick Rune,268,80,2000000,0,10000 +10027,Arena Quick Rune,269,80,2000000,0,10000 +10027,Arena Quick Rune,270,80,8000000,0,10000 +10027,Arena Quick Rune,271,80,2000000,1000,10000 +10027,Arena Quick Rune,272,80,2000000,0,10000 +10027,Arena Quick Rune,273,80,2000000,0,10000 +10027,Arena Quick Rune,274,80,2000000,0,10000 +10027,Arena Quick Rune,275,80,2000000,0,10000 +10027,Arena Quick Rune,276,80,2000000,0,10000 +10027,Arena Quick Rune,277,80,2000000,0,10000 +10027,Arena Quick Rune,278,80,2000000,0,10000 +10027,Arena Quick Rune,279,80,2000000,0,10000 +10027,Arena Quick Rune,280,80,8000000,0,10000 +10027,Arena Quick Rune,281,80,2000000,1000,10000 +10027,Arena Quick Rune,282,80,2000000,0,10000 +10027,Arena Quick Rune,283,80,2000000,0,10000 +10027,Arena Quick Rune,284,80,2000000,0,10000 +10027,Arena Quick Rune,285,80,2000000,0,10000 +10027,Arena Quick Rune,286,80,2000000,0,10000 +10027,Arena Quick Rune,287,80,2000000,0,10000 +10027,Arena Quick Rune,288,80,2000000,0,10000 +10027,Arena Quick Rune,289,80,2000000,0,10000 +10027,Arena Quick Rune,290,80,8000000,0,10000 +10027,Arena Quick Rune,291,80,2000000,1000,10000 +10027,Arena Quick Rune,292,80,2000000,0,10000 +10027,Arena Quick Rune,293,80,2000000,0,10000 +10027,Arena Quick Rune,294,80,2000000,0,10000 +10027,Arena Quick Rune,295,80,2000000,0,10000 +10027,Arena Quick Rune,296,80,2000000,0,10000 +10027,Arena Quick Rune,297,80,2000000,0,10000 +10027,Arena Quick Rune,298,80,2000000,0,10000 +10027,Arena Quick Rune,299,80,2000000,0,10000 +10027,Arena Quick Rune,300,80,8000000,0,10000 +10028,WorldBoss Quick Rune,1,4,200000,0,10000 +10028,WorldBoss Quick Rune,2,2,200000,0,10000 +10028,WorldBoss Quick Rune,3,2,200000,0,10000 +10028,WorldBoss Quick Rune,4,2,200000,0,10000 +10028,WorldBoss Quick Rune,5,2,200000,0,10000 +10028,WorldBoss Quick Rune,6,2,200000,0,10000 +10028,WorldBoss Quick Rune,7,2,200000,0,10000 +10028,WorldBoss Quick Rune,8,2,200000,0,10000 +10028,WorldBoss Quick Rune,9,2,200000,0,10000 +10028,WorldBoss Quick Rune,10,0,1000000,0,5000 +10028,WorldBoss Quick Rune,11,10,200000,0,10000 +10028,WorldBoss Quick Rune,12,10,200000,0,10000 +10028,WorldBoss Quick Rune,13,10,200000,0,10000 +10028,WorldBoss Quick Rune,14,10,200000,0,10000 +10028,WorldBoss Quick Rune,15,10,200000,0,10000 +10028,WorldBoss Quick Rune,16,10,200000,0,10000 +10028,WorldBoss Quick Rune,17,10,200000,0,10000 +10028,WorldBoss Quick Rune,18,10,200000,0,10000 +10028,WorldBoss Quick Rune,19,10,200000,0,10000 +10028,WorldBoss Quick Rune,20,0,1000000,0,5000 +10028,WorldBoss Quick Rune,21,15,200000,0,10000 +10028,WorldBoss Quick Rune,22,15,200000,0,10000 +10028,WorldBoss Quick Rune,23,15,200000,0,10000 +10028,WorldBoss Quick Rune,24,15,200000,0,10000 +10028,WorldBoss Quick Rune,25,15,200000,0,10000 +10028,WorldBoss Quick Rune,26,15,200000,0,10000 +10028,WorldBoss Quick Rune,27,15,200000,0,10000 +10028,WorldBoss Quick Rune,28,15,200000,0,10000 +10028,WorldBoss Quick Rune,29,15,200000,0,10000 +10028,WorldBoss Quick Rune,30,0,1000000,0,5000 +10028,WorldBoss Quick Rune,31,20,200000,0,10000 +10028,WorldBoss Quick Rune,32,20,200000,0,10000 +10028,WorldBoss Quick Rune,33,20,200000,0,10000 +10028,WorldBoss Quick Rune,34,20,200000,0,10000 +10028,WorldBoss Quick Rune,35,20,200000,0,10000 +10028,WorldBoss Quick Rune,36,20,200000,0,10000 +10028,WorldBoss Quick Rune,37,20,200000,0,10000 +10028,WorldBoss Quick Rune,38,20,200000,0,10000 +10028,WorldBoss Quick Rune,39,20,200000,0,10000 +10028,WorldBoss Quick Rune,40,0,1000000,0,5000 +10028,WorldBoss Quick Rune,41,25,200000,0,10000 +10028,WorldBoss Quick Rune,42,25,200000,0,10000 +10028,WorldBoss Quick Rune,43,25,200000,0,10000 +10028,WorldBoss Quick Rune,44,25,200000,0,10000 +10028,WorldBoss Quick Rune,45,25,200000,0,10000 +10028,WorldBoss Quick Rune,46,25,200000,0,10000 +10028,WorldBoss Quick Rune,47,25,200000,0,10000 +10028,WorldBoss Quick Rune,48,25,200000,0,10000 +10028,WorldBoss Quick Rune,49,25,200000,0,10000 +10028,WorldBoss Quick Rune,50,0,1000000,0,5000 +10028,WorldBoss Quick Rune,51,30,200000,100,10000 +10028,WorldBoss Quick Rune,52,30,200000,0,10000 +10028,WorldBoss Quick Rune,53,30,200000,0,10000 +10028,WorldBoss Quick Rune,54,30,200000,0,10000 +10028,WorldBoss Quick Rune,55,30,200000,0,10000 +10028,WorldBoss Quick Rune,56,30,200000,0,10000 +10028,WorldBoss Quick Rune,57,30,200000,0,10000 +10028,WorldBoss Quick Rune,58,30,200000,0,10000 +10028,WorldBoss Quick Rune,59,30,200000,0,10000 +10028,WorldBoss Quick Rune,60,0,1000000,0,5000 +10028,WorldBoss Quick Rune,61,35,200000,100,10000 +10028,WorldBoss Quick Rune,62,35,200000,0,10000 +10028,WorldBoss Quick Rune,63,35,200000,0,10000 +10028,WorldBoss Quick Rune,64,35,200000,0,10000 +10028,WorldBoss Quick Rune,65,35,200000,0,10000 +10028,WorldBoss Quick Rune,66,35,200000,0,10000 +10028,WorldBoss Quick Rune,67,35,200000,0,10000 +10028,WorldBoss Quick Rune,68,35,200000,0,10000 +10028,WorldBoss Quick Rune,69,35,200000,0,10000 +10028,WorldBoss Quick Rune,70,0,1000000,0,5000 +10028,WorldBoss Quick Rune,71,40,500000,200,10000 +10028,WorldBoss Quick Rune,72,40,500000,0,9000 +10028,WorldBoss Quick Rune,73,40,500000,0,8000 +10028,WorldBoss Quick Rune,74,40,500000,0,10000 +10028,WorldBoss Quick Rune,75,40,500000,0,9000 +10028,WorldBoss Quick Rune,76,40,500000,0,8000 +10028,WorldBoss Quick Rune,77,40,500000,0,10000 +10028,WorldBoss Quick Rune,78,40,500000,0,9000 +10028,WorldBoss Quick Rune,79,40,500000,0,8000 +10028,WorldBoss Quick Rune,80,0,3000000,0,5000 +10028,WorldBoss Quick Rune,81,45,500000,200,10000 +10028,WorldBoss Quick Rune,82,45,500000,0,9000 +10028,WorldBoss Quick Rune,83,45,500000,0,8000 +10028,WorldBoss Quick Rune,84,45,500000,0,10000 +10028,WorldBoss Quick Rune,85,45,500000,0,9000 +10028,WorldBoss Quick Rune,86,45,500000,0,8000 +10028,WorldBoss Quick Rune,87,45,500000,0,10000 +10028,WorldBoss Quick Rune,88,45,500000,0,9000 +10028,WorldBoss Quick Rune,89,45,500000,0,8000 +10028,WorldBoss Quick Rune,90,0,3000000,0,5000 +10028,WorldBoss Quick Rune,91,50,500000,200,10000 +10028,WorldBoss Quick Rune,92,50,500000,0,9000 +10028,WorldBoss Quick Rune,93,50,500000,0,8000 +10028,WorldBoss Quick Rune,94,50,500000,0,10000 +10028,WorldBoss Quick Rune,95,50,500000,0,9000 +10028,WorldBoss Quick Rune,96,50,500000,0,8000 +10028,WorldBoss Quick Rune,97,50,500000,0,10000 +10028,WorldBoss Quick Rune,98,50,500000,0,9000 +10028,WorldBoss Quick Rune,99,50,500000,0,8000 +10028,WorldBoss Quick Rune,100,0,3000000,0,5000 +10028,WorldBoss Quick Rune,101,55,500000,200,10000 +10028,WorldBoss Quick Rune,102,55,500000,0,9000 +10028,WorldBoss Quick Rune,103,55,500000,0,8000 +10028,WorldBoss Quick Rune,104,55,500000,0,10000 +10028,WorldBoss Quick Rune,105,55,500000,0,9000 +10028,WorldBoss Quick Rune,106,55,500000,0,8000 +10028,WorldBoss Quick Rune,107,55,500000,0,10000 +10028,WorldBoss Quick Rune,108,55,500000,0,9000 +10028,WorldBoss Quick Rune,109,55,500000,0,8000 +10028,WorldBoss Quick Rune,110,0,3000000,0,5000 +10028,WorldBoss Quick Rune,111,60,500000,200,10000 +10028,WorldBoss Quick Rune,112,60,500000,0,9000 +10028,WorldBoss Quick Rune,113,60,500000,0,8000 +10028,WorldBoss Quick Rune,114,60,500000,0,10000 +10028,WorldBoss Quick Rune,115,60,500000,0,9000 +10028,WorldBoss Quick Rune,116,60,500000,0,8000 +10028,WorldBoss Quick Rune,117,60,500000,0,10000 +10028,WorldBoss Quick Rune,118,60,500000,0,9000 +10028,WorldBoss Quick Rune,119,60,500000,0,8000 +10028,WorldBoss Quick Rune,120,0,3000000,0,5000 +10028,WorldBoss Quick Rune,121,65,500000,200,10000 +10028,WorldBoss Quick Rune,122,65,500000,0,9000 +10028,WorldBoss Quick Rune,123,65,500000,0,8000 +10028,WorldBoss Quick Rune,124,65,500000,0,10000 +10028,WorldBoss Quick Rune,125,65,500000,0,9000 +10028,WorldBoss Quick Rune,126,65,500000,0,8000 +10028,WorldBoss Quick Rune,127,65,500000,0,10000 +10028,WorldBoss Quick Rune,128,65,500000,0,9000 +10028,WorldBoss Quick Rune,129,65,500000,0,8000 +10028,WorldBoss Quick Rune,130,0,3000000,0,5000 +10028,WorldBoss Quick Rune,131,70,500000,200,10000 +10028,WorldBoss Quick Rune,132,70,500000,0,9000 +10028,WorldBoss Quick Rune,133,70,500000,0,8000 +10028,WorldBoss Quick Rune,134,70,500000,0,10000 +10028,WorldBoss Quick Rune,135,70,500000,0,9000 +10028,WorldBoss Quick Rune,136,70,500000,0,8000 +10028,WorldBoss Quick Rune,137,70,500000,0,10000 +10028,WorldBoss Quick Rune,138,70,500000,0,9000 +10028,WorldBoss Quick Rune,139,70,500000,0,8000 +10028,WorldBoss Quick Rune,140,0,3000000,0,5000 +10028,WorldBoss Quick Rune,141,75,500000,200,10000 +10028,WorldBoss Quick Rune,142,75,500000,0,9000 +10028,WorldBoss Quick Rune,143,75,500000,0,8000 +10028,WorldBoss Quick Rune,144,75,500000,0,10000 +10028,WorldBoss Quick Rune,145,75,500000,0,9000 +10028,WorldBoss Quick Rune,146,75,500000,0,8000 +10028,WorldBoss Quick Rune,147,75,500000,0,10000 +10028,WorldBoss Quick Rune,148,75,500000,0,9000 +10028,WorldBoss Quick Rune,149,75,500000,0,8000 +10028,WorldBoss Quick Rune,150,0,3000000,0,5000 +10028,WorldBoss Quick Rune,151,80,500000,200,10000 +10028,WorldBoss Quick Rune,152,80,500000,0,9000 +10028,WorldBoss Quick Rune,153,80,500000,0,8000 +10028,WorldBoss Quick Rune,154,80,500000,0,10000 +10028,WorldBoss Quick Rune,155,80,500000,0,9000 +10028,WorldBoss Quick Rune,156,80,500000,0,8000 +10028,WorldBoss Quick Rune,157,80,500000,0,10000 +10028,WorldBoss Quick Rune,158,80,500000,0,9000 +10028,WorldBoss Quick Rune,159,80,500000,0,8000 +10028,WorldBoss Quick Rune,160,0,3000000,0,5000 +10028,WorldBoss Quick Rune,161,80,500000,200,10000 +10028,WorldBoss Quick Rune,162,80,500000,0,9000 +10028,WorldBoss Quick Rune,163,80,500000,0,8000 +10028,WorldBoss Quick Rune,164,80,500000,0,10000 +10028,WorldBoss Quick Rune,165,80,500000,0,9000 +10028,WorldBoss Quick Rune,166,80,500000,0,8000 +10028,WorldBoss Quick Rune,167,80,500000,0,10000 +10028,WorldBoss Quick Rune,168,80,500000,0,9000 +10028,WorldBoss Quick Rune,169,80,500000,0,8000 +10028,WorldBoss Quick Rune,170,0,3000000,0,5000 +10028,WorldBoss Quick Rune,171,80,500000,200,10000 +10028,WorldBoss Quick Rune,172,80,500000,0,9000 +10028,WorldBoss Quick Rune,173,80,500000,0,8000 +10028,WorldBoss Quick Rune,174,80,500000,0,10000 +10028,WorldBoss Quick Rune,175,80,500000,0,9000 +10028,WorldBoss Quick Rune,176,80,500000,0,8000 +10028,WorldBoss Quick Rune,177,80,500000,0,10000 +10028,WorldBoss Quick Rune,178,80,500000,0,9000 +10028,WorldBoss Quick Rune,179,80,500000,0,8000 +10028,WorldBoss Quick Rune,180,0,3000000,0,5000 +10028,WorldBoss Quick Rune,181,80,500000,200,10000 +10028,WorldBoss Quick Rune,182,80,500000,0,9000 +10028,WorldBoss Quick Rune,183,80,500000,0,8000 +10028,WorldBoss Quick Rune,184,80,500000,0,10000 +10028,WorldBoss Quick Rune,185,80,500000,0,9000 +10028,WorldBoss Quick Rune,186,80,500000,0,8000 +10028,WorldBoss Quick Rune,187,80,500000,0,10000 +10028,WorldBoss Quick Rune,188,80,500000,0,9000 +10028,WorldBoss Quick Rune,189,80,500000,0,8000 +10028,WorldBoss Quick Rune,190,0,3000000,0,5000 +10028,WorldBoss Quick Rune,191,80,500000,200,10000 +10028,WorldBoss Quick Rune,192,80,500000,0,9000 +10028,WorldBoss Quick Rune,193,80,500000,0,8000 +10028,WorldBoss Quick Rune,194,80,500000,0,10000 +10028,WorldBoss Quick Rune,195,80,500000,0,9000 +10028,WorldBoss Quick Rune,196,80,500000,0,8000 +10028,WorldBoss Quick Rune,197,80,500000,0,10000 +10028,WorldBoss Quick Rune,198,80,500000,0,9000 +10028,WorldBoss Quick Rune,199,80,500000,0,8000 +10028,WorldBoss Quick Rune,200,0,3000000,0,5000 +10028,WorldBoss Quick Rune,201,80,800000,800,10000 +10028,WorldBoss Quick Rune,202,80,800000,0,9000 +10028,WorldBoss Quick Rune,203,80,800000,0,8000 +10028,WorldBoss Quick Rune,204,80,800000,0,10000 +10028,WorldBoss Quick Rune,205,80,800000,0,9000 +10028,WorldBoss Quick Rune,206,80,800000,0,8000 +10028,WorldBoss Quick Rune,207,80,800000,0,10000 +10028,WorldBoss Quick Rune,208,80,800000,0,9000 +10028,WorldBoss Quick Rune,209,80,800000,0,8000 +10028,WorldBoss Quick Rune,210,0,5000000,0,5000 +10028,WorldBoss Quick Rune,211,80,800000,800,10000 +10028,WorldBoss Quick Rune,212,80,800000,0,9000 +10028,WorldBoss Quick Rune,213,80,800000,0,8000 +10028,WorldBoss Quick Rune,214,80,800000,0,10000 +10028,WorldBoss Quick Rune,215,80,800000,0,9000 +10028,WorldBoss Quick Rune,216,80,800000,0,8000 +10028,WorldBoss Quick Rune,217,80,800000,0,10000 +10028,WorldBoss Quick Rune,218,80,800000,0,9000 +10028,WorldBoss Quick Rune,219,80,800000,0,8000 +10028,WorldBoss Quick Rune,220,0,5000000,0,5000 +10028,WorldBoss Quick Rune,221,80,800000,800,10000 +10028,WorldBoss Quick Rune,222,80,800000,0,9000 +10028,WorldBoss Quick Rune,223,80,800000,0,8000 +10028,WorldBoss Quick Rune,224,80,800000,0,10000 +10028,WorldBoss Quick Rune,225,80,800000,0,9000 +10028,WorldBoss Quick Rune,226,80,800000,0,8000 +10028,WorldBoss Quick Rune,227,80,800000,0,10000 +10028,WorldBoss Quick Rune,228,80,800000,0,9000 +10028,WorldBoss Quick Rune,229,80,800000,0,8000 +10028,WorldBoss Quick Rune,230,0,5000000,0,5000 +10028,WorldBoss Quick Rune,231,80,800000,800,10000 +10028,WorldBoss Quick Rune,232,80,800000,0,9000 +10028,WorldBoss Quick Rune,233,80,800000,0,8000 +10028,WorldBoss Quick Rune,234,80,800000,0,10000 +10028,WorldBoss Quick Rune,235,80,800000,0,9000 +10028,WorldBoss Quick Rune,236,80,800000,0,8000 +10028,WorldBoss Quick Rune,237,80,800000,0,10000 +10028,WorldBoss Quick Rune,238,80,800000,0,9000 +10028,WorldBoss Quick Rune,239,80,800000,0,8000 +10028,WorldBoss Quick Rune,240,0,5000000,0,5000 +10028,WorldBoss Quick Rune,241,80,800000,800,10000 +10028,WorldBoss Quick Rune,242,80,800000,0,9000 +10028,WorldBoss Quick Rune,243,80,800000,0,8000 +10028,WorldBoss Quick Rune,244,80,800000,0,10000 +10028,WorldBoss Quick Rune,245,80,800000,0,9000 +10028,WorldBoss Quick Rune,246,80,800000,0,8000 +10028,WorldBoss Quick Rune,247,80,800000,0,10000 +10028,WorldBoss Quick Rune,248,80,800000,0,9000 +10028,WorldBoss Quick Rune,249,80,800000,0,8000 +10028,WorldBoss Quick Rune,250,0,5000000,0,5000 +10028,WorldBoss Quick Rune,251,80,800000,800,10000 +10028,WorldBoss Quick Rune,252,80,800000,0,9000 +10028,WorldBoss Quick Rune,253,80,800000,0,8000 +10028,WorldBoss Quick Rune,254,80,800000,0,10000 +10028,WorldBoss Quick Rune,255,80,800000,0,9000 +10028,WorldBoss Quick Rune,256,80,800000,0,8000 +10028,WorldBoss Quick Rune,257,80,800000,0,10000 +10028,WorldBoss Quick Rune,258,80,800000,0,9000 +10028,WorldBoss Quick Rune,259,80,800000,0,8000 +10028,WorldBoss Quick Rune,260,0,5000000,0,5000 +10028,WorldBoss Quick Rune,261,80,800000,800,10000 +10028,WorldBoss Quick Rune,262,80,800000,0,9000 +10028,WorldBoss Quick Rune,263,80,800000,0,8000 +10028,WorldBoss Quick Rune,264,80,800000,0,10000 +10028,WorldBoss Quick Rune,265,80,800000,0,9000 +10028,WorldBoss Quick Rune,266,80,800000,0,8000 +10028,WorldBoss Quick Rune,267,80,800000,0,10000 +10028,WorldBoss Quick Rune,268,80,800000,0,9000 +10028,WorldBoss Quick Rune,269,80,800000,0,8000 +10028,WorldBoss Quick Rune,270,0,5000000,0,5000 +10028,WorldBoss Quick Rune,271,80,800000,800,10000 +10028,WorldBoss Quick Rune,272,80,800000,0,9000 +10028,WorldBoss Quick Rune,273,80,800000,0,8000 +10028,WorldBoss Quick Rune,274,80,800000,0,10000 +10028,WorldBoss Quick Rune,275,80,800000,0,9000 +10028,WorldBoss Quick Rune,276,80,800000,0,8000 +10028,WorldBoss Quick Rune,277,80,800000,0,10000 +10028,WorldBoss Quick Rune,278,80,800000,0,9000 +10028,WorldBoss Quick Rune,279,80,800000,0,8000 +10028,WorldBoss Quick Rune,280,0,5000000,0,5000 +10028,WorldBoss Quick Rune,281,80,800000,800,10000 +10028,WorldBoss Quick Rune,282,80,800000,0,9000 +10028,WorldBoss Quick Rune,283,80,800000,0,8000 +10028,WorldBoss Quick Rune,284,80,800000,0,10000 +10028,WorldBoss Quick Rune,285,80,800000,0,9000 +10028,WorldBoss Quick Rune,286,80,800000,0,8000 +10028,WorldBoss Quick Rune,287,80,800000,0,10000 +10028,WorldBoss Quick Rune,288,80,800000,0,9000 +10028,WorldBoss Quick Rune,289,80,800000,0,8000 +10028,WorldBoss Quick Rune,290,0,5000000,0,5000 +10028,WorldBoss Quick Rune,291,80,800000,800,10000 +10028,WorldBoss Quick Rune,292,80,800000,0,9000 +10028,WorldBoss Quick Rune,293,80,800000,0,8000 +10028,WorldBoss Quick Rune,294,80,800000,0,10000 +10028,WorldBoss Quick Rune,295,80,800000,0,9000 +10028,WorldBoss Quick Rune,296,80,800000,0,8000 +10028,WorldBoss Quick Rune,297,80,800000,0,10000 +10028,WorldBoss Quick Rune,298,80,800000,0,9000 +10028,WorldBoss Quick Rune,299,80,800000,0,8000 +10028,WorldBoss Quick Rune,300,0,5000000,0,5000 \ No newline at end of file diff --git a/Lib9c/TableCSV/RuneListSheet.csv b/Lib9c/TableCSV/RuneListSheet.csv index 49109f5d7..79469f781 100644 --- a/Lib9c/TableCSV/RuneListSheet.csv +++ b/Lib9c/TableCSV/RuneListSheet.csv @@ -6,4 +6,12 @@ id,_name,grade,rune_type,required_level,use_place 10011,Saehrimnir HIT Rune,2,1,1,7 10012,Saehrimnir DEF Rune,3,1,1,3 10013,Saehrimnir Skill Rune,5,2,1,7 -20001,Golden leaf Rune,5,2,1,7 \ No newline at end of file +20001,Golden leaf Rune,5,2,1,7 +10021,Adventure Stun Rune,5,2,1,1 +10022,Arena Stun Rune,5,2,1,2 +10023,Adventure Vampiric Rune,5,2,1,1 +10024,WorldBoss Vampiric Rune,5,2,1,4 +10025,Adventure Stamina Rune,4,1,1,1 +10026,Arena Stamina Rune,4,1,1,2 +10027,Arena Quick Rune,4,1,1,2 +10028,WorldBoss Quick Rune,4,1,1,4 \ No newline at end of file diff --git a/Lib9c/TableCSV/RuneSheet.csv b/Lib9c/TableCSV/RuneSheet.csv index cbe409846..f2cbcabe5 100644 --- a/Lib9c/TableCSV/RuneSheet.csv +++ b/Lib9c/TableCSV/RuneSheet.csv @@ -6,4 +6,12 @@ id,_name,ticker 10012,Saehrimnir DEF Rune,RUNESTONE_SAEHRIMNIR2 10013,Saehrimnir Skill Rune,RUNESTONE_SAEHRIMNIR3 30001,Adventurer's Rune,RUNE_ADVENTURER -20001,Golden leaf Rune,RUNE_GOLDENLEAF \ No newline at end of file +20001,Golden leaf Rune,RUNE_GOLDENLEAF +10021,Adventure Stun Rune,RUNESTONE_STUN_ADVENTURE +10022,Arena Stun Rune,RUNESTONE_STUN_ARENA +10023,Adventure Vampiric Rune,RUNESTONE_VAMPIRIC_ADVENTURE +10024,WorldBoss Vampiric Rune,RUNESTONE_VAMPIRIC_WORLDBOSS +10025,Adventure Stamina Rune,RUNESTONE_STAMINA_ADVENTURE +10026,Arena Stamina Rune,RUNESTONE_STAMINA_ARENA +10027,Arena Quick Rune,RUNESTONE_QUICK_ARENA +10028,WorldBoss Quick Rune,RUNESTONE_QUICK_WORLDBOSS \ No newline at end of file diff --git a/Lib9c/TableCSV/Skill/ActionBuffSheet.csv b/Lib9c/TableCSV/Skill/ActionBuffSheet.csv index 014a9d3c2..29df06c98 100644 --- a/Lib9c/TableCSV/Skill/ActionBuffSheet.csv +++ b/Lib9c/TableCSV/Skill/ActionBuffSheet.csv @@ -2,4 +2,7 @@ id,group,_name,chance,duration,target_type,buff_type,elemental_type,atk_power_ra 500001,500001,출혈(0.5),100,10,Enemy,Bleed,Normal,0.5 500002,500001,출혈(0.4),100,10,Enemy,Bleed,Normal,0.4 500003,500001,출혈(0.2),100,10,Enemy,Bleed,Normal,0.2 -600001,600001,출혈,100,0,Enemies,Bleed,Normal,1 \ No newline at end of file +600001,600001,출혈,100,0,Enemies,Bleed,Normal,1 +704000,704000,기절,100,0,Enemy,Stun,Normal,0 +704001,704000,기절,100,0,Enemies,Stun,Normal,0 +705000,705000,흡혈,100,0,Self,Vampiric,Normal,0 \ No newline at end of file diff --git a/Lib9c/TableCSV/Skill/SkillActionBuffSheet.csv b/Lib9c/TableCSV/Skill/SkillActionBuffSheet.csv index 1f99b5756..61cbe2442 100644 --- a/Lib9c/TableCSV/Skill/SkillActionBuffSheet.csv +++ b/Lib9c/TableCSV/Skill/SkillActionBuffSheet.csv @@ -2,4 +2,7 @@ skill_id,buff_id 500003,500001 500004,500002 500005,500003 -600001,600001 \ No newline at end of file +600001,600001 +700004,704000 +700005,704001 +700006,705000 \ No newline at end of file diff --git a/Lib9c/TableCSV/Skill/SkillSheet.csv b/Lib9c/TableCSV/Skill/SkillSheet.csv index 3e6b9a074..1a9ef43cc 100644 --- a/Lib9c/TableCSV/Skill/SkillSheet.csv +++ b/Lib9c/TableCSV/Skill/SkillSheet.csv @@ -166,4 +166,7 @@ _250001,속도 증가(전체),Normal,Buff,SpeedBuff,Ally,1,1 // 미구현 600001,출혈,Normal,Debuff,Buff,Enemy,1,15 700001,피해 감소 (고정),Normal,Buff,DamageReductionBuff,Self,1,15 700002,피해 감소 (비율),Normal,Buff,DamageReductionBuff,Self,1,15 -700003,치명 데미지 증가,Normal,Buff,CriticalDamageBuff,Self,1,15 \ No newline at end of file +700003,치명 데미지 증가,Normal,Buff,CriticalDamageBuff,Self,1,15 +700004,기절,Normal,Debuff,Buff,Enemy,1,15 +700005,기절,Normal,Debuff,Buff,Enemies,1,15 +700006,흡혈,Normal,Buff,Buff,Self,1,15 \ No newline at end of file diff --git a/Lib9c/TableCSV/Summon/SummonSheet.csv b/Lib9c/TableCSV/Summon/SummonSheet.csv index 382e834fc..a15f64a26 100644 --- a/Lib9c/TableCSV/Summon/SummonSheet.csv +++ b/Lib9c/TableCSV/Summon/SummonSheet.csv @@ -1,3 +1,4 @@ groupID,cost_material,cost_material_count,cost_ncg,recipe1ID,recipe1ratio,recipe2ID,recipe2ratio,recipe3ID,recipe3ratio,recipe4ID,recipe4ratio,recipe5ID,recipe5ratio,recipe6ID,recipe6ratio,recipe7ID,recipe7ratio,recipe8ID,recipe8ratio,recipe9ID,recipe9ratio,recipe10ID,recipe10ratio,recipe11ID,recipe11ratio,recipe12ID,recipe12ratio,recipe13ID,recipe13ratio,recipe14ID,recipe14ratio,recipe15ID,recipe15ratio 10001,800201,10,0,171,70,172,29,173,1,,,,,,,,,,,,,,,,,,,,,,,, -10002,600201,20,0,174,6500,175,2940,176,510,177,45,178,5,179,6500,180,2940,181,510,182,45,183,5,184,6500,185,2940,186,510,187,45,188,5 \ No newline at end of file +10002,600201,20,0,174,6500,175,2940,176,510,177,45,178,5,179,6500,180,2940,181,510,182,45,183,5,184,6500,185,2940,186,510,187,45,188,5 +20001,600201,10,0,10021,20,10022,20,10023,20,10024,20,10025,60,10026,60,10027,60,10028,60,10001,40,10002,100,10003,200,10011,40,10012,100,10013,200,, diff --git a/Lib9c/TableData/RedeemCodeListSheet.cs b/Lib9c/TableData/RedeemCodeListSheet.cs index b7f95fd12..e09143418 100644 --- a/Lib9c/TableData/RedeemCodeListSheet.cs +++ b/Lib9c/TableData/RedeemCodeListSheet.cs @@ -24,7 +24,7 @@ public override void Set(IReadOnlyList fields) { Id = ParseInt(fields[0]); RewardId = ParseInt(fields[1]); - PublicKeyBinary = ByteUtil.ParseHex(fields[2]); + PublicKeyBinary = new Binary(ByteUtil.ParseHex(fields[2])); } }