Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // FARM WATER BUCKET
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- key followUser=NULL_KEY;
- float uHeight = 0;
- vector rezPos;
- float rezPosZ;
- vector curPos;
- integer lastTs;
- string PASSWORD="";
- integer EXPIRES = -1;
- integer DRINKABLE = -1;
- vector FLOWCOLOR=<0.0, 0.5, 1.0>;
- key POURSND = "e12bc097-609b-4912-8ba0-3569b9a8d5a9";
- integer chatchan = 0;
- string watercan;
- key watercanid;
- string itemname;
- vector itempos;
- rotation itemrot;
- rotation rezrot;
- vector item0pos = <0.0,-2.0,0.0>; // WATERCAN
- rotation item0rot = <0.0,0.0,0.0,1.0>;
- rezobj()
- {
- itemname = watercan;
- itempos = item0pos;
- itemrot = item0rot;
- rezrot = itemrot * llGetRot();
- llRezAtRoot(itemname, llGetPos() + (itempos * llGetRot()), ZERO_VECTOR, rezrot, 1);
- }
- water(key u)
- {
- llTriggerSound(llGetInventoryName(INVENTORY_SOUND,0), 1.0);
- llParticleSystem(
- [
- PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_ANGLE_CONE,
- PSYS_SRC_BURST_RADIUS,.2,
- PSYS_SRC_ANGLE_BEGIN,0.,
- PSYS_SRC_ANGLE_END,.5,
- PSYS_PART_START_COLOR,FLOWCOLOR,
- PSYS_PART_END_COLOR,<1.0,1.0,1.0>,
- PSYS_PART_START_ALPHA,.9,
- PSYS_PART_END_ALPHA,.0,
- PSYS_PART_START_GLOW,0.0,
- PSYS_PART_END_GLOW,0.0,
- PSYS_PART_START_SCALE,<.1000000,.1000000,0.00000>,
- PSYS_PART_END_SCALE,<.9000000,.9000000,0.000000>,
- PSYS_SRC_TEXTURE,llGetInventoryName(INVENTORY_TEXTURE,0),
- PSYS_SRC_TARGET_KEY, u,
- PSYS_SRC_MAX_AGE,3,
- PSYS_PART_MAX_AGE,4,
- PSYS_SRC_BURST_RATE, .01,
- PSYS_SRC_BURST_PART_COUNT,3,
- PSYS_SRC_ACCEL,<0.000000,0.000000,-1.1>,
- PSYS_SRC_OMEGA,<0.000000,0.000000,0.000000>,
- PSYS_SRC_BURST_SPEED_MIN,1,
- PSYS_SRC_BURST_SPEED_MAX,2,
- PSYS_PART_FLAGS,
- 0 |
- PSYS_PART_EMISSIVE_MASK |
- PSYS_PART_TARGET_POS_MASK |
- PSYS_PART_INTERP_COLOR_MASK |
- PSYS_PART_INTERP_SCALE_MASK
- ] );
- }
- reset()
- {
- lastTs = llGetUnixTime();
- llParticleSystem([]);
- llSetTimerEvent(900);
- }
- string myName()
- {
- return llGetSubString(llGetObjectName(), 3, -1);
- }
- default
- {
- state_entry()
- {
- rezPos = llGetPos();
- rezPosZ = rezPos.z;
- watercan = llGetInventoryName(INVENTORY_OBJECT,0);
- llListen(chatchan,"","","pour");
- llListen(chatchan,"","","kill water");
- }
- on_rez(integer n)
- {
- llResetScript();
- }
- object_rez(key id)
- {
- watercanid = id;
- llOwnerSay("WATERCANID " + (string)id);
- }
- touch_start(integer n)
- {
- llParticleSystem([]);
- if (!llSameGroup(llDetectedKey(0))) return;
- if (followUser == NULL_KEY)
- {
- followUser = llDetectedKey(0);
- llSetTimerEvent(1.0);
- }
- else
- {
- llSetKeyframedMotion( [], []);
- followUser = NULL_KEY;
- llSleep(.2);
- curPos = llGetPos();
- llSetPos(<curPos.x,curPos.y,rezPosZ>);
- }
- }
- listen(integer channel, string name, key id, string message)
- {
- if(message == "kill water")
- {
- llDie();
- }
- else if(message == "pour")
- {
- rezobj();
- llSleep(0.5);
- key u = watercanid;
- llOwnerSay("GOT WATERCANID " + (string)u);
- llSetRot(llEuler2Rot(<0,PI/1.4, 0>));
- water(u);
- llSleep(2);
- llDie();
- }
- }
- timer()
- {
- if (followUser!= NULL_KEY)
- {
- list userData=llGetObjectDetails((key)followUser, [OBJECT_NAME,OBJECT_POS, OBJECT_ROT]);
- if (llGetListLength(userData)==0)
- {
- followUser = NULL_KEY;
- }
- else
- {
- llSetKeyframedMotion( [], []);
- llSleep(.1);
- list kf;
- vector mypos = llGetPos();
- vector size = llGetAgentSize(followUser);
- uHeight = size.z;
- vector v = llList2Vector(userData, 1) + <0.6, 0.0, -0.1> * llList2Rot(userData,2);
- float t = llVecDist(mypos, v)/10;
- if (t > .05)
- {
- if (t > 5) t = 5;
- vector vn = llVecNorm(v - mypos );
- vn.z = 0;
- rotation r2 = llRotBetween(<1,0,0>,vn);
- kf += v- mypos;
- kf += ZERO_ROTATION;
- kf += t;
- llSetKeyframedMotion( kf, [KFM_DATA, KFM_TRANSLATION|KFM_ROTATION, KFM_MODE, KFM_FORWARD]);
- llSetTimerEvent(t+1);
- }
- }
- return;
- }
- llSetTimerEvent(900);
- }
- dataserver(key id, string msg)
- {
- list tk = llParseStringKeepNulls(msg, ["|"], []);
- if (llList2String(tk,0) == "DIE")
- {
- integer days = llFloor((llGetUnixTime()- lastTs)/86400);
- key u = llList2Key(tk,1);
- llSetRot(llEuler2Rot(<0,PI/1.4, 0>));
- water(u);
- llSleep(2);
- osMessageObject(u, llToUpper(myName())+"|"+PASSWORD);
- llDie();
- }
- else if (llList2String(tk,0)== "INIT")
- {
- PASSWORD = llList2String(tk,1);
- if (EXPIRES <0)
- EXPIRES = llList2Integer(tk,2);
- if (DRINKABLE <0)
- DRINKABLE = llList2Integer(tk,3);
- FLOWCOLOR = llList2Vector(tk,4);
- if (llList2String(tk,5) != "")
- POURSND = llList2Key(tk,5);
- reset();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement