public IField Get(int id) { lock (this) { if (!_fields.ContainsKey(id)) { var template = _templateManager.Get <FieldTemplate>(id); if (template == null) { return(null); } var generators = new List <IFieldGenerator>(); var field = new Field(template, generators); template.Life.ForEach(l => { switch (l.Type) { case FieldLifeType.NPC: field.Enter(new FieldNPC(_templateManager.Get <NPCTemplate>(l.ID), l.Left) { Position = l.Position, Foothold = (short)l.FH, RX0 = l.RX0, RX1 = l.RX1 }); break; case FieldLifeType.Monster: generators.Add(new MobFieldGenerator( l, _templateManager.Get <MobTemplate>(l.ID) )); break; default: throw new ArgumentOutOfRangeException(); } }); template.Reactors.ForEach(r => { generators.Add(new ReactorFieldGenerator( r, _templateManager.Get <ReactorTemplate>(r.ID) )); }); _fields[id] = field; } return(_fields[id]); } }
private void ApplyItemOption(ITemplateManager <ItemOptionTemplate> options, int itemOptionID, int level) { if (itemOptionID <= 0) { return; } var option = options.Get(itemOptionID); var data = option.LevelData[level]; PAD += data.IncPAD; PDD += data.IncPDD; MAD += data.IncMAD; MDD += data.IncMDD; ACC += data.IncACC; EVA += data.IncEVA; Speed += data.IncSpeed; Jump += data.IncJump; Option.PADr += data.IncPADr; Option.PDDr += data.IncPDDr; Option.MADr += data.IncMADr; Option.MDDr += data.IncMDDr; Option.ACCr += data.IncACCr; Option.EVAr += data.IncEVAr; }
public IField Get(int id) { lock (this) { if (!_fields.ContainsKey(id)) { var template = _templateManager.Get <FieldTemplate>(id); if (template == null) { return(null); } var field = new Field(template); field.Template.Life.ForEach(l => { switch (l.Type) { case FieldLifeType.NPC: field.Enter(new FieldNPC(_templateManager.Get <NPCTemplate>(l.ID)) { Position = l.Position, MoveAction = l.F, Foothold = (short)l.FH, RX0 = l.RX0, RX1 = l.RX1 }); break; case FieldLifeType.Monster: break; default: throw new ArgumentOutOfRangeException(); } }); _fields[id] = field; } return(_fields[id]); } }
private void ApplyItemOption(ITemplateManager templates, int itemOptionID, int level) { if (itemOptionID <= 0) { return; } var option = templates.Get <ItemOptionTemplate>(itemOptionID); var data = option.LevelData[level]; STR += data.IncSTR; DEX += data.IncDEX; INT += data.IncINT; LUK += data.IncLUK; MaxHP += data.IncMaxHP; MaxMP += data.IncMaxMP; RateOption.STRr += data.IncSTRr; RateOption.DEXr += data.IncDEXr; RateOption.INTr += data.IncINTr; RateOption.LUKr += data.IncLUKr; RateOption.MaxHPr += data.IncMaxHPr; RateOption.MaxMPr += data.IncMaxMPr; PAD += data.IncPAD; PDD += data.IncPDD; MAD += data.IncMAD; MDD += data.IncMDD; ACC += data.IncACC; EVA += data.IncEVA; Speed += data.IncSpeed; Jump += data.IncJump; RateOption.PADr += data.IncPADr; RateOption.PDDr += data.IncPDDr; RateOption.MADr += data.IncMADr; RateOption.MDDr += data.IncMDDr; RateOption.ACCr += data.IncACCr; RateOption.EVAr += data.IncEVAr; }
private void ApplyItemOption(ITemplateManager <ItemOptionTemplate> options, int itemOptionID, int level) { if (itemOptionID <= 0) { return; } var option = options.Get(itemOptionID); var data = option.LevelData[level]; STR += data.IncSTR; DEX += data.IncDEX; INT += data.IncINT; LUK += data.IncLUK; MaxHP += data.IncMaxHP; MaxMP += data.IncMaxMP; Option.STRr += data.IncSTRr; Option.DEXr += data.IncDEXr; Option.INTr += data.IncINTr; Option.LUKr += data.IncLUKr; Option.MaxHPr += data.IncMaxHPr; Option.MaxMPr += data.IncMaxMPr; }
public Commodity Get(int id) { lock (this) { if (!_commodities.ContainsKey(id)) { var t = _templateManager.Get <CommodityTemplate>(id); var m = _templateManager.Get <ModifiedCommodityTemplate>(id); Commodity c = null; if (t != null) { c = new Commodity { SN = id, ItemID = t.ItemID, Count = t.Count, Priority = t.Priority, Price = t.Price, Bonus = t.Bonus, Period = t.Period, ReqPOP = t.ReqPOP, ReqLEV = t.ReqLEV, MaplePoint = t.MaplePoint, Meso = t.Meso, ForPremiumUser = t.ForPremiumUser, Gender = t.Gender, OnSale = t.OnSale, Class = t.Class, Limit = t.Limit, PbCash = t.PbCash, PbPoint = t.PbPoint, PbGift = t.PbGift }; var p = _templateManager.Get <CashPackageTemplate>(c.ItemID); if (p != null) { c.PackageSN = p.PackageSN; } } if (m != null) { if (c == null) { c = new Commodity(); } if (m.ItemID.HasValue) { c.ItemID = m.ItemID.Value; } if (m.Count.HasValue) { c.Count = m.Count.Value; } if (m.Priority.HasValue) { c.Priority = m.Priority.Value; } if (m.Price.HasValue) { c.Price = m.Price.Value; } if (m.Bonus.HasValue) { c.Bonus = m.Bonus.Value; } if (m.Period.HasValue) { c.Period = m.Period.Value; } if (m.ReqPOP.HasValue) { c.ReqPOP = m.ReqPOP.Value; } if (m.ReqLEV.HasValue) { c.ReqLEV = m.ReqLEV.Value; } if (m.MaplePoint.HasValue) { c.MaplePoint = m.MaplePoint.Value; } if (m.Meso.HasValue) { c.Meso = m.Meso.Value; } if (m.ForPremiumUser.HasValue) { c.ForPremiumUser = m.ForPremiumUser.Value; } if (m.Gender.HasValue) { c.Gender = Convert.ToSByte(m.Gender.Value); } if (m.OnSale.HasValue) { c.OnSale = m.OnSale.Value; } if (m.Class.HasValue) { c.Class = m.Class.Value; } if (m.Limit.HasValue) { c.Limit = m.Limit.Value; } if (m.PbCash.HasValue) { c.PbCash = m.PbCash.Value; } if (m.PbPoint.HasValue) { c.PbPoint = m.PbPoint.Value; } if (m.PbGift.HasValue) { c.PbGift = m.PbGift.Value; } if (m.PackageSN != null) { c.PackageSN = m.PackageSN; } } c.OnSale = _templateManager.Get <NotSaleTemplate>(id) == null; if (c == null) { return(null); } _commodities[id] = c; } return(_commodities[id]); } }
public Task <IActionResult> Get([FromRoute] Guid templateId, CancellationToken cancellationToken) { return(SafeInvoke(async() => Ok(_mapper.Map <TemplateDetails>(await _templateManager.Get(templateId, cancellationToken))))); }
public async Task OnTick(DateTime now) { var eventState = State; var nextState = State; switch (State) { case ContinentState.Dormant: if (now > NextBoarding) { eventState = ContinentState.Wait; nextState = ContinentState.Wait; } break; case ContinentState.Wait: if (now > NextBoarding.AddMinutes(Template.Wait)) { eventState = ContinentState.Start; nextState = ContinentState.Move; } break; case ContinentState.Move: if (NextEvent.HasValue && !EventDoing && now > NextEvent.Value) { eventState = ContinentState.MobGen; } if (EventDoing && (now > NextBoarding .AddMinutes(Template.Wait) .AddMinutes(Template.EventEnd) || MoveField.GetObjects <FieldMob>().Any())) { eventState = ContinentState.MobDestroy; } if (now > NextBoarding .AddMinutes(Template.Wait) .AddMinutes(Template.Required)) { eventState = ContinentState.End; nextState = ContinentState.Dormant; } break; } if (State != nextState) { State = nextState; Logger.Debug($"{Template.Info} continent state has been updated to {State}"); } switch (eventState) { case ContinentState.Start: using (var p = new Packet(SendPacketOperations.CONTIMOVE)) { p.Encode <byte>((byte)ContinentState.TargetStartShipMoveField); p.Encode <byte>((byte)ContinentState.Start); await StartShipMoveField.BroadcastPacket(p); } await Move(WaitField, MoveField); break; case ContinentState.MobGen: NextEvent = null; EventDoing = true; Logger.Debug($"{Template.Info} started the {eventState} event"); await Task.WhenAll(((MobSummonItemTemplate)_templateManager .Get <ItemTemplate>(Template.GenMob.TemplateID)).Mobs .Select(m => _templateManager.Get <MobTemplate>(m.TemplateID)) .Select(m => MoveField.Enter(new FieldMob(m) { Position = Template.GenMob.Position }))); using (var p = new Packet(SendPacketOperations.CONTIMOVE)) { p.Encode <byte>((byte)ContinentState.TargetMoveField); p.Encode <byte>((byte)ContinentState.MobGen); await MoveField.BroadcastPacket(p); } break; case ContinentState.MobDestroy: EventDoing = false; Logger.Debug($"{Template.Info} started the {eventState} event"); await Task.WhenAll(MoveField .GetObjects <FieldMob>() .Select(m => MoveField.Leave(m))); using (var p = new Packet(SendPacketOperations.CONTIMOVE)) { p.Encode <byte>((byte)ContinentState.TargetMoveField); p.Encode <byte>((byte)ContinentState.MobDestroy); await MoveField.BroadcastPacket(p); } break; case ContinentState.End: using (var p = new Packet(SendPacketOperations.CONTIMOVE)) { p.Encode <byte>((byte)ContinentState.TargetEndShipMoveField); p.Encode <byte>((byte)ContinentState.End); await EndShipMoveField.BroadcastPacket(p); } await Move(MoveField, EndField); if (CabinField != null) { await Move(CabinField, EndField); } NextBoarding = NextBoarding.AddMinutes(Template.Term); ResetEvent(); break; } }