A mon avis ce n est pas un bug mais une feature
Dans le fichier de config opensim.ini , il y a un paramètre qui donne le temps maximum dans lequel on peut rester dans un evenement .
C est pour cela qu elenia a un résultat différent du tien puisque son processeur doit etre un peu plus rapide , et qu en rajoutant des sleeps cela interrompt la boucle plus tot ( pas en temps qui reste constant , mais en nombre d itérations
Je tele mets en gras , c est le paramètre
EventLimit
Par défaut il est positionné à 30 secondes .
En faisant des tests , il semble que le script continue quand meme 3-4 secondes apres ce paramètre
( en le mettant à 3 , ton script s arrete au bout de 6-7 secondes , en le laissant a 30 il s arrete au bout de 33-34 secondes, en le mettant a 0 , il sarrete au bout de 3 secondes )
Remplace ton script par
integer x = 1;
default
{
state_entry()
{
x=1;
llResetTime();
while(TRUE)
{
llSetText((string)llGetTime(), <1.0,.0,.0>, 1.0);
x++;
}
}
}
pour vérifier si mon analyse est correcte
Si c est le cas , pour tes besoins , fais une sauvegarde de ton fichier opensim.ini , change le paramètre eventlimit que je t ai mentionné dans ton fichier opensim.ini , redémarre le serveur opensim
[XEngine]
; Enable this engine in this OpenSim instance
Enabled = true
; How many threads to keep alive even if nothing is happening
MinThreads = 2
; How many threads to start at maximum load
MaxThreads = 100
; Time a thread must be idle (in seconds) before it dies
IdleTimeout = 60
; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal", "Highest")
Priority = "BelowNormal"
; Maximum number of events to queue for a script (excluding timers)
MaxScriptEventQueue = 300
; Stack size per thread created
ThreadStackSize = 262144
; Set this to true (the default) to load each script into a separate
; AppDomain. Setting this to false will load all script assemblies into the
; current AppDomain, which will reduce the per-script overhead at the
; expense of reduced security and the inability to garbage collect the
; script assemblies
AppDomainLoading = true
; Rate to poll for asynchronous command replies (ms)
; currently unused
;AsyncLLCommandLoopms = 50
; Save the source of all compiled scripts
WriteScriptSourceToDebugFile = false
; Default language for scripts
DefaultCompileLanguage = lsl
; List of allowed languages (lsl,vb,js,cs)
; AllowedCompilers=lsl,cs,js,vb.
; *warning*, non lsl languages have access to static methods such as System.IO.File. Enable at your own risk.
AllowedCompilers=lsl
; Compile debug info (line numbers) into the script assemblies
CompileWithDebugInformation = true
; Allow the user of mod* functions. This allows a script to pass messages
; to a region module via the modSendCommand() function
; Default is false
AllowMODFunctions = false
; Allow the use of os* functions (some are dangerous)
AllowOSFunctions = false
; Allow the user of LightShare functions
AllowLightShareFunctions = false
; Threat level to allow, one of None, VeryLow, Low, Moderate, High, VeryHigh, Severe
OSFunctionThreatLevel = VeryLow
; Interval (s) between background save of script states
SaveInterval = 120
; Interval (s) between maintenance runs (0 = disable)
MaintenanceInterval = 10
; Time a script can spend in an event handler before it is interrupted
EventLimit = 30
; If a script overruns it's event limit, kill the script?
KillTimedOutScripts = false
; Sets the multiplier for the scripting delays
ScriptDelayFactor = 1.0
; The factor the 10 m distances llimits are multiplied by
ScriptDistanceLimitFactor = 1.0
; Maximum length of notecard line read
; Increasing this to large values potentially opens
; up the system to malicious scripters
; NotecardLineReadCharsMax = 255
; Sensor settings
SensorMaxRange = 96.0
SensorMaxResults = 16
; OS Functions enable/disable
; For each function, you can add one line, as shown
; The default for all functions allows them if below threat level
; true allows the use of the function unconditionally
; Allow_osSetRegionWaterHeight = true
; false disables the function completely
; Allow_osSetRegionWaterHeight = false
; Comma separated list of UUIDS allows the function for that list of UUIDS
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb
; You can also use script creators as the uuid
; Creators_osSetRegionWaterHeight = <uuid>, ...
; If both Allow_ and Creators_ are given, effective permissions
; are the union of the two.
; Allow for llCreateLink and llBreakLink to work without asking for permission
; only enable this in a trusted environment otherwise you may be subject to hijacking
; AutomaticLinkPermission = false
; Disable underground movement of prims (default true); set to
; false to allow script controlled underground positioning of
; prims
; DisableUndergroundMovement = true
**edit*
je ne sais pas ce que cela donne en mettant en commentaire la ligne au lieu de mettre une valeur arbitraire . Peut etre que cela definit à 0 ou peut etre que cela désactive cette limitation .
De toute facon , si tu n utilises pas opensim pour d autres personnes , tu peux le positionner à un jour complet 86400
C est découragé en revanche si tu utilises opensim à des fins de serveurs , si tu regardes tes ressources CPU elles seront prises à 100% sur au moins un CPU . Apparament à ce que j ai compris sur le net , ils parlent d un autre engine de script ( XMREngine ) qui permettrait d etre un peu plus intelligent et de faire diminuer la priorité des scripts qui restent trop longtemps dans le meme evenement afin de laisser plus de temps CPU à la sim pour d autres scripts , evenements du monde etc ..
Note que même sur second life , ce est pas génial de rester sur le même evenement sans donner la main de temps en temps au gestionnaire d évènements . Tes evenements rentrants vont s empiler et vont saturer la pile d evenements ; tu avs donc perdre des evenements à gèrer . De plus apparament , en faisant quelques tests , j ai l impression que second life fait de même que ce que devrait faire XMREngine : il abaisse la priorité su script jusqu à le faire tourner très très lentement