My last mail should actually read: A player may have multiple characters and the rule should fire when *ALL* of its characters live longer than 2 minutes. that's why "characters" do not have a unique identification and there isn't any event representing a character birth.
Best Regards, Kevin Zhao 在 2010年10月28日 下午9:50,赵侃侃 <kevin...@gmail.com>写道: > A player may have multiple characters and the rule should fire when any of > its characters live longer than 2 minutes. that's why "characters" do not > have a unique identification and there isn't any event representing a > character birth. > > Best Regards, > Kevin Zhao > > 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> > >> If EventB( index == 3 ) signifies that the "character" owned by player 3 >> has been killed: what is the event that this character has been born? Life >> is the time between birth and death; these two are well-defined (well, >> mostly) events, and they ought to be represented by clean-cut events in any >> application. Then it's no problem to write rules firing when a "character" >> lives longer or shorter than any time. Also, "characters" may have to have a >> unique identification beyond their player-owner. >> >> If you are constantly shifting your specs, we won't be getting any closer >> to a solution, though. >> >> >> -W >> >> >> 2010/10/28 赵侃侃 <kevin...@gmail.com> >> >>> To be honest, I don't quite understand the rules you wrote. Let me >>> explain this a little bit with a real world scenario. >>> Assume this is an on-line game that EventB indicates a 'kill' event that >>> a player is losing its character who might be killed by some other player. >>> The property index points to the player who owns this character. What I'm >>> looking for here is to find out when a player's character survives in 2 >>> minutes. The number of players in a game is at least 2 but can be up to any >>> number. >>> >>> Best Regards, >>> Kevin Zhao >>> >>> 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> >>> >>>> >>>> >>>> 2010/10/28 赵侃侃 <kevin...@gmail.com> >>>> >>>>> Hello Wolfgang, >>>>> >>>>> Index is just like the index in an array. the value can be any from 0 >>>>> to the array length. >>>>> for the previous example, the length is 1 so index can be either 0 or >>>>> 1. but in the real case, the length can be an arbitrary number. >>>>> >>>>> another question, there are 2 rules here, do both of them have to be >>>>> applied? >>>>> >>>> >>>> One creates and inserts the PatternConsumer which blocks repeated usage >>>> of the pair of EventB facts that have been successfully paired. Otherwise a >>>> sequence EventB:0, EventB:1, EventB:2 would fire 2 times. >>>> >>>> If the positive condition is more complex, e.g., you need *all* index >>>> values 0,...,L-1 within 2m, then other conditions will be required (and >>>> that's what I meant with "more precisesly"). If any pair a,b from [0..L-1] >>>> will do, then the modified version (!=) should be OK. >>>> >>>> -W >>>> >>>> >>>> >>>>> >>>>> Best Regards, >>>>> Kevin Zhao >>>>> >>>>> 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>> >>>>> Kindly state your requirements precisely. >>>>>> >>>>>> Perhaps >>>>>> not ( EventB ( index != $index,... ) >>>>>> is what you need. >>>>>> -W >>>>>> >>>>>> 2010/10/28 赵侃侃 <kevin...@gmail.com> >>>>>> >>>>>> I haven't tested this rule, but what about the case that property >>>>>>> index would have arbitrary number of possible values? >>>>>>> >>>>>>> 2010/10/27 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>>>> >>>>>>>> Omitting the Entry Points: >>>>>>>> >>>>>>>> rule "B-0-1-not OK" >>>>>>>> when >>>>>>>> $b : EventB( $index: index ) >>>>>>>> not ( PatternConsumer( id == "B01", events contains $b ) ) >>>>>>>> not ( EventB( index == (1 - $index), this after[0s,2m] $b ) ) >>>>>>>> then >>>>>>>> System.out.println( "B:" + $index + ", but no B:" + (1-$index) ); >>>>>>>> end >>>>>>>> >>>>>>>> rule "B-0-1" >>>>>>>> when >>>>>>>> $b1 : EventB( $index: index ) >>>>>>>> $b2 : EventB( index == (1 - $index), this after[0s,2m] $b1 ) >>>>>>>> then >>>>>>>> insert( new PatternConsumer( "B01", $b1, $b2 ) ); >>>>>>>> System.out.println( "B:" + $index + "+B:" + (1-$index) ); >>>>>>>> end >>>>>>>> >>>>>>>> -W >>>>>>>> >>>>>>>> 2010/10/27 赵侃侃 <kevin...@gmail.com>: >>>>>>>> > Hello, >>>>>>>> > With the help from the community I managed to get my first rule >>>>>>>> working, and >>>>>>>> > I'm trying to write my second rule on my own but it just doesn't >>>>>>>> seem to >>>>>>>> > work correctly. >>>>>>>> > Here is the scenario, what I want is to identify a pattern that >>>>>>>> there's no >>>>>>>> > EventB coming in within 2 minutes with a particular index value. >>>>>>>> > For example, EventB would have a property named index and assume >>>>>>>> the value >>>>>>>> > of index would be either 0 or 1. >>>>>>>> > Before firing the rules, I would manually insert facts of >>>>>>>> possibleIndex with >>>>>>>> > value 0 and 1 into the workingMemory. >>>>>>>> > Within 2 minutes, if there only comes one EventB with index valued >>>>>>>> 0 then >>>>>>>> > the system should report no EventB coming in with index value 1 in >>>>>>>> last 2 >>>>>>>> > minutes. >>>>>>>> > Vice versa, in the case of only coming one EventB with index >>>>>>>> valued 1 then >>>>>>>> > the system should report no EventB coming in with index value 0 in >>>>>>>> last 2 >>>>>>>> > minutes. >>>>>>>> > If within 2 minutes, there comes 2 EventB with both value 0 and 1 >>>>>>>> then >>>>>>>> > nothing should report. >>>>>>>> > Here is what I wrote, but it doesn't seem to work correctly. >>>>>>>> > I used a timer to fire this rule every 10 seconds because I don't >>>>>>>> think the >>>>>>>> > rule would run automatically if I don't add that. (not too sure >>>>>>>> though) >>>>>>>> > rule "no B in 2 minutes" >>>>>>>> > timer (0 10s) >>>>>>>> > when >>>>>>>> > possibleIndex( $index : index ) from entry-point "Event stream" >>>>>>>> > $p : PatternConsumer ( name == 'no B' && index == $index ) >>>>>>>> > not ( EventB( index == $index && this after[0ms,2m] $p) over >>>>>>>> window:time(2m) >>>>>>>> > from entry-point "Event stream" ) >>>>>>>> > then >>>>>>>> > PatternConsumer pc = new PatternConsumer( "no B", $index ); >>>>>>>> > insert(pc); >>>>>>>> > System.out.println("no B in 2 minutes " + $index); >>>>>>>> > end >>>>>>>> > Best Regards, >>>>>>>> > Kevin Zhao >>>>>>>> > _______________________________________________ >>>>>>>> > rules-users mailing list >>>>>>>> > rules-users@lists.jboss.org >>>>>>>> > https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>> > >>>>>>>> > >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> rules-users mailing list >>>>>>>> rules-users@lists.jboss.org >>>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>> >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> rules-users mailing list >>>>>>> rules-users@lists.jboss.org >>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> rules-users mailing list >>>>>> rules-users@lists.jboss.org >>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> rules-users mailing list >>>>> rules-users@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> rules-users mailing list >>>> rules-users@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users