• All submissions to this site are governed by Second Life Project Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.
MAINTENANCE ANNOUNCEMENT - JIRA will undergo maintenance starting 1:00am PDT through 3:00am on Saturday 2010.03.20. Please do not enter issues during this time as the system maybe restarted.
Issue Details (XML | Word | Printable)

Key: VWR-8997
Type: Bug Bug
Status: Resolved Resolved
Resolution: Misfiled
Priority: Critical Critical
Assignee: WorkingOnIt Linden
Reporter: Cenji Neutra
Votes: 7
Watchers: 5
Operations

If you were logged in you would be able to see more operations.
1. Second Life Viewer - VWR

Pay.. pie-menu option doesn't correctly track presence of money() event

Created: 25/Aug/08 12:40 PM   Updated: 26/Jan/09 01:43 PM
Component/s: User Interface
Affects Version/s: 1.21 Release Candidate
Fix Version/s: None

Time Tracking:
Not Specified

Issue Links:
Duplicate
 
Relates

Linden Lab Issue ID: DEV-20073
Linden Lab Internal Branch:    viewer_1-21


 Description  « Hide
The Pay.. pie menu option is sometimes unavailable when it should be and available when it shouldn't be with multi-prim objects in which there are money() events in the child prims.

This breaks a lot of vendors.

When available when it shouldn't be, paying the object doesn't trigger any money() events.

By some reports, re-linking helps, though the results seem to be inconsistent.



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Cenji Neutra added a comment - 25/Aug/08 12:41 PM
Likely a Mono-beta issue.

Cenji Neutra added a comment - 25/Aug/08 01:04 PM
It seems the behaviour is inconsistent - making it more difficult to reproduce. Making a copy of the device using shift-drag resulted in a vendor that behaved correctly. Repeated 'reset scripts in selection' from the Tools menu had no effect - one copy functions while the other only ever shows the "Pay.." slot in the menu as blank.

In the process of trying to create a repo test case, I also observed inconsistient behaviour int he triggering of the money() event. Again, exact duplicate copies of a simple object with 2 prims and two scripts results in one object that would only trigger the money() event in sometimes when paid and the other always.
(I may open another bug for that issue - but mention it hear in case it is related).

I'll also test in other locations in case there is something wrong with the state of Sandbox Goguen.


Cenji Neutra added a comment - 25/Aug/08 01:19 PM
Frustratingly, the problem disappeared when the vendor was rezzed in Newcomb.

In the original non-working vendor, a recompilation of the scripts (back) to LSL cause it to start working. Them, recompilation again into Mono and it also worked.

So - not sure where the problem is/was. How does the 'payable' object state based on if a money() event is present get maintained? Could there be a problem with re-compilation and maintenance of that state that persists through resetting all scripts?

Without even being able to reproduce it with the original device now - not much use leaving this bug marked as a showstopper. I'll downgrade it.


Harleen Gretzky added a comment - 25/Aug/08 01:26 PM
Maybe VWR-8744 is what you are seeing?

Cenji Neutra added a comment - 25/Aug/08 01:40 PM
@Harleen - Possibly related. Though in this case the object is not set to 'When Left-Clicked: Pay Object", just the default. However, it does seem to be related to linking and child prims, so it may be the same bug.

I observed this:

1. Created two prims and linked them
2. Created a new script in the root that called llSetPayPrice(-1,[1,-1,-1...])
3. Created a new script in the child prim with a money event that just chatted 'payed'
4. Reset all scripts in selection (without 'Edit linked parts' checked)
5. Right-click payed the object - Fast pay dialog showed, but when I clicked the "1", nothing happened (assume money() event not triggered). Repeated payments yielded no result.
6. Unlinked and relinked the object without unselecting in between
7. Right-clicked, payed again, still no result.
8. Unlinked and observed that root has no Pay.. menu option on pie menu (as expected - no money() event) and former child-prim has usual Pay dialog (without L$1 fastpay setting) - again, as expected.
9. Payed the former child prim - saw "payed" chat output
10. Relinked in same configuration
11. Right-clicked and Payed the L$1 fastpay option and observed 'payed' in chat.

So - it is inconsistent but somehow related to relinking. None of the scripts were edited/recompiled/reset during that sequence.

I'll mark it related to VWR-8744 just-in-case.


Cenji Neutra added a comment - 25/Aug/08 01:41 PM
Unsure if this is related at this time, but involves similar functions.

Hypatia Callisto added a comment - 29/Aug/08 09:58 AM
upping this to major, as it affects a sizable number of rental meters in Caledon. Rentomatic scripts are affected by this bug. major loss of performance. recompiling scripts will be a major situation with dozens of sims.

Cenji Neutra added a comment - 29/Aug/08 10:05 AM
Just an update: I have not observed the problem on the main grid on a sim running 1.24.3.95195 so far (either with Mono or LSL compiled scripts; tested with the same vendor device as on the beta grid)

Hypatia Callisto added a comment - 29/Aug/08 10:11 AM - edited
This happens to the Rentomatic scripts in Caledon on Sea, which is running 1.24.3.95195 server and while using the 1.21 RC. Falling back to the 1.20 or earlier resolves the issue temporarily.

I have reports of it happening in Caledon Penzance, Caledon II, and Caledon Primverness so far.


Babbage Linden added a comment - 02/Sep/08 10:29 AM
Steve, this looks like a viewer issue, can you look in to it please?

Thomas Shikami added a comment - 02/Sep/08 03:23 PM
llSetPayPrice has never affected if the Pay was available or not. The Pay... option is only visible if a money event may catch it. IMHO llSetPayPrice and a money event should be in the same task, even better the same script.

Cenji Neutra added a comment - 02/Sep/08 05:02 PM
@Thomas said "IMHO llSetPayPrice and a money event should be in the same task, even better the same script.". I agree that might have been a nicer API design, but it is now irrelevant, as the current API allows the the event and llSetPayPrice to be in different scripts (also the debt permission requests and llGiveMoney calls). So, changing it would break with backward compatibility - something obviously to be avoided at all costs unless there is a very good reason to do so (i.e. high cost of not doing it). Adding an additional constraint like that would need a few years warning to allow time for creators to phase out all their products that rely on the current API or it would cause needless pain to tens of thousands of residents.

If this is a viewer issue, then I'm not sure which client version I was using when reported - whatever client was the download for the beta grid at that time. I've been using 1.21.0 RC (95157) on a main-grid sim with 1.24 after the Mono rollout and been using and working on scripts in the same device without observing any problems even once.


Joshua Linden added a comment - 03/Sep/08 01:01 PM
Babbage Linden believes this is viewer-side

Cenji Neutra added a comment - 04/Sep/08 07:03 AM
Although I've still not seen it occur myself, we released new vendors compiled against Mono yesterday and we've had several customer reports of the Pay.. button being greyed-out already. One customer I spoke to was running the release-candidate viewer (1.21.0 I assume). He reported that it wasn't consistent - that some vendors 'out of the box' we 'shipped' seemed to work and others not (they all have the same script set). He tried re-linking and also observed the problem.

Can someone with server/viewer code knowledge enlighten me as to how the flag for showing/not-showing the Pay.. option gets computed and propagates to aid in diagnosing it?

  • When does the viewer get notified about if the Pay.. should be available for an object - when the user right-clicks, or is the flag attached to every object in view when it is streamed to the viewer?
  • When the flag is sent to the viewer by the region, is it computed dynamically at that time, or is the flag stored by the region as an object property and just updated in response to relevant changes (re-linking, addition/removal of scripts, changes in running state)?

As I mentioned, the money() event is in a script that is in a child prim in this case. However, although the vendors are 'new versions' the scripts and code for the money() event etc. is basically unchanged. All the vendors had a 'reset all scripts in selection' performed before being taken into inventory for 'packaging'.
The script with the money() event only has one state - so it isn't an issue with reset/init states or state change timing.

One other piece of information that may be relevant: the scripts in the vendors were all install using llRemoteLoadScriptPin() buy our 'build' device.

More info if/when I have it. I'm waiting on one customer to try both our old LSL vendors and the non-RC viewer.


Cenji Neutra added a comment - 04/Sep/08 07:23 AM
More info: I went to the customer's store where he had one of our vendors rezzed. Indeed, with the RC viewer (1.21.0 95157) right-click and I Pay.. was greyed-out. I logged out and back in using the release viewer (1.20.15 92456) and right-clicked on the same prim without touching anything else first and the Pay.. was available.

So, it is definitely a problem with the RC viewer.

I am going to experiment with child-prim link ordering next (as it doesn't matter with our devices and hence they're probably not linked consistently with respect to which numbered child prim contains the money event).


Cenji Neutra added a comment - 04/Sep/08 07:41 AM
In my own testing, I've been able to reproduce a bug whereby the money() event is not triggered at all upon payment, although I've not been able to reproduce the 'Pay..' not showing problem, I post the repo below as it seem likely to be the same underlying problem.

Using the RC viewer (1.21.0 95157), create 2 cubes and add this script them:
default
{
state_entry()
{
}

touch_start(integer total_number)
{ llSay(0, (string)llGetLinkNumber()); }


money(key agent, integer amount)
{ llSay(0,"payed "+(string)llGetLinkNumber()); }

}


Then create a 3rd and put this script in it (same but without money event):
default
{
state_entry()
{
}

touch_start(integer total_number)
{ llSay(0, (string)llGetLinkNumber()); } }
}

Link all three together so that the root prim is the one without the money event.

  • Right-click the object and notice that Pay.. is available. Pay the object L$1 and notice that there is no chat output (assuming neither of the money() events were triggered).
  • Right-click either of the child prims and Pay.. them and you'll see the expected chat output

Repeat in the release viewer (1.10.15):

  • Right-click the object and notice that Pay.. is greyed-out (I assume that is correct as the root prim has no money() event, but I'm not 100% on the spec'd behaviour)
  • Right-click on either child prims and Pay.. them and you'll also see the expected chat output.

Cenji Neutra added a comment - 05/Sep/08 06:03 AM
(edited name & description to be more appropriate now that it is better undertood)

Wiseguy Capra added a comment - 05/Sep/08 01:08 PM
I can confirm this being viewer side. I had the same issue using apez vendors. With the Second Life 1.21.0 (95157) viewer "right-click & pay" wa snot available on my vendors. With Second Life 1.20.15 (92456) all works fine.

Talwyn Mills added a comment - 07/Sep/08 10:52 AM
I've seen this behaviour on both mono and non-mono compiled scripts.

My setup:

Create two prims and link them together. In the root prim place this script:

default
{
state_entry()

{ llOwnerSay("Root In No Pay Mode"); llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]); }

link_message(integer prim, integer num, string str, key id)
{
if (num == 201) { llMessageLinked(LINK_ALL_OTHERS, 101, "", NULL_KEY); state pay; }
}
}

state pay
{
state_entry()

{ llOwnerSay("Root In Pay Mode"); llSetPayPrice(PAY_HIDE, [10, PAY_HIDE, PAY_HIDE, PAY_HIDE]); }

link_message(integer prim, integer num, string str, key id)
{
if (num == 200) { llMessageLinked(LINK_ALL_OTHERS, 100, "", NULL_KEY); state default; }
}
}

In the child prim place this script:

default
{
state_entry()

{ llOwnerSay("Child In No Pay Mode"); llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]); }

link_message(integer prim, integer num, string str, key id)
{
if (num == 101) { state pay; }
}

touch_start(integer count) { llMessageLinked(LINK_ALL_OTHERS, 201, "", NULL_KEY); }
}

state pay
{
state_entry()

{ llOwnerSay("Child In Pay Mode"); llSetPayPrice(PAY_HIDE, [10, PAY_HIDE, PAY_HIDE, PAY_HIDE]); }

link_message(integer prim, integer num, string str, key id)
{
if (num == 100) { state default; }
}

money(key giver, integer amount)

{ llOwnerSay(llKey2Name(giver) + " has paid you " + (string)amount + "L$"); }

touch_start(integer count) { llMessageLinked(LINK_ALL_OTHERS, 200, "", NULL_KEY); }
}

Reset the scripts so they are in no pay mode, there is currently no pay option on either prim.

Touch the child prim to put the scripts into pay mode.

Note that the pay option is available on the root and child prims.

The release client only shows the pay option on the child prim.

Additionally, my firing ranges refuse to show the pay option at all, even though they are using a variation of the above procedure. They work fine under the release client.


Cenji Neutra added a comment - 15/Sep/08 05:45 PM
This behaviour I detailed above is still the same in the new 1.21.2 (96080) RC viewer (with server 1.24.5.96115).

Periapse Linden added a comment - 19/Sep/08 08:22 AM
Fixed for 1.21 rc3 and following

Rob Linden added a comment - 29/Sep/08 05:23 PM
Please test this in the latest RC, and close if it is indeed fixed.

Cenji Neutra added a comment - 29/Sep/08 07:55 PM
Works in 1.21.3 (97611) RC

Talwyn Mills added a comment - 30/Sep/08 12:46 PM
Fixed for MONO scripts but not entirely for non-MONO scripts.

Have a script with two states (my example above is valid for this test) one with a money event handler, one without. Start in the no-money event state and no pay option is displayed in the pie menu. Switch to the money event state and the pay option becomes available. Switch back to the no-money event state and the pay option is still available. (In a MONO script, the pay option becomes disabled again).

Example object available on request.


Talwyn Mills added a comment - 30/Sep/08 01:02 PM
Sorry, jumped the gun a little, it is fixed for non-mono as well, so I'll reset this to the fixed and closed state.

Mitralone Yalin added a comment - 24/Jan/09 03:42 PM
Hi,

After 1.25 server, my script started showing this. I have a game that accepts payment and after that, changes to another state that has no money event but the Pay pie menu is still there and you cna pay the machine. I am trying to reproduce the problem but it does not happen. Only in my game. I reset it, no change. I recompile; no change. I am stuck.

Please help.

Mitralone Yalin


Mitralone Yalin added a comment - 26/Jan/09 01:43 PM
Found the problem. Sorry for bothering.