Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Worldbuilder = {};
- local linerightnow = 0;
- local PATH_VOBPROJECTS = "vobprojects/"
- function Init_WorldBuilder()
- for i = 0, GetMaxPlayers() - 1 do
- Worldbuilder[i] = {};
- Worldbuilder[i].Active = 0;
- Worldbuilder[i].MoveSpeed = 5;
- Worldbuilder[i].RotateSpeed = 1;
- Worldbuilder[i].ProjectName = "NONE";
- Worldbuilder[i].VobID = 0;
- end
- end
- function ResetWB(i)
- Worldbuilder[i].Active = 0;
- Worldbuilder[i].MoveSpeed = 5;
- Worldbuilder[i].RotateSpeed = 1;
- Worldbuilder[i].ProjectName = "NONE";
- Worldbuilder[i].VobID = 0;
- end
- function GetNextVob(currentline)
- local path = "vobs.txt";
- if openFile(path, "r+") then
- if currentline >= 1 then
- for i = 0, currentline-1 do
- getFileNextLine(path);
- end
- end
- local result;
- local vobname;
- result, vobname = sscanf(getFileNextLine(path), "s");
- if result == 1 then
- -- print(vobname.." Has been created on line "..currentline);
- closeFile(path);
- return vobname;
- end
- end
- end
- function EnableWorldBuilder(playerid)
- if aclCheckPlayerGroup(playerid, "ADMIN") then -- Check if player have ADMIN permission
- if GetLogedIn(playerid) then
- if not(Worldbuilder[playerid].ProjectName == "NONE") then
- if Worldbuilder[playerid].Active == 0 then
- local x,y,z = GetPlayerPos(playerid);
- local angle = GetPlayerAngle(playerid);
- gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x+100,y,z+100);--static method
- gzVob:SetRotation(0,0, 0);
- SetCameraBehindVob(playerid,gzVob);
- FreezePlayer(playerid, 1);
- Worldbuilder[playerid].Active = 1;
- else
- FreezePlayer(playerid, 0);
- Worldbuilder[playerid].Active = 0;
- gzVob:Destroy();
- SetDefaultCamera(playerid);
- end
- else
- SendPlayerMessage(playerid, 255,0,0, "First name your project with '/wb_name (name)'");
- end
- end
- end
- end
- function ChangeVobRight(playerid)
- if linerightnow < 833 then
- linerightnow=linerightnow+1;
- else
- linerightnow=0;
- end
- local x,y,z = gzVob:GetPosition();
- local angle = GetPlayerAngle(playerid);
- gzVob:Destroy();
- gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x,y,z);--static method
- gzVob:SetRotation(0,0, 0);
- SetCameraBehindVob(playerid,gzVob);
- end
- function ChangeVobLeft(playerid)
- if linerightnow > 0 then
- linerightnow=linerightnow-1;
- else
- linerightnow=833;
- end
- local x,y,z = gzVob:GetPosition();
- local angle = GetPlayerAngle(playerid);
- gzVob:Destroy();
- gzVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),x,y,z);--static method
- gzVob:SetRotation(0,0, 0);
- SetCameraBehindVob(playerid,gzVob);
- end
- function RotateVobX1(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX+Worldbuilder[playerid].RotateSpeed ,rotY, rotZ);
- end
- function RotateVobX2(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX-Worldbuilder[playerid].RotateSpeed ,rotY, rotZ);
- end
- function RotateVobY1(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX,rotY+Worldbuilder[playerid].RotateSpeed, rotZ);
- end
- function RotateVobY2(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX,rotY-Worldbuilder[playerid].RotateSpeed, rotZ);
- end
- function RotateVobZ1(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX,rotY, rotZ+Worldbuilder[playerid].RotateSpeed);
- end
- function RotateVobZ2(playerid)
- local rotX,rotY,rotZ = gzVob:GetRotation();
- gzVob:SetRotation(rotX ,rotY, rotZ-Worldbuilder[playerid].RotateSpeed);
- end
- function MoveVobX1(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
- local radian = ((rotY2*math.pi)/180);
- gzVob:SetPosition(rotX+(Worldbuilder[playerid].MoveSpeed*math.cos(radian)) ,rotY, rotZ-(Worldbuilder[playerid].MoveSpeed*math.sin(radian)));
- end
- function MoveVobX2(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
- local radian = ((rotY2*math.pi)/180);
- gzVob:SetPosition(rotX-(Worldbuilder[playerid].MoveSpeed*math.cos(radian)) ,rotY, rotZ+(Worldbuilder[playerid].MoveSpeed*math.sin(radian)));
- end
- function MoveVobY1(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
- gzVob:SetPosition(rotX,rotY+Worldbuilder[playerid].MoveSpeed, rotZ);
- end
- function MoveVobY2(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- gzVob:SetPosition(rotX,rotY-Worldbuilder[playerid].MoveSpeed, rotZ);
- end
- function MoveVobZ1(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
- local radian = ((rotY2*math.pi)/180);
- gzVob:SetPosition(rotX+(Worldbuilder[playerid].MoveSpeed*math.sin(radian)),rotY, rotZ+(Worldbuilder[playerid].MoveSpeed*math.cos(radian)));
- end
- function MoveVobZ2(playerid)
- local rotX,rotY,rotZ = gzVob:GetPosition();
- local rotX2,rotY2,rotZ2 = gzVob:GetRotation();
- local radian = ((rotY2*math.pi)/180);
- gzVob:SetPosition(rotX-(Worldbuilder[playerid].MoveSpeed*math.sin(radian)) ,rotY, rotZ-(Worldbuilder[playerid].MoveSpeed*math.cos(radian)));
- end
- function NameProject(playerid, params)
- local result, projectname = sscanf(params, "s");
- if Worldbuilder[playerid].ProjectName == "NONE" then
- Worldbuilder[playerid].ProjectName = projectname;
- else
- SendPlayerMessage(playerid, 255,0,0, "Your project already has a name : "..Worldbuilder[playerid].ProjectName);
- end
- end
- function RegisterVOB(playerid)
- local X,Y,Z = gzVob:GetPosition();
- local rotX,rotY,rotZ = gzVob:GetRotation();
- local projectpath = PATH_VOBPROJECTS..Worldbuilder[playerid].ProjectName..".vobs";
- gVob = Vob.Create(GetNextVob(linerightnow),GetPlayerWorld(playerid),X,Y,Z);
- gVob:SetRotation(rotX ,rotY, rotZ);
- local file = io.open(projectpath, "a+");
- if file then
- local vobID = Worldbuilder[playerid].VobID;
- file:write('gVob'..vobID..' = Vob.Create("'..GetNextVob(linerightnow)..'","'..GetPlayerWorld(playerid)..'", '..X..','..Y..','..Z..');\n');
- file:write('gVob'..vobID..':SetRotation('..rotX..','..rotY..','..rotZ..');\n');
- Worldbuilder[playerid].VobID = vobID+1;
- file:close();
- end
- end
- function KeyWorldBuilder(playerid,keyDown)
- if keyDown == KEY_LEFT then
- ChangeVobLeft(playerid);
- elseif keyDown == KEY_RIGHT then
- ChangeVobRight(playerid);
- elseif keyDown == KEY_NUMPAD8 then
- RotateVobX1(playerid);
- elseif keyDown == KEY_NUMPAD2 then
- RotateVobX2(playerid);
- elseif keyDown == KEY_NUMPAD4 then
- RotateVobY1(playerid);
- elseif keyDown == KEY_NUMPAD6 then
- RotateVobY2(playerid);
- elseif keyDown == KEY_NUMPAD1 then
- RotateVobZ1(playerid);
- elseif keyDown == KEY_NUMPAD3 then
- RotateVobZ2(playerid);
- elseif keyDown == KEY_NUMPAD5 then
- gzVob:SetRotation(0,0,0);
- elseif keyDown == KEY_D then
- MoveVobX1(playerid);
- elseif keyDown == KEY_A then
- MoveVobX2(playerid);
- elseif keyDown == KEY_Z then
- MoveVobY1(playerid);
- elseif keyDown == KEY_X then
- MoveVobY2(playerid);
- elseif keyDown == KEY_W then
- MoveVobZ1(playerid);
- elseif keyDown == KEY_S then
- MoveVobZ2(playerid);
- end
- end
- function KeyWorldBuilder1(theargs)
- local result, placeholder, playerid, keyDown = sscanf(theargs, "sdd");
- KeyWorldBuilder(playerid, keyDown);
- end
- addCommandHandler("/wb",EnableWorldBuilder);
- addCommandHandler("/wb_name",NameProject);
- function OnPlayerKey(playerid,keyDown,keyUp)
- if Worldbuilder[playerid].Active == 1 then
- 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
- local theargs = "placeholder "..playerid.." "..keyDown;
- timerid = SetTimerEx("KeyWorldBuilder1",10,1,theargs);
- --print(timerid.." is the timer number "..additiveid);
- -- additiveid = additiveid+1;
- elseif keyDown == KEY_LEFT or keyDown == KEY_RIGHT then
- KeyWorldBuilder(playerid, keyDown);
- 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
- KillTimer(timerid);
- if timerid == 7 then
- KillTimer(timerid-1);
- end
- if timerid == 8 then
- KillTimer(timerid-1);
- KillTimer(timerid-2);
- end
- --print(timerid.." is the timer killed at id "..additiveid);
- elseif keyDown == KEY_LCONTROL then
- if not(Worldbuilder[playerid].ProjectName == "NONE") then
- RegisterVOB(playerid);
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement