Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- key char_uuid = "cd7f0b2e-b39b-3e33-2d08-63f6d8855066";
- list players = [];
- list playerpos = [<2.0000,2.0000,0.0000>,<1.0000,2.0000,0.0000>,<0.0000,2.0000,0.0000>,<-1.0000,2.0000,0.0000>,<-2.0000,2.0000,0.0000>];
- list playerrot = [<0.0000,0.0000,270.0000>,<0.0000,0.0000,270.0000>,<0.0000,0.0000,270.0000>,<0.0000,0.0000,270.0000>,<0.0000,0.0000,270.0000>];
- integer primNum = 0;
- integer lastPrimNum;
- integer LINK_PLAYER1 = 0;
- integer LINK_PLAYER2 = 0;
- integer LINK_PLAYER3 = 0;
- integer LINK_PLAYER4 = 0;
- integer LINK_PLAYER5 = 0;
- integer LINK_FACE1 = 0;
- integer LINK_FACE39 = 0;
- vector ff;
- vector fe;
- integer playcnt;
- integer ListXequY(list lx, list ly)
- {
- if (llList2CSV( ListXnotY(lx,ly) ) =="") return TRUE;
- else return FALSE;
- }
- list ListXnotY(list lx, list ly)
- {
- list lz = [];
- integer i = 0;
- integer n = llGetListLength(lx);
- for (; i < n; i++)
- if (llListFindList(ly,llList2List(lx,i,i)) == -1)
- lz += llList2List(lx,i,i);
- return lz;
- }
- setlink()
- {
- integer i = llGetNumberOfPrims();
- for (; i > 0; --i)
- {
- if(llGetLinkName(i)=="Player1"){LINK_PLAYER1 = i;}
- else if(llGetLinkName(i)=="Player2"){LINK_PLAYER2 = i;}
- else if(llGetLinkName(i)=="Player3"){LINK_PLAYER3 = i;}
- else if(llGetLinkName(i)=="Player4"){LINK_PLAYER4 = i;}
- else if(llGetLinkName(i)=="Player5"){LINK_PLAYER5 = i;}
- else if(llGetLinkName(i)=="face1"){LINK_FACE1 = i;}
- else if(llGetLinkName(i)=="face39"){LINK_FACE39 = i;}
- }
- }
- defpos(integer p)
- {
- if(p==0)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_POSITION,<2.04462, -0.39820, 4.25441>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_POSITION,<-2.03390, -0.39820, 0.85360>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_POSITION,<-2.02620, -0.39820, 4.24890>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_POSITION,<2.05540, -0.39820, 0.85580>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_POSITION,<0.01780, -0.39820, 2.53220>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- else if(p==1)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_POSITION,<2.04462, -0.39820, 4.25441>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- else if(p==2)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_POSITION,<-2.03390, -0.39820, 0.85360>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- else if(p==3)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_POSITION,<-2.02620, -0.39820, 4.24890>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- else if(p==4)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_POSITION,<2.05540, -0.39820, 0.85580>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- else if(p==5)
- {
- llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_POSITION,<0.01780, -0.39820, 2.53220>]);
- llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
- }
- }
- integer no2link(integer no)
- {
- if(no==0){return LINK_PLAYER1;}
- else if(no==1){return LINK_PLAYER2;}
- else if(no==2){return LINK_PLAYER3;}
- else if(no==3){return LINK_PLAYER4;}
- else if(no==4){return LINK_PLAYER5;}
- return -1;
- }
- integer link2no(integer link)
- {
- if(link==LINK_PLAYER1){return 0;}
- else if(link==LINK_PLAYER2){return 1;}
- else if(link==LINK_PLAYER3){return 2;}
- else if(link==LINK_PLAYER4){return 3;}
- else if(link==LINK_PLAYER5){return 4;}
- return -1;
- }
- UnSitAllAvatar()
- {
- integer i = llGetNumberOfPrims();
- for (; i > primNum; --i)
- {
- key uk = llGetLinkKey(i);
- if(llGetAgentInfo(uk)!=0)
- {
- llUnSit(uk);
- }
- }
- }
- key GetNewPlayerKey()
- {
- integer i = llGetNumberOfPrims();
- for (; i > primNum; --i)
- {
- key uk = llGetLinkKey(i);
- if(llListFindList(players,[uk])==-1&&llGetAgentInfo(uk)!=0)
- {
- return uk;
- }
- }
- return NULL_KEY;
- }
- UnSitNotPlayer()
- {
- integer i = llGetNumberOfPrims();
- for (; i > primNum; --i)
- {
- key uk = llGetLinkKey(i);
- if(llListFindList(players,[uk])==-1&&llGetAgentInfo(uk)!=0)
- {
- llUnSit(uk);
- }
- }
- }
- OnChangeLink()
- {
- integer len = llGetNumberOfPrims();
- if(lastPrimNum>len){
- OnDecLink();
- }else if(lastPrimNum<len){
- OnAddLink();
- }
- lastPrimNum = len;
- }
- integer FindPlayerKey(key pk)
- {
- integer i = llGetNumberOfPrims();
- for (; i > primNum; --i)
- {
- if(llGetLinkKey(i)==pk){return i;}
- }
- return -1;
- }
- integer id2link(key id)
- {
- integer i = llGetNumberOfPrims();
- for (; i > primNum; --i)
- {
- if(llGetLinkKey(i)==id){return i;}
- }
- return -1;
- }
- integer CheckEmptySlot()
- {
- integer ret = -1;
- integer i=0;
- for(;i<5;i++)
- {
- key gk = llList2Key(players,i);
- if(gk==NULL_KEY)
- {
- if(ret==-1){ret=i;}
- }
- else if(FindPlayerKey(gk)==-1)
- {
- integer ln = no2link(i);
- if(ln!=-1){llMessageLinked(ln,-2201,"RemoveKey",NULL_KEY);}
- players = llListReplaceList(players,[NULL_KEY],i,i);
- playcnt--;
- llMessageLinked(ln,-2201,"DIE",NULL_KEY);
- defpos(i+1);
- if(ListXequY(players,[NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY]))
- {
- llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
- llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
- llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
- }
- if(ret==-1){ret=i;}
- }
- }
- return ret;
- }
- integer SetAvPosAndRot(key id,integer num)
- {
- integer index = id2link(id);
- if(index!=-1&&llGetAgentInfo(id)!=0)
- {
- rotation rot = llEuler2Rot(llList2Vector(playerrot,num) * DEG_TO_RAD) * llGetLocalRot();
- rot = (rot / llGetRootRotation()) / llGetRootRotation();
- llSetLinkPrimitiveParamsFast(index,[PRIM_POSITION,llList2Vector(playerpos,num)]);
- llSetLinkPrimitiveParamsFast(index,[PRIM_ROTATION,rot]);
- return TRUE;
- }
- return FALSE;
- }
- OnDecLink()
- {
- CheckEmptySlot();
- UnSitNotPlayer();
- }
- OnAddLink()
- {
- integer pnum = CheckEmptySlot();
- if(pnum!=-1)
- {
- key gtk = GetNewPlayerKey();
- if(gtk!=NULL_KEY)
- {
- integer ln = no2link(pnum);
- if(ln!=-1)
- {
- integer ret = SetAvPosAndRot(gtk,pnum);
- if(ret)
- {
- llMessageLinked(LINK_THIS,-2204,"PRELOAD",NULL_KEY);
- if(ListXequY(players,[NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY]))
- {
- playcnt = 0;
- defpos(0);
- llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
- }
- playcnt++;
- if(playcnt==2)
- {
- llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
- llMessageLinked(LINK_PLAYER1,-2201,"ITEMRESET",NULL_KEY);
- llMessageLinked(LINK_PLAYER2,-2201,"ITEMRESET",NULL_KEY);
- llMessageLinked(LINK_PLAYER3,-2201,"ITEMRESET",NULL_KEY);
- llMessageLinked(LINK_PLAYER4,-2201,"ITEMRESET",NULL_KEY);
- llMessageLinked(LINK_PLAYER5,-2201,"ITEMRESET",NULL_KEY);
- llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
- llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
- defpos(0);
- }
- else if(playcnt>2){defpos(pnum+1);}
- players = llListReplaceList(players,[gtk],pnum,pnum);
- llMessageLinked(ln,-2201,"ADDKey",gtk);
- llMessageLinked(ln,-2201,"RESPAWN",NULL_KEY);
- llMessageLinked(LINK_THIS,-2201,"SENDIM,0",gtk);
- }
- }
- }
- }
- UnSitNotPlayer();
- }
- default
- {
- state_entry()
- {
- llSetText("Sit here ! 5P BomberMan",<1.0,1.0,1.0>,1.0);
- rotation sitRot = llAxisAngle2Rot(<0, 0, 1>, 270.0 * DEG_TO_RAD);
- llSitTarget(<0, 0, 0.1>, sitRot);
- llSetCameraEyeOffset(<-6,0,2.5> * sitRot);
- llSetCameraAtOffset(<0,0,2.5> * sitRot);
- setlink();
- players = [NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY];
- UnSitAllAvatar();
- primNum = 45;
- lastPrimNum = 45;
- llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
- llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
- vector f1 = (llList2Vector(llGetLinkPrimitiveParams(LINK_FACE1,[PRIM_POSITION]),0) - llGetRootPosition())/llGetRootRotation();
- vector f39 = (llList2Vector(llGetLinkPrimitiveParams(LINK_FACE39,[PRIM_POSITION]),0)- llGetRootPosition())/llGetRootRotation();
- float msize = (f1.z - f39.z)/12.0;
- ff = <f1.x+(msize*2.5),-0.40210,f1.z+(msize*0.5)>;
- fe = <f39.x-(msize*2.5),-0.40210,f39.z-(msize*0.5)>;
- llMessageLinked(LINK_THIS,-2200,"MAP,"+(string)ff + ","+(string)fe,NULL_KEY);
- llMessageLinked(LINK_PLAYER1,-2201,"DIE",NULL_KEY);
- llMessageLinked(LINK_PLAYER2,-2201,"DIE",NULL_KEY);
- llMessageLinked(LINK_PLAYER3,-2201,"DIE",NULL_KEY);
- llMessageLinked(LINK_PLAYER4,-2201,"DIE",NULL_KEY);
- llMessageLinked(LINK_PLAYER5,-2201,"DIE",NULL_KEY);
- playcnt = 0;
- defpos(0);
- }
- on_rez(integer p)
- {
- llResetScript();
- }
- changed(integer ch)
- {
- if(ch& CHANGED_LINK)
- {
- OnChangeLink();
- }
- }
- link_message(integer sender_num, integer num, string msg, key id)
- {
- if(num==-2201)
- {
- list glist = llCSV2List(msg);
- string cmd = llList2String(glist,0);
- if(cmd=="GETMAPSIZE")
- {
- llMessageLinked(sender_num,-2201,"MAP,"+(string)ff + ","+(string)fe,NULL_KEY);
- }
- else if(cmd=="RECVMAPDATA")
- {
- defpos(link2no(sender_num)+1);
- }
- else if(cmd=="IMDEAD")
- {
- integer no = link2no(sender_num);
- if(no==-1){no=llList2Integer(glist,3);}
- key dkey = llList2Key(players,no);
- if(dkey!=NULL_KEY)
- {
- llSay(0,llKey2Name(dkey) + " DEAD !");
- llUnSit(dkey);
- llMessageLinked(LINK_THIS,-2204,"DEATH",NULL_KEY);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement