Advertisement
Guest User

worldbuilder

a guest
Apr 8th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.62 KB | None | 0 0
  1. Worldbuilder = {};
  2. local linerightnow = 0;
  3. local PATH_VOBPROJECTS = "vobprojects/"
  4.  
  5. function Init_WorldBuilder()
  6.  
  7.     for i = 0, GetMaxPlayers() - 1 do
  8.         Worldbuilder[i] = {};
  9.         Worldbuilder[i].Active = 0;
  10.         Worldbuilder[i].MoveSpeed = 5;
  11.         Worldbuilder[i].RotateSpeed = 1;
  12.         Worldbuilder[i].ProjectName = "NONE";
  13.         Worldbuilder[i].VobID = 0;
  14.     end
  15.  
  16. end
  17. function ResetWB(i)
  18.         Worldbuilder[i].Active = 0;
  19.         Worldbuilder[i].MoveSpeed = 5;
  20.         Worldbuilder[i].RotateSpeed = 1;
  21.         Worldbuilder[i].ProjectName = "NONE";
  22.         Worldbuilder[i].VobID = 0;
  23.  
  24. end
  25. function GetNextVob(currentline)
  26. local path = "vobs.txt";
  27. if openFile(path, "r+") then
  28. if currentline >= 1 then
  29. for i = 0, currentline-1 do
  30. getFileNextLine(path);
  31. end
  32. end
  33.                 local result;
  34.                 local vobname;
  35.                 result, vobname = sscanf(getFileNextLine(path), "s");
  36.                 if result == 1 then
  37.         -- print(vobname.." Has been created on line "..currentline);
  38.                         closeFile(path);
  39.                         return vobname;
  40.                
  41.                 end
  42.                
  43.  
  44. end
  45.  
  46. end
  47.  
  48. function EnableWorldBuilder(playerid)
  49. if aclCheckPlayerGroup(playerid, "ADMIN") then -- Check if player have ADMIN permission
  50.      if GetLogedIn(playerid) then
  51.      if not(Worldbuilder[playerid].ProjectName == "NONE") then
  52.      if Worldbuilder[playerid].Active == 0 then
  53.      local x,y,z = GetPlayerPos(playerid);
  54.      local angle = GetPlayerAngle(playerid);
  55.     gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x+100,y,z+100);--static method
  56.         gzVob:SetRotation(0,0, 0);
  57.         SetCameraBehindVob(playerid,gzVob);
  58.      FreezePlayer(playerid, 1);
  59.     Worldbuilder[playerid].Active = 1;
  60.     else
  61.      FreezePlayer(playerid, 0);
  62.     Worldbuilder[playerid].Active = 0;
  63.     gzVob:Destroy();
  64.     SetDefaultCamera(playerid);
  65.    
  66. end
  67. else
  68. SendPlayerMessage(playerid, 255,0,0, "First name your project with '/wb_name (name)'");
  69. end
  70. end
  71. end
  72. end
  73.  
  74. function ChangeVobRight(playerid)
  75. if linerightnow < 833 then
  76. linerightnow=linerightnow+1;
  77. else
  78. linerightnow=0;
  79. end
  80.  
  81. local x,y,z = gzVob:GetPosition();
  82.      local angle = GetPlayerAngle(playerid);
  83.      
  84.     gzVob:Destroy();
  85.     gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x,y,z);--static method
  86.  
  87.         gzVob:SetRotation(0,0, 0);
  88.         SetCameraBehindVob(playerid,gzVob);
  89.        
  90. end
  91.  
  92. function ChangeVobLeft(playerid)
  93. if linerightnow > 0 then
  94. linerightnow=linerightnow-1;
  95. else
  96. linerightnow=833;
  97. end
  98. local x,y,z = gzVob:GetPosition();
  99.      local angle = GetPlayerAngle(playerid);
  100.     gzVob:Destroy();
  101.     gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x,y,z);--static method
  102.         gzVob:SetRotation(0,0, 0);
  103.         SetCameraBehindVob(playerid,gzVob);
  104. end
  105.  
  106. function RotateVobX1(playerid)
  107. local rotX,rotY,rotZ = gzVob:GetRotation();
  108. gzVob:SetRotation(rotX+Worldbuilder[playerid].RotateSpeed ,rotY, rotZ);
  109.  
  110. end
  111. function RotateVobX2(playerid)
  112. local rotX,rotY,rotZ = gzVob:GetRotation();
  113.  
  114. gzVob:SetRotation(rotX-Worldbuilder[playerid].RotateSpeed ,rotY, rotZ);
  115.  
  116. end
  117.  
  118. function RotateVobY1(playerid)
  119. local rotX,rotY,rotZ = gzVob:GetRotation();
  120.  
  121. gzVob:SetRotation(rotX,rotY+Worldbuilder[playerid].RotateSpeed, rotZ);
  122.  
  123. end
  124. function RotateVobY2(playerid)
  125. local rotX,rotY,rotZ = gzVob:GetRotation();
  126.  
  127. gzVob:SetRotation(rotX,rotY-Worldbuilder[playerid].RotateSpeed, rotZ);
  128.  
  129. end
  130.  
  131. function RotateVobZ1(playerid)
  132. local rotX,rotY,rotZ = gzVob:GetRotation();
  133.  
  134. gzVob:SetRotation(rotX,rotY, rotZ+Worldbuilder[playerid].RotateSpeed);
  135.  
  136. end
  137. function RotateVobZ2(playerid)
  138. local rotX,rotY,rotZ = gzVob:GetRotation();
  139.  
  140. gzVob:SetRotation(rotX ,rotY, rotZ-Worldbuilder[playerid].RotateSpeed);
  141.  
  142. end
  143.  
  144. function MoveVobX1(playerid)
  145. local rotX,rotY,rotZ = gzVob:GetPosition();
  146. local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
  147. local radian = ((rotY2*math.pi)/180);
  148. gzVob:SetPosition(rotX+(Worldbuilder[playerid].MoveSpeed*math.cos(radian)) ,rotY, rotZ-(Worldbuilder[playerid].MoveSpeed*math.sin(radian)));
  149.  
  150. end
  151. function MoveVobX2(playerid)
  152. local rotX,rotY,rotZ = gzVob:GetPosition();
  153. local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
  154. local radian = ((rotY2*math.pi)/180);
  155.  
  156. gzVob:SetPosition(rotX-(Worldbuilder[playerid].MoveSpeed*math.cos(radian)) ,rotY, rotZ+(Worldbuilder[playerid].MoveSpeed*math.sin(radian)));
  157.  
  158. end
  159.  
  160. function MoveVobY1(playerid)
  161. local rotX,rotY,rotZ = gzVob:GetPosition();
  162.  
  163. local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
  164. gzVob:SetPosition(rotX,rotY+Worldbuilder[playerid].MoveSpeed, rotZ);
  165.  
  166. end
  167. function MoveVobY2(playerid)
  168. local rotX,rotY,rotZ = gzVob:GetPosition();
  169.  
  170. gzVob:SetPosition(rotX,rotY-Worldbuilder[playerid].MoveSpeed, rotZ);
  171.  
  172. end
  173.  
  174. function MoveVobZ1(playerid)
  175. local rotX,rotY,rotZ = gzVob:GetPosition();
  176.  
  177. local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
  178. local radian = ((rotY2*math.pi)/180);
  179. gzVob:SetPosition(rotX+(Worldbuilder[playerid].MoveSpeed*math.sin(radian)),rotY, rotZ+(Worldbuilder[playerid].MoveSpeed*math.cos(radian)));
  180.  
  181. end
  182. function MoveVobZ2(playerid)
  183. local rotX,rotY,rotZ = gzVob:GetPosition();
  184. local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
  185. local radian = ((rotY2*math.pi)/180);
  186. gzVob:SetPosition(rotX-(Worldbuilder[playerid].MoveSpeed*math.sin(radian)) ,rotY, rotZ-(Worldbuilder[playerid].MoveSpeed*math.cos(radian)));
  187.  
  188. end
  189.  
  190. function NameProject(playerid, params)
  191. local result, projectname = sscanf(params, "s");
  192. if Worldbuilder[playerid].ProjectName == "NONE" then
  193. Worldbuilder[playerid].ProjectName = projectname;
  194. else
  195. SendPlayerMessage(playerid, 255,0,0, "Your project already has a name : "..Worldbuilder[playerid].ProjectName);
  196. end
  197. end
  198.  
  199.  
  200. function RegisterVOB(playerid)
  201. local X,Y,Z = gzVob:GetPosition();
  202. local rotX,rotY,rotZ = gzVob:GetRotation();
  203. local projectpath = PATH_VOBPROJECTS..Worldbuilder[playerid].ProjectName..".vobs";
  204.  gVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),X,Y,Z);
  205. gVob:SetRotation(rotX ,rotY, rotZ);
  206. local file = io.open(projectpath, "a+");
  207.             if file then
  208.             local vobID = Worldbuilder[playerid].VobID;
  209.             file:write('gVob'..vobID..' = Vob.Create("'..GetNextVob(linerightnow)..'","'..GetPlayerWorld(playerid)..'", '..X..','..Y..','..Z..');\n');
  210.             file:write('gVob'..vobID..':SetRotation('..rotX..','..rotY..','..rotZ..');\n');
  211.             Worldbuilder[playerid].VobID = vobID+1;
  212.             file:close();
  213. end
  214. end
  215.  
  216. function KeyWorldBuilder(playerid,keyDown)
  217. if keyDown == KEY_LEFT then
  218. ChangeVobLeft(playerid);
  219. elseif keyDown == KEY_RIGHT then
  220. ChangeVobRight(playerid);
  221. elseif keyDown == KEY_NUMPAD8 then
  222. RotateVobX1(playerid);
  223. elseif keyDown == KEY_NUMPAD2 then
  224. RotateVobX2(playerid);
  225. elseif keyDown == KEY_NUMPAD4 then
  226. RotateVobY1(playerid);
  227. elseif keyDown == KEY_NUMPAD6 then
  228. RotateVobY2(playerid);
  229. elseif keyDown == KEY_NUMPAD1 then
  230. RotateVobZ1(playerid);
  231. elseif keyDown == KEY_NUMPAD3 then
  232. RotateVobZ2(playerid);
  233. elseif keyDown == KEY_NUMPAD5 then
  234. gzVob:SetRotation(0,0,0);
  235. elseif keyDown == KEY_D then
  236. MoveVobX1(playerid);
  237. elseif keyDown == KEY_A then
  238. MoveVobX2(playerid);
  239. elseif keyDown == KEY_Z then
  240. MoveVobY1(playerid);
  241. elseif keyDown == KEY_X then
  242. MoveVobY2(playerid);
  243. elseif keyDown == KEY_W then
  244. MoveVobZ1(playerid);
  245. elseif keyDown == KEY_S then
  246. MoveVobZ2(playerid);
  247. end
  248. end
  249.  
  250. function KeyWorldBuilder1(theargs)
  251. local result, placeholder, playerid, keyDown = sscanf(theargs, "sdd");
  252. KeyWorldBuilder(playerid, keyDown);
  253. end
  254.  
  255. addCommandHandler("/wb",EnableWorldBuilder);
  256. addCommandHandler("/wb_name",NameProject);
  257.  
  258. function OnPlayerKey(playerid,keyDown,keyUp)
  259. if Worldbuilder[playerid].Active == 1 then
  260. if keyDown == KEY_NUMPAD8 or keyDown == KEY_NUMPAD2 or keyDown == KEY_NUMPAD4 or keyDown == KEY_NUMPAD5 or keyDown == KEY_NUMPAD3 or keyDown == KEY_NUMPAD1 or keyDown == KEY_NUMPAD6 or keyDown == KEY_A or keyDown == KEY_D or keyDown == KEY_S or keyDown == KEY_X or keyDown == KEY_W or keyDown == KEY_Z then
  261. local theargs = "placeholder "..playerid.." "..keyDown;
  262. timerid = SetTimerEx("KeyWorldBuilder1",10,1,theargs);
  263. --print(timerid.." is the timer number "..additiveid);
  264. -- additiveid = additiveid+1;
  265. elseif keyDown == KEY_LEFT or keyDown == KEY_RIGHT then
  266. KeyWorldBuilder(playerid, keyDown);
  267. elseif keyUp == KEY_NUMPAD8 or keyUp == KEY_NUMPAD2 or keyUp == KEY_NUMPAD4 or keyUp == KEY_NUMPAD5 or keyUp == KEY_NUMPAD3 or keyUp == KEY_NUMPAD1 or keyUp == KEY_NUMPAD6 or keyUp == KEY_A or keyUp == KEY_D or keyUp == KEY_S or keyUp == KEY_X or keyUp == KEY_W or keyUp == KEY_Z then
  268. KillTimer(timerid);
  269. if timerid == 7 then
  270. KillTimer(timerid-1);
  271. end
  272. if timerid == 8 then
  273. KillTimer(timerid-1);
  274. KillTimer(timerid-2);
  275. end
  276. --print(timerid.." is the timer killed at id "..additiveid);
  277. elseif keyDown == KEY_LCONTROL then
  278. if not(Worldbuilder[playerid].ProjectName == "NONE") then
  279. RegisterVOB(playerid);
  280. end
  281. end
  282. end
  283. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement