OFPEC Forum
Editors Depot - Mission Editing and Scripting => ArmA - Editing/Scripting Multiplayer => Topic started by: L!nk on 13 Apr 2008, 16:24:28
-
Will this work? ???
"variable1" addPublicVariableEventHandler {publicVariable "variable1"};
Will it broadcast the variable once its changed? (can't really test this on one computer) If true, whats the performance diffrence between this way and the old way?
Then I just have to add this line once and not publicVariable "variable1" everytime I change a variable that needs to be broadcasted.
This can easily reduce problems when scripting multiplayer missions. :scratch: I'm just not sure if it will work.
Please confirm this for me. :good:
Thx,
L!nk
-
This won't work.
addPublicVariableEventhandler will call if the variable has been broadcasted.
publicVariable "variable1" will raise the eventhandler on all other machines (not the computer were the line was executed).
So you have to manually broadcast, but know you can easily check if the var has been broadcasted.
-
I have another question concerning publicVariable command.
Check this out.
_ruin = _ruinType createVehicle [0,0,0];
_final = _finalType createVehicle [0,0,0];
_ruin setpos _pos;
_ruin setdir _dir;
sleep _time;
deletevehicle _ruin;
_final setpos _pos;
_final setdir _dir;
What happens is:
1. A ruin is created at pos [0,0,0]
2. The building of the ruin is created at pos [0,0,0]
3. The ruin is moves to location A.
4. The ruin turns in a direction
5. Time passes
6. Ruin is deleted
7. Building is move to location A
8. Building turns in a direction
Here is my problem:
When client A runs this script. He sees the ruin for 0.5 secs before it disapears. When time runs out, the building appears.
This only happens when client A runs the script.
When client B runs it, everything works and appears perfectly.
What happend to the ruin?
-
We need more info before trying to diagnose this. How are the scripts on each client being executed? Are they executing at the same time? Where are they being executed?
-
The script is executed as soon as the client double clicks on a entry of a list. The dialog closes and this script is run.
Also notice that the returned object for the building has "REMOTE" added at the end.
hint format ["%1",_final] returns:
"8726a98# 638415: budova_in.p3d REMOTE"
-
Somehow I think "REMOTE" means its CLIENTside only? :confused:
Could you still please post the code your using to execute, precisely, because it appears you have more then one argument in play here so... (_ruinType etc).
-
I am still taking it all in, but, one thing for sure to avoid is using the keyword _time (http://www.ofpec.com/COMREF/index.php?action=list&game=All&letter=t#369) It is a reserved variable that counts the time passed since the script began running. You should use another identifier for your sleep time variable (e.g. _waitTime). Maybe that is what is screwing up the script.
-
_time
Didn't know that...
Does that mean if you had a script that just looped per say, you could use the _time variable to act as a timer if you made it GLOBAL and some point in a loop, saves code I spose... :clap:
-
I imagine so Rommel. Something like this maybe (assuming global value)?
timer.sqf
while {true} do
{
timeElapsed = round (_time); // Most likely not an integer so round it to one.
sleep 1;
};
-
Two things about _time:
1. If you define such an variable in the start of the script it no longer gives you the time the script has run, just the value yo have given to it.
2. Don't know at which point BIS has 'fixed' it but at least pre-1.09 _time didn't work in sqf; gave an error, now it outputs the scalar bool array pioyugpoydfpgoidyfgpiudfy thingy instead..
-
There is a global variable "time" as I have since found out, works in any format, however it is SINCE MISSION START.
player globalchat format ["%1 SINCE MISSION START",time];
-
Aha ok. I found my problem, but I still don't know how to fix it.
When I run this script for the first time in the mission, I work perfectly.
But when I client runs it at the same time the other client runs it, then the ruin disappears. Why is this happening?
I thought that when a client runs a script, the script is local to him.
So, to sum up, client1's script interupts client2's scripts when run while waiting time is active (sleep _time;)
Does it have something to do with the way each client runs the script?
L!nk out!
-
From tests I've made, there is/can be large delays between clients executing scripts, up to around 1-3 seconds at times, perhaps by the time your wait is starting, the other client has finished.
-
Nope, not the problem.
I tested this by running three scripts after each other. The first script's result was perfect but the next two did not show the ruin but move the final building to the right location after the delay of each scripts.
It must have something to do with the scripts over-running each other.
When I run the script and wait till the delay is over, and run it again, it works fine.
???
L!nk