示例#1
0
        public void Apply(ScriptingContext ctx)
        {
            var size = Size.Def.Calc(ctx);

            VoltBody[] bodies = QuerySpaceInCircle(size, ctx);
            if (bodies == null)
            {
                return;
            }
            foreach (var body in bodies)
            {
                if (body.UserData is EntityId eid)
                {
                    if (eid == ctx.Host)
                    {
                        continue;
                    }
                    var ghost = ctx.ProcessingEntity.CurrentServer.GetGhost(eid);
                    if (ghost is IImpactedEntity impe)
                    {
                        impe.RunImpact(ctx, Impact.Def);
                    }
                }
            }
        }
示例#2
0
 public void Apply(ScriptingContext ctx)
 {
     foreach (var impact in Impacts)
     {
         impact.Def.Apply(ctx);
     }
 }
示例#3
0
        public object Deserialize(NetDataReader stream)
        {
            var objToSerialize = new ScriptingContext();

            {
                var has = stream.GetBool();

                objToSerialize.TargetPoint = !has ? default : (Vec2)SyncTypesMap.FastSerializerGetter <Vec2> .Serializer.Deserialize(stream);
            }

            {
                var has = stream.GetBool();

                objToSerialize.Parent = !has ? default : (ScriptingContext)SyncTypesMap.FastSerializerGetter <ScriptingContext> .Serializer.Deserialize(stream);
            }

            {
                var has = stream.GetBool();

                objToSerialize.Host = !has ? default : (EntityId)SyncTypesMap.FastSerializerGetter <EntityId> .Serializer.Deserialize(stream);
            }

            {
                var has = stream.GetBool();

                objToSerialize.Target = !has ? default : (EntityId)SyncTypesMap.FastSerializerGetter <EntityId> .Serializer.Deserialize(stream);
            }

            return(objToSerialize);
        }
示例#4
0
 public bool Check(ScriptingContext ctx)
 {
     if (ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Target) is IInteractive inter)
     {
         return(inter.InteractiveDef == Type.Def);
     }
     return(false);
 }
示例#5
0
        public void Apply(ScriptingContext ctx)
        {
            var target = ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Target);

            if (target != null && target is IImpactedEntity ie)
            {
                ie.RunImpact(ctx, Do.Def);
            }
        }
示例#6
0
 public void Apply(ScriptingContext ctx)
 {
     if (ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Host) is IQuester quester)
     {
         quester.Quests.Add(new QuestInstance()
         {
             QuestDef = Quest.Def
         });
         quester.Quests = quester.Quests;
     }
 }
示例#7
0
        public bool Check(ScriptingContext ctx)
        {
            var target = ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Target);

            if (target == null)
            {
                return(false);
            }
            return(Predicate.Def.Check(new ScriptingContext()
            {
                ProcessingEntity = ctx.ProcessingEntity, Parent = ctx, Host = ctx.Target, Target = ctx.Target
            }));
        }
示例#8
0
 public void Apply(ScriptingContext ctx)
 {
     if (ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Host) is IQuester quester)
     {
         var quest = quester.Quests.SingleOrDefault(x => x.QuestDef == Quest.Def);
         if (quest == null)
         {
             return;
         }
         quest.QuestDef.OnComplete.Def?.Apply(ctx);
         quester.Quests.Remove(quest);
         quester.Quests = quester.Quests;
     }
 }
示例#9
0
        public void Apply(ScriptingContext ctx)
        {
            var point = Where.Def.Select(ctx);

            ctx.ProcessingEntity.CurrentServer.Create(EntityObjectsMap.GetTypeFromDef(Object.Def),
                                                      (ent) =>
            {
                if (ent is IPositionedEntity)
                {
                    ((IPositionedEntity)ent).Position = point;
                }
                ((IEntityObject)ent).Def = Object.Def;
                if (Buffed != null)
                {
                    ((IHasSpells)ent).SpellsEngine.DynamicBuffsOnStart = new List <SpellDef>(new[] { Buffed.Def });
                }
            });
        }
示例#10
0
        public static VoltBody[] QuerySpaceInCircle(float size, ScriptingContext ctx)
        {
            var tgt   = ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Host);
            var world = (VoltWorld)ctx.ProcessingEntity.CurrentServer.CustomData;

            VoltBody[] bodies = Array.Empty <VoltBody>();
            lock (world)
            {
                var pos    = ctx.TargetPoint.ToVolt();
                var buffer = world.QueryCircle(pos, size);
                if (buffer.Count != 0)
                {
                    bodies = new VoltBody[buffer.Count];
                }
                for (int i = 0; i < buffer.Count; i++)
                {
                    bodies[i] = buffer[i];
                }
            }

            return(bodies);
        }
示例#11
0
        public bool Check(ScriptingContext ctx)
        {
            var tgt   = ctx.ProcessingEntity.CurrentServer.GetGhost(ctx.Host);
            var world = (VoltWorld)ctx.ProcessingEntity.CurrentServer.CustomData;

            VoltBody[] bodies = null;
            lock (world)
            {
                var buffer = world.QueryCircle(((IPositionedEntity)tgt).Position.ToVolt(), Size.Def.Calc(ctx));
                if (buffer.Count != 0)
                {
                    bodies = new VoltBody[buffer.Count];
                }
                for (int i = 0; i < buffer.Count; i++)
                {
                    bodies[i] = buffer[i];
                }
            }
            foreach (var body in bodies)
            {
                if (body.UserData is EntityId eid)
                {
                    if (eid == ctx.Host)
                    {
                        continue;
                    }
                    if (!Predicate.Def.Check(new ScriptingContext()
                    {
                        Parent = ctx, ProcessingEntity = ctx.ProcessingEntity, Host = eid
                    }))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#12
0
 public void Apply(ScriptingContext ctx)
 {
     ctx.ProcessingEntity.CurrentServer.Destroy(ctx.Host);
 }
示例#13
0
 public void Apply(ScriptingContext ctx)
 {
     throw new NotImplementedException();
 }