Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. key char_uuid = "cd7f0b2e-b39b-3e33-2d08-63f6d8855066";
  2.  
  3. list players = [];
  4. 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>];
  5. 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>];
  6. integer primNum = 0;
  7. integer lastPrimNum;
  8. integer LINK_PLAYER1 = 0;
  9. integer LINK_PLAYER2 = 0;
  10. integer LINK_PLAYER3 = 0;
  11. integer LINK_PLAYER4 = 0;
  12. integer LINK_PLAYER5 = 0;
  13. integer LINK_FACE1 = 0;
  14. integer LINK_FACE39 = 0;
  15. vector ff;
  16. vector fe;
  17. integer playcnt;
  18. integer ListXequY(list lx, list ly)
  19. {
  20.     if (llList2CSV( ListXnotY(lx,ly) ) =="") return TRUE;
  21.     else return FALSE;
  22. }
  23. list ListXnotY(list lx, list ly)
  24. {
  25.     list lz = [];
  26.     integer i = 0;
  27.     integer n = llGetListLength(lx);
  28.     for (; i < n; i++)
  29.         if (llListFindList(ly,llList2List(lx,i,i)) == -1)
  30.             lz += llList2List(lx,i,i);
  31.     return lz;
  32. }
  33. setlink()
  34. {
  35.     integer i = llGetNumberOfPrims();
  36.     for (; i > 0; --i)
  37.     {
  38.         if(llGetLinkName(i)=="Player1"){LINK_PLAYER1 = i;}
  39.         else if(llGetLinkName(i)=="Player2"){LINK_PLAYER2 = i;}
  40.         else if(llGetLinkName(i)=="Player3"){LINK_PLAYER3 = i;}
  41.         else if(llGetLinkName(i)=="Player4"){LINK_PLAYER4 = i;}
  42.         else if(llGetLinkName(i)=="Player5"){LINK_PLAYER5 = i;}
  43.         else if(llGetLinkName(i)=="face1"){LINK_FACE1 = i;}
  44.         else if(llGetLinkName(i)=="face39"){LINK_FACE39 = i;}
  45.     }
  46. }
  47. defpos(integer p)
  48. {
  49.     if(p==0)
  50.     {
  51.         llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_POSITION,<2.04462, -0.39820, 4.25441>]);
  52.         llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_POSITION,<-2.03390, -0.39820, 0.85360>]);
  53.         llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_POSITION,<-2.02620, -0.39820, 4.24890>]);
  54.         llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_POSITION,<2.05540, -0.39820, 0.85580>]);
  55.         llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_POSITION,<0.01780, -0.39820, 2.53220>]);
  56.         llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  57.         llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  58.         llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  59.         llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  60.         llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  61.     }
  62.     else if(p==1)
  63.     {
  64.         llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_POSITION,<2.04462, -0.39820, 4.25441>]);
  65.         llSetLinkPrimitiveParamsFast(LINK_PLAYER1,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  66.     }
  67.     else if(p==2)
  68.     {
  69.         llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_POSITION,<-2.03390, -0.39820, 0.85360>]);
  70.         llSetLinkPrimitiveParamsFast(LINK_PLAYER2,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  71.     }
  72.     else if(p==3)
  73.     {
  74.         llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_POSITION,<-2.02620, -0.39820, 4.24890>]);
  75.         llSetLinkPrimitiveParamsFast(LINK_PLAYER3,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  76.     }
  77.     else if(p==4)
  78.     {
  79.         llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_POSITION,<2.05540, -0.39820, 0.85580>]);
  80.         llSetLinkPrimitiveParamsFast(LINK_PLAYER4,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  81.     }
  82.     else if(p==5)
  83.     {
  84.         llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_POSITION,<0.01780, -0.39820, 2.53220>]);
  85.         llSetLinkPrimitiveParamsFast(LINK_PLAYER5,[PRIM_TEXTURE,3,char_uuid,<0.25,0.333,0.0>,<0.125,0.333,0.0>,0.0]);
  86.     }
  87. }
  88. integer no2link(integer no)
  89. {
  90.     if(no==0){return LINK_PLAYER1;}
  91.     else if(no==1){return LINK_PLAYER2;}
  92.     else if(no==2){return LINK_PLAYER3;}
  93.     else if(no==3){return LINK_PLAYER4;}
  94.     else if(no==4){return LINK_PLAYER5;}
  95.     return -1;
  96. }
  97. integer link2no(integer link)
  98. {
  99.     if(link==LINK_PLAYER1){return 0;}
  100.     else if(link==LINK_PLAYER2){return 1;}
  101.     else if(link==LINK_PLAYER3){return 2;}
  102.     else if(link==LINK_PLAYER4){return 3;}
  103.     else if(link==LINK_PLAYER5){return 4;}
  104.     return -1;
  105. }
  106. UnSitAllAvatar()
  107. {
  108.     integer i = llGetNumberOfPrims();
  109.     for (; i > primNum; --i)
  110.     {
  111.         key uk = llGetLinkKey(i);
  112.         if(llGetAgentInfo(uk)!=0)
  113.         {
  114.             llUnSit(uk);
  115.         }
  116.     }
  117. }
  118. key GetNewPlayerKey()
  119. {
  120.     integer i = llGetNumberOfPrims();
  121.     for (; i > primNum; --i)
  122.     {
  123.         key uk = llGetLinkKey(i);
  124.         if(llListFindList(players,[uk])==-1&&llGetAgentInfo(uk)!=0)
  125.         {
  126.             return uk;
  127.         }
  128.     }  
  129.     return NULL_KEY;
  130. }
  131. UnSitNotPlayer()
  132. {
  133.     integer i = llGetNumberOfPrims();
  134.     for (; i > primNum; --i)
  135.     {
  136.         key uk = llGetLinkKey(i);
  137.         if(llListFindList(players,[uk])==-1&&llGetAgentInfo(uk)!=0)
  138.         {
  139.             llUnSit(uk);
  140.         }
  141.     }
  142. }
  143. OnChangeLink()
  144. {
  145.     integer len = llGetNumberOfPrims();
  146.     if(lastPrimNum>len){
  147.         OnDecLink();
  148.     }else if(lastPrimNum<len){
  149.         OnAddLink();
  150.     }
  151.     lastPrimNum = len;
  152. }
  153. integer FindPlayerKey(key pk)
  154. {
  155.     integer i = llGetNumberOfPrims();
  156.     for (; i > primNum; --i)
  157.     {
  158.         if(llGetLinkKey(i)==pk){return i;}
  159.     }
  160.     return -1;
  161. }
  162. integer id2link(key id)
  163. {
  164.     integer i = llGetNumberOfPrims();
  165.     for (; i > primNum; --i)
  166.     {
  167.         if(llGetLinkKey(i)==id){return i;}
  168.     }
  169.     return -1;
  170. }
  171. integer CheckEmptySlot()
  172. {
  173.     integer ret = -1;
  174.     integer i=0;
  175.     for(;i<5;i++)
  176.     {
  177.         key gk = llList2Key(players,i);
  178.         if(gk==NULL_KEY)
  179.         {
  180.             if(ret==-1){ret=i;}
  181.         }
  182.         else if(FindPlayerKey(gk)==-1)
  183.         {
  184.             integer ln = no2link(i);
  185.             if(ln!=-1){llMessageLinked(ln,-2201,"RemoveKey",NULL_KEY);}
  186.             players = llListReplaceList(players,[NULL_KEY],i,i);
  187.             playcnt--;
  188.             llMessageLinked(ln,-2201,"DIE",NULL_KEY);
  189.             defpos(i+1);
  190.             if(ListXequY(players,[NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY]))
  191.             {
  192.                 llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
  193.                 llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
  194.                 llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
  195.             }
  196.             if(ret==-1){ret=i;}
  197.         }
  198.     }
  199.     return ret;
  200. }
  201. integer SetAvPosAndRot(key id,integer num)
  202. {
  203.     integer index = id2link(id);
  204.     if(index!=-1&&llGetAgentInfo(id)!=0)
  205.     {
  206.         rotation rot = llEuler2Rot(llList2Vector(playerrot,num) * DEG_TO_RAD) * llGetLocalRot();
  207.         rot = (rot / llGetRootRotation()) / llGetRootRotation();
  208.  
  209.         llSetLinkPrimitiveParamsFast(index,[PRIM_POSITION,llList2Vector(playerpos,num)]);
  210.         llSetLinkPrimitiveParamsFast(index,[PRIM_ROTATION,rot]);
  211.         return TRUE;
  212.     }
  213.     return FALSE;
  214. }
  215. OnDecLink()
  216. {
  217.     CheckEmptySlot();
  218.     UnSitNotPlayer();
  219. }
  220. OnAddLink()
  221. {
  222.     integer pnum = CheckEmptySlot();
  223.     if(pnum!=-1)
  224.     {
  225.         key gtk = GetNewPlayerKey();
  226.         if(gtk!=NULL_KEY)
  227.         {
  228.             integer ln = no2link(pnum);
  229.             if(ln!=-1)
  230.             {
  231.                 integer ret = SetAvPosAndRot(gtk,pnum);
  232.                 if(ret)
  233.                 {
  234.                     llMessageLinked(LINK_THIS,-2204,"PRELOAD",NULL_KEY);
  235.                     if(ListXequY(players,[NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY]))
  236.                     {
  237.                         playcnt = 0;
  238.                         defpos(0);
  239.                         llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
  240.                     }
  241.                     playcnt++;
  242.                     if(playcnt==2)
  243.                     {
  244.                         llMessageLinked(LINK_THIS,-2203,"GameEnd",NULL_KEY);
  245.                         llMessageLinked(LINK_PLAYER1,-2201,"ITEMRESET",NULL_KEY);
  246.                         llMessageLinked(LINK_PLAYER2,-2201,"ITEMRESET",NULL_KEY);
  247.                         llMessageLinked(LINK_PLAYER3,-2201,"ITEMRESET",NULL_KEY);
  248.                         llMessageLinked(LINK_PLAYER4,-2201,"ITEMRESET",NULL_KEY);
  249.                         llMessageLinked(LINK_PLAYER5,-2201,"ITEMRESET",NULL_KEY);
  250.                         llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
  251.                         llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
  252.                         defpos(0);
  253.                     }
  254.                     else if(playcnt>2){defpos(pnum+1);}
  255.                     players = llListReplaceList(players,[gtk],pnum,pnum);
  256.                     llMessageLinked(ln,-2201,"ADDKey",gtk);
  257.                     llMessageLinked(ln,-2201,"RESPAWN",NULL_KEY);
  258.                     llMessageLinked(LINK_THIS,-2201,"SENDIM,0",gtk);
  259.                 }
  260.             }
  261.         }
  262.     }
  263.     UnSitNotPlayer();
  264. }
  265. default
  266. {
  267.     state_entry()
  268.     {
  269.         llSetText("Sit here ! 5P BomberMan",<1.0,1.0,1.0>,1.0);
  270.         rotation sitRot = llAxisAngle2Rot(<0, 0, 1>, 270.0 * DEG_TO_RAD);
  271.         llSitTarget(<0, 0, 0.1>, sitRot);
  272.         llSetCameraEyeOffset(<-6,0,2.5> * sitRot);
  273.         llSetCameraAtOffset(<0,0,2.5> * sitRot);
  274.         setlink();
  275.         players = [NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY,NULL_KEY];
  276.         UnSitAllAvatar();
  277.         primNum = 45;
  278.         lastPrimNum = 45;
  279.         llMessageLinked(LINK_THIS,-2200,"SetFIELD",NULL_KEY);
  280.         llMessageLinked(LINK_THIS,-2203,"GameStart",NULL_KEY);
  281.         vector f1 = (llList2Vector(llGetLinkPrimitiveParams(LINK_FACE1,[PRIM_POSITION]),0) - llGetRootPosition())/llGetRootRotation();
  282.         vector f39 = (llList2Vector(llGetLinkPrimitiveParams(LINK_FACE39,[PRIM_POSITION]),0)- llGetRootPosition())/llGetRootRotation();
  283.         float msize = (f1.z - f39.z)/12.0;
  284.         ff = <f1.x+(msize*2.5),-0.40210,f1.z+(msize*0.5)>;
  285.         fe = <f39.x-(msize*2.5),-0.40210,f39.z-(msize*0.5)>;
  286.         llMessageLinked(LINK_THIS,-2200,"MAP,"+(string)ff + ","+(string)fe,NULL_KEY);
  287.         llMessageLinked(LINK_PLAYER1,-2201,"DIE",NULL_KEY);
  288.         llMessageLinked(LINK_PLAYER2,-2201,"DIE",NULL_KEY);
  289.         llMessageLinked(LINK_PLAYER3,-2201,"DIE",NULL_KEY);
  290.         llMessageLinked(LINK_PLAYER4,-2201,"DIE",NULL_KEY);
  291.         llMessageLinked(LINK_PLAYER5,-2201,"DIE",NULL_KEY);
  292.         playcnt = 0;
  293.         defpos(0);
  294.     }
  295.     on_rez(integer p)
  296.     {
  297.         llResetScript();
  298.     }
  299.     changed(integer ch)
  300.     {
  301.         if(ch& CHANGED_LINK)
  302.         {
  303.             OnChangeLink();
  304.         }
  305.     }
  306.     link_message(integer sender_num, integer num, string msg, key id)
  307.     {
  308.         if(num==-2201)
  309.         {
  310.             list glist = llCSV2List(msg);
  311.             string cmd = llList2String(glist,0);
  312.             if(cmd=="GETMAPSIZE")
  313.             {
  314.                 llMessageLinked(sender_num,-2201,"MAP,"+(string)ff + ","+(string)fe,NULL_KEY);
  315.             }
  316.             else if(cmd=="RECVMAPDATA")
  317.             {
  318.                 defpos(link2no(sender_num)+1);
  319.             }
  320.             else if(cmd=="IMDEAD")
  321.             {
  322.                 integer no = link2no(sender_num);
  323.                 if(no==-1){no=llList2Integer(glist,3);}
  324.                 key dkey = llList2Key(players,no);
  325.                 if(dkey!=NULL_KEY)
  326.                 {
  327.                     llSay(0,llKey2Name(dkey) + " DEAD !");
  328.                     llUnSit(dkey);
  329.                     llMessageLinked(LINK_THIS,-2204,"DEATH",NULL_KEY);
  330.                 }
  331.             }
  332.         }
  333.     }
  334. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement