rbxlx-to-rojo
This commit is contained in:
parent
b70dcdb809
commit
8541916f42
|
|
@ -0,0 +1,8 @@
|
|||
.vscode
|
||||
|
||||
*.rbxl.lock
|
||||
*.rbxlx.lock
|
||||
|
||||
.DS_Store
|
||||
|
||||
rbxlx-to-rojo.log
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "project",
|
||||
"tree": {
|
||||
"$className": "DataModel",
|
||||
"ReplicatedStorage": {
|
||||
"$className": "ReplicatedStorage",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/ReplicatedStorage"
|
||||
},
|
||||
"ServerScriptService": {
|
||||
"$className": "ServerScriptService",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/ServerScriptService"
|
||||
},
|
||||
"ServerStorage": {
|
||||
"$className": "ServerStorage",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/ServerStorage"
|
||||
},
|
||||
"StarterGui": {
|
||||
"$className": "StarterGui",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/StarterGui"
|
||||
},
|
||||
"StarterPack": {
|
||||
"$className": "StarterPack",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/StarterPack"
|
||||
},
|
||||
"StarterPlayer": {
|
||||
"$className": "StarterPlayer",
|
||||
"StarterPlayerScripts": {
|
||||
"$className": "StarterPlayerScripts",
|
||||
"$ignoreUnknownInstances": true,
|
||||
"$path": "src/StarterPlayer/StarterPlayerScripts"
|
||||
},
|
||||
"$ignoreUnknownInstances": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
-- i am still learning this "oop" thing, god i hate the abbreviation
|
||||
-- also feel free to tell me whether this oop code sucks or not PLZ
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
local GrabbedStuff = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Menu"):WaitForChild("GrabStuff"))
|
||||
|
||||
DataHandler = {}
|
||||
DataHandler.__index = DataHandler
|
||||
|
||||
function DataHandler.New(newdata, plruserid)
|
||||
if newdata then
|
||||
local NewTab = {}
|
||||
NewTab.data = newdata
|
||||
NewTab.userdata = newdata["FWM_USER_DATA_"..tostring(plruserid)] or nil
|
||||
|
||||
setmetatable(NewTab, DataHandler)
|
||||
|
||||
return NewTab
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
function DataHandler:changeSetting(changing, newval)
|
||||
--local userData = self.userdata
|
||||
|
||||
--if userData then
|
||||
-- local playerData = self.userdata["PlayerData"]
|
||||
|
||||
-- if playerData then
|
||||
-- local otherUserData = playerData["UserData"]
|
||||
-- local userSettings = otherUserData["Settings"]
|
||||
|
||||
-- local foundSetting = userSettings[changing]
|
||||
|
||||
-- if foundSetting ~= nil then
|
||||
-- userSettings[changing] = newval
|
||||
-- end
|
||||
-- end
|
||||
--end
|
||||
|
||||
if self.userdata and self.userdata["PlayerData"]["UserData"]["Settings"][changing] ~= nil then
|
||||
self.userdata["PlayerData"]["UserData"]["Settings"][changing] = newval
|
||||
end
|
||||
end
|
||||
|
||||
function DataHandler:changeAvatar(newfull, part, color)
|
||||
local userData = self.userdata
|
||||
|
||||
if userData then
|
||||
local playerData = self.userdata["PlayerData"]
|
||||
|
||||
if playerData then
|
||||
local get2007Avatar = playerData["Avatar"]
|
||||
local get2006Avatar = playerData["Avatar2006"]
|
||||
|
||||
if get2006Avatar and get2007Avatar then
|
||||
if newfull then
|
||||
playerData["Avatar"] = table.clone(newfull)
|
||||
playerData["Avatar2006"] = table.clone(newfull)
|
||||
elseif (part and color) and get2007Avatar[part] ~= nil then
|
||||
--local Color = color[1]
|
||||
--local Transparency = color[2]
|
||||
--local Reflectance = color[3]
|
||||
|
||||
playerData["Avatar"][part] = color
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--if self.userdata and self.userdata["PlayerData"]["Avatar"] ~= nil and self.userdata["PlayerData"]["Avatar2006"] ~= nil then
|
||||
-- if (part and color) and self.userdata["PlayerData"]["Avatar"][part] ~= nil then
|
||||
-- self.userdata["PlayerData"]["Avatar"][part] = color
|
||||
-- else
|
||||
-- self.userdata["PlayerData"]["Avatar"] = newfull or self.userdata["PlayerData"]["Avatar"]
|
||||
-- end
|
||||
--end
|
||||
end
|
||||
|
||||
function DataHandler:getData()
|
||||
return self.data
|
||||
end
|
||||
|
||||
function DataHandler:getUserData()
|
||||
return self.userdata
|
||||
end
|
||||
|
||||
function DataHandler:getSetting()
|
||||
if self.userdata and self.userdata["PlayerData"]["UserData"]["Settings"] ~= nil then
|
||||
return self.userdata["PlayerData"]["UserData"]["Settings"]
|
||||
end
|
||||
end
|
||||
|
||||
function DataHandler:getAvatar(avatarType)
|
||||
local userData = self.userdata
|
||||
|
||||
if userData then
|
||||
local playerData = self.userdata["PlayerData"]
|
||||
|
||||
if playerData then
|
||||
local get2007Avatar = playerData["Avatar"]
|
||||
local get2006Avatar = playerData["Avatar2006"]
|
||||
|
||||
if get2006Avatar and get2007Avatar then
|
||||
|
||||
if avatarType == 2006 then
|
||||
return get2006Avatar
|
||||
else
|
||||
return get2007Avatar
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--if self.userdata and self.userdata["PlayerData"]["Avatar"] ~= nil and self.userdata["PlayerData"]["Avatar2006"] ~= nil then
|
||||
-- return (avatarType == 2006 and self.userdata["PlayerData"]["Avatar2006"]) or self.userdata["PlayerData"]["Avatar"]
|
||||
--end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function DataHandler:getStats()
|
||||
if self.userdata and self.userdata["PlayerData"]["UserData"]["BrickBattleData"] ~= nil then
|
||||
return self.userdata["PlayerData"]["UserData"]["BrickBattleData"]
|
||||
end
|
||||
end
|
||||
|
||||
-- THIS FUNCTION IS HORRIBLY CODED, DO NOT SCREAM AT ME I AM AWARE!!!!
|
||||
--function DataHandler:OldFixData()
|
||||
-- if self.userdata["PlayerData"]["Avatar"]["Face"] == 7601602741 then
|
||||
-- self.userdata["PlayerData"]["Avatar"]["Face"] = 11403137139
|
||||
-- print("Updating outdated face texture")
|
||||
-- end
|
||||
|
||||
-- if self.userdata["PlayerData"]["UserData"]["Settings"]["ErrorsInChat"] == nil then
|
||||
-- self.userdata["PlayerData"]["UserData"]["Settings"]["ErrorsInChat"] = false
|
||||
|
||||
-- print("Adding ErrorsInChat to Settings")
|
||||
-- end
|
||||
|
||||
-- if self.userdata["PlayerData"]["UserData"]["Settings"]["DisplayNames"] == nil then
|
||||
-- self.userdata["PlayerData"]["UserData"]["Settings"]["DisplayNames"] = false
|
||||
|
||||
-- print("Adding DisplayNames to Settings")
|
||||
-- end
|
||||
|
||||
-- if self.userdata["PlayerData"]["UserData"]["Settings"]["CameraLerp"] == nil then
|
||||
-- self.userdata["PlayerData"]["UserData"]["Settings"]["CameraLerp"] = 0.9
|
||||
|
||||
-- print("Adding DisplayNames to Settings")
|
||||
-- end
|
||||
--end
|
||||
|
||||
local function CountTable(Table)
|
||||
local Count = 0
|
||||
|
||||
for i, v in pairs(Table) do
|
||||
if typeof(v) == "table" then
|
||||
Count += CountTable(Table[i])
|
||||
else
|
||||
Count += 1
|
||||
end
|
||||
end
|
||||
|
||||
return Count
|
||||
end
|
||||
|
||||
local function findViaInformation(fullTable: {any}, value): any
|
||||
for ind, information in pairs(fullTable) do
|
||||
if information[1] == value then
|
||||
return ind
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function fixNewData(FixedTable, Table)
|
||||
local FixedTableAmount = CountTable(FixedTable)
|
||||
local TableAmount = CountTable(Table)
|
||||
local Pairing = nil
|
||||
|
||||
if FixedTableAmount > TableAmount then
|
||||
Pairing = FixedTable
|
||||
else
|
||||
Pairing = Table
|
||||
end
|
||||
|
||||
|
||||
for i, v in pairs(Pairing) do
|
||||
if typeof(v) == "table" then
|
||||
if FixedTable[i] ~= nil and Table[i] == nil then
|
||||
print("Adding table: "..i)
|
||||
Table[i] = table.clone(FixedTable[i])
|
||||
elseif FixedTable[i] ~= nil and Table[i] ~= nil then
|
||||
print("Searching through table: "..i)
|
||||
fixNewData(FixedTable[i], Table[i])
|
||||
elseif FixedTable[i] == nil and Table[i] ~= nil then
|
||||
print("Removing table: "..i)
|
||||
Table[i] = nil
|
||||
end
|
||||
else
|
||||
if FixedTable[i] ~= nil and Table[i] == nil then
|
||||
print("Adding "..i.." with a value of: "..tostring(v))
|
||||
Table[i] = v
|
||||
elseif FixedTable[i] == nil and Table[i] ~= nil then
|
||||
print("Removing value: "..i)
|
||||
Table[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
function DataHandler:fixData()
|
||||
|
||||
end
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
function DataHandler:fixData(FixedData)
|
||||
if self.userdata and FixedData then
|
||||
local CurrentDataPlayerData = self.userdata["PlayerData"]
|
||||
local FixingDataPlayerData = FixedData["PlayerData"]
|
||||
|
||||
fixNewData(FixingDataPlayerData, CurrentDataPlayerData)
|
||||
|
||||
local fixedPlayerData = self.userdata["PlayerData"]
|
||||
|
||||
local get2007Avatar = fixedPlayerData["Avatar"]
|
||||
local get2006Avatar = fixedPlayerData["Avatar2006"]
|
||||
|
||||
if get2006Avatar and get2007Avatar then
|
||||
--local faceValid2006 = table.find(GrabbedStuff.Faces, get2006Avatar.Face)
|
||||
--local faceValid2007 = table.find(GrabbedStuff.Faces, get2007Avatar.Face)
|
||||
local faceValid2006 = findViaInformation(GrabbedStuff.Faces, get2006Avatar.Face)
|
||||
local faceValid2007 = findViaInformation(GrabbedStuff.Faces, get2007Avatar.Face)
|
||||
|
||||
if not faceValid2006 then
|
||||
get2006Avatar.Face = 11945029012
|
||||
print("Fixing Face for 2006 Avatar...")
|
||||
end
|
||||
|
||||
if not faceValid2007 then
|
||||
get2007Avatar.Face = 11945029012
|
||||
print("Fixing Face for 2007 Avatar...")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return DataHandler
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
--!strict
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
local TeleportService: TeleportService = game:GetService("TeleportService")
|
||||
|
||||
local DataHandler = require(ReplicatedStorage:WaitForChild("DataHandler", nil))
|
||||
|
||||
local protocols = ReplicatedStorage:WaitForChild("Protocols", nil)
|
||||
local templates = ReplicatedStorage:WaitForChild("Templates", nil)
|
||||
|
||||
local function grabUserData(player: Player)
|
||||
-- put code here
|
||||
return {} -- placeholder
|
||||
end
|
||||
|
||||
local TeleportHandler = {}
|
||||
|
||||
function TeleportHandler.teleportEvent(player: Player, placeId: number, placeName: string, teleportType: string): ()
|
||||
local userData = grabUserData(player)
|
||||
|
||||
if userData then
|
||||
local teleportData = userData["PlayerData"]
|
||||
|
||||
if teleportType == "play" then
|
||||
TeleportService:Teleport(placeId , player, teleportData, templates.Guis.LoadingGui)
|
||||
|
||||
local returnPlace = protocols:FindFirstChild("ReturnPlace", false)
|
||||
|
||||
if returnPlace and returnPlace:IsA("RemoteEvent") then
|
||||
returnPlace:FireClient(player, tostring(placeName))
|
||||
end
|
||||
elseif teleportType == "solo" then
|
||||
local reservedServerAccessCode, privateServerId = TeleportService:ReserveServer(placeId)
|
||||
|
||||
TeleportService:TeleportToPrivateServer(placeId, reservedServerAccessCode, {player}, nil, teleportData)
|
||||
|
||||
local returnPlace = protocols:FindFirstChild("ReturnPlace", false)
|
||||
|
||||
if returnPlace and returnPlace:IsA("RemoteEvent") then
|
||||
returnPlace:FireClient(player, tostring(placeName))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return TeleportHandler
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
local module = {}
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
local module = {}
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
local module = {}
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
local module = {}
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
local post = {
|
||||
["Title"] = "100,000 visits",
|
||||
["Date"] = 1686697690,
|
||||
["HeaderImage"] = "rbxassetid://13728452653",
|
||||
|
||||
["Content"] = [[
|
||||
We have finally done it, 100,000 visits have been achieved on FWM! That is like one followed by five zeros, think about it. This achievement is not new, as we had actually achieved it prior to the original game getting deleted off of ROBLOX. FWM's goal has been to show people what ROBLOX really looked like in 2006 and early 2007. With the help of footage and resources from that era, FWM's goal has been able to be nearly perfected.
|
||||
|
||||
This blog post will talk about some up-and-coming features, along with some statistical things. Note that none of these features have any ETA for release.
|
||||
|
||||
|
||||
Features Coming Soon...
|
||||
|
||||
Controllers - Ever since September 2022, when we re-opened this game, people had noticed one major missing detail about FWM: Controllers. Well fear not, as this summer the development team will be heavily focused on a Controller system for FWM. It will work exactly like how controllers worked in 2006 (and on the March 2007 client). We will (probably) include functionality for "Chase" and "Flee" controllers, though no games in 2006 really utilized those, so that might just be a waste of development resources.
|
||||
|
||||
People - FWM had always been sort of a "yourself" thing when it came to menu functionality, but we have decided to expand past the yourself idea and go with a "Peoples" section. This also means major quality of life and social updates are coming on the way (like bios, friends, etc)! Be on the lookout for that!
|
||||
|
||||
Menu Updates - We have gradually been rolling out new menu designs lately, and that's really for a good reason. When FWM was being developed in its early days, the menu design was very clunky. But as of recently, we have decided to give more improvements towards the menu. One major thing we plan on starting soon is the 2006 site, stay tuned for that!
|
||||
|
||||
Moderators - Yep, moderators. Since FWM has been growing, the developers have decided that sooner or later we would start needing to get moderators together. These moderators will enforce FWM, making sure everybody is following ROBLOX Terms of Service and having a good time.
|
||||
|
||||
|
||||
Statistical Things (as of 6/13/2023):
|
||||
|
||||
The top 3 players with most points of all time are: Sir_Thomas1IsBack (2742 Points), NetteJr (2155 Points), JohnsPuzzleGame (1894 Points)
|
||||
|
||||
The most visited FWM game is: Robloxopolis
|
||||
|
||||
Amount of Players with Bloxxer badge: 20
|
||||
|
||||
|
||||
We want to thank everyone who has stuck around since the start of FWM's journey in August 2020. Whether you have played since Pre-Alpha, or recently joined a few weeks ago, you are all a part of history one way or another.
|
||||
|
||||
- Roblox_Gamer2030
|
||||
|
||||
]]
|
||||
}
|
||||
|
||||
return post
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
local post = {
|
||||
["Title"] = "FWM Guide - BrickBattle",
|
||||
["Date"] = 1683526812,
|
||||
["HeaderImage"] = "rbxassetid://13383290282",
|
||||
|
||||
["Content"] = [[
|
||||
BrickBattling is an amazing core feature of FWM. It is one of the biggest aspects of FWM. Many of you guys on FWM are already experienced with these tools. But this guide is here for all the new players who seem to have a little bit of trouble with BrickBattling. This guide will hopefully answer a few questions a new player might ask about BrickBattling.
|
||||
|
||||
So, why is BrickBattling important?
|
||||
|
||||
It is a heavily contribution to your FWM player stats. Killing a player using the brick battle items will grant you a "Knockout" point, but getting killed or having your own weapon kill you will grant you a "Wipeout" point. These two points apply heavily towards your KDR, or Kill/Death ratio. In fact, your ratio is responsible for achieving the "Combat Initiation", "Warrior", and "Bloxxer" badge. Badges which help increase your status here on FWM. The better, or higher your KDR is, the more dangerous you are. Okay that's a little bit exaggerated, but you kind of get the point. Having a high KDR is a huge deal, and heavily looked up upon.
|
||||
|
||||
What are the basic BrickBattle tools?
|
||||
|
||||
There are many different types of BrickBattle tools used throughout FWM. But I really want to showcase 5 tools that I think are heavily contributions in the BrickBattling scene:
|
||||
|
||||
Rocket - The Rocket Launcher is commonly seen as a Rocket icon on your StarterHopper. It is, in my opinion, the most important item in BrickBattle. By clicking/tapping a point on the screen, it will shoot out a Rocket bullet (commonly seen as a Blue 4x1x1 Brick). The bullet will fly towards the direction your mouse pointed. Once the bullet hits an object, it'll cause an explosion, exploding any bricks in its radius. You can kill other players with the bullet directly or indirectly from its explosion to gain a Knockout. Be careful though, if you aim it way too close, it might explode on you!
|
||||
|
||||
SuperBall - The Superball is commonly seen as a collection of Dodgeballs on your StarterHopper. It is a heavy contributor in BrickBattling. By clicking/tapping a point on the screen, you are able to throw a shiny dodgeball which'll be thrown in the direction of your mouse, usually under a random color. The dodgeball will bounce around damaging players it hits, be careful as it can also damage you! This item is very important for finishing off players who are low on health. The damage a superball does depends on where you hit them from, so head shots are bound to really do a lot! A tip I have is to aim higher as the higher your aim, the further it can get across.
|
||||
|
||||
SlingShot - The Slingshot is commonly seen as a yellow Slingshot icon on your StarterHopper. It may look small, but if used right, it can really deal some damage! There are 2 different variations of the slingshot. The first and commonly used variation is the scripted version. By clicking/tapping a point on the screen, a small (usually a grey 1x1x1 ball) pellet will be thrown at the direction of your cursor. The second version is the HopperBin version, which instead of clicking/tapping a point, you can hold to unleash a load of slingshot pellets at the direction your aiming. The slingshot is a very difficult item to use as the pellets despawn really fast and don't go as far as the superball does. However, each pellet can pack a serious punch if used correctly, and yes it also can deal heavy damage to you.
|
||||
|
||||
Bomb - The Bomb is commonly seen as a black Bomb icon on your StarterHopper. It is a very easy item to use. By clicking your left mouse or tapping your screen, it'll spawn a bomb above your head. Each ticking sound represents time before the bomb explodes. The faster the ticking sound is, the less time the bomb has before it explodes. So make sure to get out of its range before it explodes! Once the bomb does explode, it'll usually release a very big explosion, exploding any bricks and killing any players in its radius. The bomb is both very simple and very destructive to use. So make sure you be careful with how you use them! Bombs can be really good for killing a group of players who just so happen to get in its radius when it explodes. It can also be used to knock down buildings very quickly.
|
||||
|
||||
Trowel - The Trowel is commonly seen as a Wall icon on your StarterHopper. Just like the bomb, it is also pretty simple to use. By clicking/tapping a point on the screen, you are able to spawn a Wall. The wall is a straight to the point item which is very helpful in many situations. It can be used to protect you from rocket launcher or superball shots, or be used to traverse areas with dangerous ground. Be careful, a wall will despawn after a little bit so its best to time your wall placement and make sure it was used in the right situation. It doesn't deal any damage to players at all, but it is a core element that is very helpful.
|
||||
|
||||
How can I BrickBattle?
|
||||
|
||||
It's very simple if you want to get started with BrickBattling. Most of FWM's featured games are BrickBattle games, so that is a good place to start. As well as that, many games on FWM are also BrickBattle places. For example: SharkRock Island, Sunset Plain, Lava Rush, and Roblox Coliseum! These aren't the only BrickBattle games on FWM as there is way more. Most BrickBattle games use a completely different map, which grants as a different environment for BrickBattling.
|
||||
|
||||
Final Note
|
||||
|
||||
I hope this guide was able to at least give you some sort of knowledge on how BrickBattling works. Got any questions? Make sure to say so on the "FWM Official" group wall. Now get out there and score some KOs!
|
||||
|
||||
- Roblox_Gamer2030
|
||||
|
||||
]]
|
||||
}
|
||||
|
||||
return post
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
local post = {
|
||||
["Title"] = "Welcome!",
|
||||
["Date"] = 1682206693,
|
||||
["HeaderImage"] = "rbxassetid://7419508424",
|
||||
|
||||
["Content"] = [[
|
||||
In the beginning there was an empty darkness.. The only thing in this void was a black brick, Two-By-Two. Two-By-Two was the Alpha Brick, the First. Copied, pasted, and recolored a million times, Robloxia was built out of nothing from the images of Two-By-Two. These were the early days…
|
||||
- The Chronicles of Roblox, VI.203
|
||||
|
||||
Welcome one and all to the FWM Developer’s Journal. Like everything in FWM, this journal is an experiment. The idea is that members of the FWM team will post here to share their thoughts about different aspects of the game, give hints, answer questions, and occasionally post some sneak-previews of what is in the works. Nobonet wanted to write the first post to the blog, but unfortunately he is buried under a mountain of RBX.Lua shenanigans and its unyielding logic. We all hope that he recovers soon.
|
||||
|
||||
One thing we at FWM have been thinking hard about is user interaction and input. We really want to host events more frequently and improve the game. Everybody loves it when their favorite game is updated, and at least some kind of contest, right? We want ideas, feedback, and level submissions from the community! Have any of these? Make sure to comment on the FWM Official group wall. User interaction is what makes FWM fun!
|
||||
|
||||
In the meantime, I have pulled out some of my old favorites that new players may not have seen. So if you are looking for something fun to play, check them out.
|
||||
|
||||
Sites to See
|
||||
Train Depot v.3.0 - A train-reliant dystopia from RobloxPolice
|
||||
TeamGameBuildBattle's Place - An action-packed team-based battle royale
|
||||
Fantasy Kingdom - A forest map with boat-building and a magical waterfall by Miked
|
||||
Overflow - A classic FWM flood escape map by the FWM Team
|
||||
santa's village - A fun, holiday-themed map from santaclau5e
|
||||
]]
|
||||
}
|
||||
|
||||
return post
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
local module = {}
|
||||
|
||||
for _, v in pairs(script:GetChildren()) do
|
||||
table.insert(module, require(v))
|
||||
end
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,977 @@
|
|||
--[[
|
||||
Game Types: "ROBLOX Game", "Event Game", "Game" (Case sensitive)
|
||||
|
||||
FORMAT:
|
||||
["GAME NAME"] = {
|
||||
TeleportID = GAME ID,
|
||||
GameIcon = "rbxassetid://GAMEIMAGEID" or nil (if no thumbnail is known/made for the game),
|
||||
Description = "GAME DESCRIPTION",
|
||||
Creator = "GAME CREATOR NAME",
|
||||
Type = "GAME TYPE (refer to the list above FORMAT)",
|
||||
Period = "TIME PERIOD" ex. (March 2007, November 2006, etc.)
|
||||
},
|
||||
|
||||
|
||||
]]--
|
||||
|
||||
return{
|
||||
["Brick Battle: Crossroads"] = {
|
||||
TeleportID = 10797053041,
|
||||
GameIcon = "rbxassetid://13725032206", --rbxassetid://11637360237
|
||||
Description = "Battle your way through the secret hideout, storm the castle, invade the underground ruins, and capture the lookout tower. But be wary: there's always a showdown at The Crossroads.",
|
||||
Creator = "ROBLOX",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Brick Battle: Chaos Canyon"] = {
|
||||
TeleportID = 10797053416,
|
||||
GameIcon = "rbxassetid://11637360391",
|
||||
Description = "Experience Chaos Canyon - Escape from Desolation Valley, explore the ruins on the cliffs, walk on the Sky Bridge and hold the Battle Cube from invaders! This map features models created by the community, including: PilotLuke, tingc222, and Yahoo.",
|
||||
Creator = "ROBLOX",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["Community Construction Site"] = {
|
||||
TeleportID = 10797053600,
|
||||
GameIcon = "rbxassetid://11637359306",
|
||||
Description = "Prefer to create rather than destroy, or just want to experiment? Try the Community Construction Site where you and your friends can build together.",
|
||||
Creator = "ROBLOX",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["Santa's Winter Stronghold"] = {
|
||||
TeleportID = 11301126695,
|
||||
GameIcon = "rbxassetid://13473158129",
|
||||
Description = "Deep in the arctic wastes lies Santa's Workshop, where his elves work to make toys for children 364 days a year. Well, the elves have had enough! They are revolting! Play as an elf and collect as many presents as you can find. Play as Santa and use your special powers to hunt down those elves and teach them a lesson before they ruin Christmas for everyone! Who will prevail?",
|
||||
Creator = "ROBLOX",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["Brick Battle: Glass Houses"] = {
|
||||
TeleportID = 12780541449,
|
||||
GameIcon = "rbxassetid://12787180180",
|
||||
Description = "Take sides in the epic struggle of Red vs. Blue in this futuristic map. Man the gun emplacements and rain fiery destruction on your enemies below. Find the Battle Armor to protect yourself and then escape from invaders using the anti-grav elevator tube. Finally, summon the dread mechanized Spheres of Doom to pelt the opposing team with rockets from above. Those who live in glass houses should hit the deck!",
|
||||
Creator = "ROBLOX",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "February 2007",
|
||||
},
|
||||
|
||||
["Brick Battle: Rocket Arena"] = {
|
||||
TeleportID = 12178799427,
|
||||
GameIcon = "rbxassetid://7347176266",
|
||||
Description = "This map goes back to basics: rockets, jetboots, and blowing up bridges. Out-maneuver your foes using your jetboots, cut off their escape by nuking the bridges, and rain doom down upon them using a rapid-fire rocket launcher. But don't fall in the lava - ouch!",
|
||||
Creator = "RocketArena",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Brick Battle: Haunted Mansion"] = {
|
||||
TeleportID = 12110909938,
|
||||
GameIcon = "rbxassetid://7353931449",
|
||||
Description = "There is an abandoned house on a cliff that some say is haunted. And it is. You should know, because the ghost who haunts this house ... is you! During stormy weather, passersby often think to stop at the house for shelter. Use your eerie powers to frighten them and run them out of your home!",
|
||||
Creator = "arena2",
|
||||
Type = "ROBLOX Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["Advanced Building"] = {
|
||||
TeleportID = 10797053779,
|
||||
GameIcon = "rbxassetid://11637359697",
|
||||
Description = "Want to build with more tools? Check out the Advanced Building area today! Features anti grief, property changing, and more colors to choose from.",
|
||||
Creator = "ROBLOX",
|
||||
Type = "Game",
|
||||
Period = "April 2007",
|
||||
},
|
||||
|
||||
["Z-BLOX"] = {
|
||||
TeleportID = 11301118664,
|
||||
GameIcon = "rbxassetid://11637359036",
|
||||
Description = "Face off against endless waves of the undead. At the end of every wave, boxes containing ammo clips will be air-dropped. The last survivor of each round wins and is awarded points. How many waves can you survive?",
|
||||
Creator = "fwmcontests2",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["SharkRock Island"] = {
|
||||
TeleportID = 11542218240,
|
||||
GameIcon = "rbxassetid://11637359878",
|
||||
Description = "SharkRock Island. Hey this is my place i have made other places, i am actually koopa and his accounts so yes this would be a Schwaabo production! Hope you have fun looking around and battling here. Remember to check out my other places.",
|
||||
Creator = "goomba",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["RobloxPolices Vehicle Labs"] = {
|
||||
TeleportID = 11301129119,
|
||||
GameIcon = "rbxassetid://11637360035",
|
||||
Description = "This is RobloxPolice here, and this is where I'll be building some cool new vehicles to drive! So far featured is a truck, airplane (and one large detailed one) and a helicopter. Soon to be built, rocket ship, UFO, submarine, etc. THIS IS A PRIVATE ZONE AND KNOW COPIERS WILL NOT BE ADMITED IN! ANY ONE WHO USES THIS MAP OR IT'S MODELS WILL BE BANNED FROM ALL POLICE MAPS (ALL!)",
|
||||
Creator = "PoliceLabs",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["LukeJacobuilder 's Place"] = {
|
||||
TeleportID = 11560456038,
|
||||
GameIcon = "rbxassetid://11637359471",
|
||||
Description = "",
|
||||
Creator = "LukeJacobuilder",
|
||||
Type = "Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["The Big Slide's Place"] = {
|
||||
TeleportID = 11637171049, --
|
||||
GameIcon = nil,
|
||||
Description = "BIG SLIDES!!!!!!",
|
||||
Creator = "The Big Slide",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["santa's village"] = {
|
||||
TeleportID = 11561129788,
|
||||
GameIcon = "rbxassetid://7463135939",
|
||||
Description = "come visit my village and ride a sleigh thru the snow or iceskate.",
|
||||
Creator = "santaclau5e",
|
||||
Type = "Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["Robloxopolis"] = {
|
||||
TeleportID = 11876778708,
|
||||
GameIcon = "rbxassetid://7330384761",
|
||||
Description = "The public city-building project. Read more at...",
|
||||
Creator = "Robloxopolis",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007",
|
||||
},
|
||||
|
||||
["TeamGameBuildBattle's Place"] = {
|
||||
TeleportID = 11914340287,
|
||||
GameIcon = "rbxassetid://7360262299",
|
||||
Description = "BRICK BUILD AND BATTLE: A You are put on a random team and on 2 minutes the gates to the building area will open! When they do they will stay open for 1 minute and then close. Then if you got in the arena you build a fort and after 10 min's you battle others! (you only have 1 life) If you die you just have to watch the game...",
|
||||
Creator = "TeamGameBuildBattle",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Nuke the Whales EXTREME!!!"] = {
|
||||
TeleportID = 11914693526,
|
||||
GameIcon = "rbxassetid://8028365699",
|
||||
Description = "If he had the chance, he would nuke you.",
|
||||
Creator = "NukeTheWhales",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Katalyst's Place"] = {
|
||||
TeleportID = 11922918912,
|
||||
GameIcon = "rbxassetid://7081948716",
|
||||
Description = "Yea... that's a giant kitty, no? Or how about that gigantic pyramid?",
|
||||
Creator = "Katalyst",
|
||||
Type = "Game",
|
||||
Period = "August 2006",
|
||||
},
|
||||
|
||||
["Stairway to Heaven"] = {
|
||||
TeleportID = 11917400393,
|
||||
GameIcon = "rbxassetid://7091140671",
|
||||
Description = "Condo building top unit floorplan revised. Larger floor space now available. Will add more later.",
|
||||
Creator = "tingc222",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["★ Minigame World"] = {
|
||||
TeleportID = 11957266580,
|
||||
GameIcon = "rbxassetid://11979784398",
|
||||
Description = "------- [Minigame World] ------- [4] minigames. [?] more started... {Last Updates}-> Added the Giant and Zombie minigames. Working on bug fixes.",
|
||||
Creator = "miked",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007",
|
||||
},
|
||||
|
||||
["FANTASY KINGDOM"] = {
|
||||
TeleportID = 11957280861,
|
||||
GameIcon = "rbxassetid://7681415797",
|
||||
Description = "This map was made public 26th November, and still gets updates. It was the first i know of that used brick velocity. Many people have copied it, which I dont mind so much now, as long as you dont claim you made it. A lot of the models used I have made public, so look out for them.",
|
||||
Creator = "miked",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["L&L APT"] = {
|
||||
TeleportID = 12087424578,
|
||||
GameIcon = "rbxassetid://7355558376",
|
||||
Description = "",
|
||||
Creator = "Leeav",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Mustafar"] = {
|
||||
TeleportID = 12087787363,
|
||||
GameIcon = "rbxassetid://7330524040",
|
||||
Description = "Mustafar, a small, but dangerous, moon. A moon that's totally volcanic, This moon contains absolutely no water, but 99% molten hot rock. This moon is also the fateful location of a battle between a Jedi and a new Sith lord. Explore all you want, but beware of the lava stream and pools.",
|
||||
Creator = "Indiana Jones",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["ROBLOX World Headquarters"] = {
|
||||
TeleportID = 12088094879,
|
||||
GameIcon = "rbxassetid://7346811121",
|
||||
Description = 'Welcome to ROBLOX World Headquarters. We have intentionally hidden a few of the components necessary to implement the "fly bug". Come and visit the ROBLOX team! Builderman',
|
||||
Creator = "Builderman",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Lawrence Yamut's Place"] = {
|
||||
TeleportID = 12102911836,
|
||||
GameIcon = "rbxassetid://7692197753",
|
||||
Description = "",
|
||||
Creator = "Lawrence Yamut",
|
||||
Type = "Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["PFCity"] = {
|
||||
TeleportID = 12110553230,
|
||||
GameIcon = "rbxassetid://7463135826",
|
||||
Description = "A city with a population of many PFains... If you'd like to move in please send me a freind's request! Today's wether: Rainy with no lighting",
|
||||
Creator = "PFCity",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Phenix Fire Testing Zone"] = {
|
||||
TeleportID = 12118559005,
|
||||
GameIcon = "rbxassetid://7712992882",
|
||||
Description = "come to my battle ground! Hears my funny little saying: The demon that lies within shal consume yo ####! >:)",
|
||||
Creator = "ryanfire94",
|
||||
Type = "Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["Grey City"] = {
|
||||
TeleportID = 12155429467,
|
||||
GameIcon = "rbxassetid://5429412019",
|
||||
Description = "Run through this beautiful city planting time bombs! I would be curious to know how well this level runs on your machine. Leave me a message in the forums that says what kind of computer you have and how well it ran this level. Is a bigger city possible?",
|
||||
Creator = "EarlGrey",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["Forest of Desolation"] = {
|
||||
TeleportID = 13232543257,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13232661194",
|
||||
Description = "Anyone want to help me make a forest-themed Brick Battle level? My idea is to have a dark forest peppered with interesting buildings and ruins.",
|
||||
Creator = "Abyss",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["Christmas .vs. holloween!"] = {
|
||||
TeleportID = 12159308694,
|
||||
GameIcon = "rbxassetid://7506033577",
|
||||
Description = "the battle of Christmas .vs. holloween!!!",
|
||||
Creator = "SniperofDoom",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Sunset Plain"] = {
|
||||
TeleportID = 12167804773,
|
||||
GameIcon = "rbxassetid://7330548765",
|
||||
Description = "Have fun at Sunset Plain! unfortunatly i could not get the regenerate scripts to work in this map so nothing regenerates obviosly. You might have already seen some of this map from the adventure awaits movie on the homepage of roblox. So have fun here! P.S check out the waterfall!",
|
||||
Creator = "Schwaabo",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Volcanic Island"] = {
|
||||
TeleportID = 12172248326,
|
||||
GameIcon = "rbxassetid://7790873728",
|
||||
Description = "Welcome to the tropical Volcanic Island. It's not very big, because I didn't work too much on it. But I hope you enjoy it.",
|
||||
Creator = "Pheonix",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["MegaBuilder's Place"] = {
|
||||
TeleportID = 12178265112,
|
||||
GameIcon = "rbxassetid://7463135944",
|
||||
Description = "A work in progress",
|
||||
Creator = "MegaBuilder",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Bowling Ally"] = {
|
||||
TeleportID = 12312517015,
|
||||
GameIcon = "rbxassetid://8028365678",
|
||||
Description = "RobloxPolice, I'm working on a Bowling Ally here.",
|
||||
Creator = "PoliceLabs2",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Yan's Place"] = {
|
||||
TeleportID = 12181177828,
|
||||
GameIcon = "rbxassetid://7467421507",
|
||||
Description = "UNDER CONSTRUCTION FOR AN UNDERTERMINED PERIOD",
|
||||
Creator = "Yannik11",
|
||||
Type = "Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["Escape"] = {
|
||||
TeleportID = 12324137955,
|
||||
GameIcon = "rbxassetid://12324964166",
|
||||
Description = "Escape the building to win! Features the creepy styles of Jack and RobloxPolice!",
|
||||
Creator = "JackRackam",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Lava Rush"] = {
|
||||
TeleportID = 12333733213,
|
||||
GameIcon = nil,
|
||||
Description = "This is a very cool game.",
|
||||
Creator = "test888",
|
||||
Type = "Game",
|
||||
Period = "November 2006", -- change lighting in rbxl
|
||||
},
|
||||
|
||||
["Phionx Fire Hangers"] = {
|
||||
TeleportID = 12343615080,
|
||||
GameIcon = "rbxassetid://12382071600",
|
||||
Description = "",
|
||||
Creator = "Jacobxxduel",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["trem's City (unfinished)"] = {
|
||||
TeleportID = 12382877608,
|
||||
GameIcon = "rbxassetid://12382898576",
|
||||
Description = "",
|
||||
Creator = "Trem",
|
||||
Type = "Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["DracoTrainingMaster's Place"] = {
|
||||
TeleportID = 12384983232,
|
||||
GameIcon = "rbxassetid://7505574358",
|
||||
Description = "",
|
||||
Creator = "DracoTrainingMaster",
|
||||
Type = "Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["Roblox Coliseum"] = {
|
||||
TeleportID = 12396285203,
|
||||
GameIcon = "rbxassetid://13391311737",
|
||||
Description = "Have you ever seen the movie Gladiator? This map is a work in progress... will make public when completed and debugged. Don't copy the scripts, they won't work in the next release :-/",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Trouble in the Killbot Factory Level 2"] = {
|
||||
TeleportID = 12396864362,
|
||||
GameIcon = "rbxassetid://13727533132",
|
||||
Description = "As an experiment, I have created some simple bots for Roblox. They are hovering spheres that will kind of chase you around and shoot rockets at you. Probably pretty good training for BrickBattles.",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Angel of Truth"] = {
|
||||
TeleportID = 12405951700,
|
||||
GameIcon = "rbxassetid://7415452933",
|
||||
Description = "I saw the angel in the plastic and I kept working until she was free. Open my place if you want to find out how good your computer is. lol.",
|
||||
Creator = "DigitalMessiah",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["TrainCrasher's Place"] = {
|
||||
TeleportID = 12467186972,
|
||||
GameIcon = "rbxassetid://7508260132",
|
||||
Description = "",
|
||||
Creator = "TrainCrasher",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["SwordFights's Place"] = {
|
||||
TeleportID = 12472967362,
|
||||
GameIcon = "rbxassetid://12472975958",
|
||||
Description = "The ultmate sword fighting map!! (Real working light-sabrs comeing this month!)",
|
||||
Creator = "SwordFights",
|
||||
Type = "Game",
|
||||
Period = "February 2007",
|
||||
},
|
||||
|
||||
["Pirate-ville"] = {
|
||||
TeleportID = 12481916621,
|
||||
GameIcon = "rbxassetid://13391309943",
|
||||
Description = "The city of Pirate's! Come all! Property is available to Pirate Army members. Just send me the model and I'll put it in. PF Army has an embacy located across the twin-pirate towers. Land plots come in different sizes: small = 32x32, medium 48x48, large 64x64, XL 96x96",
|
||||
Creator = "JackRackam",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Castle Destruction"] = {
|
||||
TeleportID = 12560666914,
|
||||
GameIcon = "rbxassetid://12560594679",
|
||||
Description = "There's a bouncing ball that gobbles up bricks. After a while the castle comes crashing down.",
|
||||
Creator = "Crazy Eddie",
|
||||
Type = "Game",
|
||||
Period = "August 2006",
|
||||
},
|
||||
|
||||
["room_environment"] = {
|
||||
TeleportID = 12590827747,
|
||||
GameIcon = "rbxassetid://12590877149",
|
||||
Description = "Play around with the furniture!",
|
||||
Creator = "David.Baszucki",
|
||||
Type = "Game",
|
||||
Period = "August 2006",
|
||||
},
|
||||
|
||||
["Happy Home in ROBLOXia"] = {
|
||||
TeleportID = 12590516933,
|
||||
GameIcon = "rbxassetid://12590893956",
|
||||
Description = "A nice peaceful starting place with a house and some bricks to build with.",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Pirate Ship"] = {
|
||||
TeleportID = 12600432050,
|
||||
GameIcon = "rbxassetid://12600566352",
|
||||
Description = "",
|
||||
Creator = "Brickmason",
|
||||
Type = "Game",
|
||||
Period = "September 2006",
|
||||
},
|
||||
|
||||
["The Doom Spire"] = {
|
||||
TeleportID = 12614607156,
|
||||
GameIcon = "rbxassetid://12614734944",
|
||||
Description = "From the top of the tower, Teferi watched over the once green land. His minions had carved a path through the trees that had once covered Keld, a sinuous scar that spidered out from his shimering Doom Spire. 'Soon...' He thought to himself, fingering the bright panels on the console in front of him.",
|
||||
Creator = "leeor_net",
|
||||
Type = "Game",
|
||||
Period = "December 2006",
|
||||
},
|
||||
|
||||
["Rocketjeep Rally!"] = {
|
||||
TeleportID = 12686988267,
|
||||
GameIcon = "rbxassetid://12687014097",
|
||||
Description = "Just a little project of mine. Press the green cube to regen the level. I'm sure you can think of 100 cool things to add to this map - copy it and give it a whirl!",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007",
|
||||
},
|
||||
|
||||
["Brick Battle: Classic Crossroads"] = {
|
||||
TeleportID = 12758551659,
|
||||
GameIcon = "rbxassetid://7704541260",
|
||||
Description = "Brick battle old skool!",
|
||||
Creator = "Bspurrell",
|
||||
Type = "Game",
|
||||
Period = "November 2006",
|
||||
},
|
||||
|
||||
["Thunderbirds and the Red raiders!"] = {
|
||||
TeleportID = 12779277535,
|
||||
GameIcon = nil,
|
||||
Description = "A B C D E F G Gummy bears are mean to me 1 is red 1 is dead 1 its biting off my head A B C D E F G it ate me and now i have to PEE",
|
||||
Creator = "freddy",
|
||||
Type = "Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["Demons Lair"] = {
|
||||
TeleportID = 12779884863,
|
||||
GameIcon = "rbxassetid://13391310605",
|
||||
Description = "100% Done",
|
||||
Creator = "DemonBrother",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Area 51"] = {
|
||||
TeleportID = 12828122182,
|
||||
GameIcon = "rbxassetid://13650921905",
|
||||
Description = "",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "April 2007",
|
||||
},
|
||||
|
||||
["BridgeCrossingDemo"] = {
|
||||
TeleportID = 12828865592,
|
||||
GameIcon = nil,
|
||||
Description = "Bridge crossing, Ultamte bridge map! Map rules: Do not use foul, or abuseive words- Do not disobay admin (me, and koopa LISTEN TO HIM!!) rules- I build, my rules, my things, I do what I want- Don't beg for any thing to add to the map, or a reset, Just ask---- > BREAK ANY OF THESE RULES AND I WILL KICK or BAND YOU FROM THE MAP <",
|
||||
Creator = "Jacobxxduel",
|
||||
Type = "Game",
|
||||
Period = "April 2007",
|
||||
},
|
||||
|
||||
["Overflow"] = {
|
||||
TeleportID = 12118678013,
|
||||
GameIcon = nil,
|
||||
Description = "Fixed the game (OOPS!) Who clogged the toilet? Be the first to collect the coin before everyone else does, use the tools you have to defeat other potential winners. Current map count: 8",
|
||||
Creator = "FWM",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
["Grenades and Oranges"] = {
|
||||
TeleportID = 12972506084,
|
||||
GameIcon = "rbxassetid://12972793193",
|
||||
Description = "Grenades and Oranges!!!! Here it is people! It is a load of fruity fun with big explosions! Choose your team and pick up your Telanade (sticky grenade) and other grendae weapons and go on a rampage! Hope you all enjoy, please message me if there are any problems or any ideas. Have fun!",
|
||||
Creator = "Koopa",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["The Deadly Ice Sheet of Frostmoor"] = {
|
||||
TeleportID = 12983413992,
|
||||
GameIcon = "rbxassetid://13391314997",
|
||||
Description = "Do battle on this frozen sheet of ice, but watch out for the Deadly Ice Spikes of Doom!",
|
||||
Creator = "SonOfSevenless",
|
||||
Type = "Game",
|
||||
Period = "L. March 2007"
|
||||
},
|
||||
|
||||
["Mausoleum at Halicarnassus [WWC]"] = {
|
||||
TeleportID = 13037426388,
|
||||
GameIcon = nil,
|
||||
Description = "i would not recommend to join this place if your computer is bad.",
|
||||
Creator = "FWM",
|
||||
Type = "Game",
|
||||
Period = "L. March 2007"
|
||||
},
|
||||
|
||||
["Powerhouse Paintball(70%)"] = {
|
||||
TeleportID = 13073256753,
|
||||
GameIcon = "rbxassetid://13086510944",
|
||||
Description = 'Hio! I had a big change of well... ideas lets say. So here is the new Powerhouse Paintball. The name will be changing sometime... lol have fun! At the moment i am busy adding typing commands here. If you dont like the time of day, simply type any of these to change it to that time of day "day", "night", "morning", "evening". If you have any ideas message me!',
|
||||
Creator = "Koopa",
|
||||
Type = "Game",
|
||||
Period = "April 2007" -- add daylight cycle chat cmds to this rbxl
|
||||
},
|
||||
|
||||
["DoomSpire Wars"] = {
|
||||
TeleportID = 13120333001,
|
||||
GameIcon = nil,
|
||||
Description = "A fun team battle game. Destroy the other teams' towers before they destroy yours to win!",
|
||||
Creator = "JohnsPuzzleGame",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["Train Depot v3.0"] = {
|
||||
TeleportID = 12463040186,
|
||||
GameIcon = "rbxassetid://13391313254",
|
||||
Description = "",
|
||||
Creator = "RobloxPolice",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
["Wizard Wars"] = {
|
||||
TeleportID = 12981564265,
|
||||
GameIcon = "rbxassetid://13693934987",
|
||||
Description = "",
|
||||
Creator = "SonOfSevenless",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["Traveler's Tale"] = {
|
||||
TeleportID = 13176588674,
|
||||
GameIcon = nil,
|
||||
Description = "Have fun at Traveler's Tale, the weapons made by me hope you like em. Script for the vine cart donated by Robloxpolice. Lots of huge trees here, boats, secrets, and other stuff. Enjoy and have fun!",
|
||||
Creator = "Bowser",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["Super Wfmp Bros World 1"] = {
|
||||
TeleportID = 13187932647,
|
||||
GameIcon = "rbxassetid://13692051579",
|
||||
Description = "!No copyright fringe intended! Super Wfmp bros.beat the levels.Wfmp:Its a me a Wfmp! Woo hoo!World 1 is now complete,come in and watch out for bowser fire and the koopa kids,go and save Toad now!lol.there is now 2 up to 4 players to do a level,race and the first 1 who touch the flag wins.if u want a figure of urself here,tell me in the fourms of the off topic.lets a go*cya*.",
|
||||
Creator = "wfmp",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["maze of DOOM!!!!!!!!!!!!!!"] = {
|
||||
TeleportID = 12381844004,
|
||||
GameIcon = "rbxassetid://13217304805",
|
||||
Description = "its back!!!!!!!!!!!",
|
||||
Creator = "kit403 2",
|
||||
Type = "Game",
|
||||
Period = "October 2006"
|
||||
},
|
||||
|
||||
["PilotLuke's Cloud City"] = {
|
||||
TeleportID = 12343628825,
|
||||
GameIcon = "rbxassetid://13222165009",
|
||||
Description = "This is my virtual Roblox world. In the sky.",
|
||||
Creator = "PilotLuke",
|
||||
Type = "Game",
|
||||
Period = "October 2006"
|
||||
},
|
||||
|
||||
["CTF Demo Version: Navial Battle!"] = {
|
||||
TeleportID = 12343640424,
|
||||
GameIcon = "rbxassetid://13231578137",
|
||||
Description = "Race to the ships! All hands on deck! Theres a CTF Battle a-brewin! Defend the base and capture the enemy flag! Or just explore the island! Just make sure you don't fall off da boats! Youll drown! (we think it's cuz of our none bendable, brick arms...)",
|
||||
Creator = "PoliceLabs5real",
|
||||
Type = "Game",
|
||||
Period = "January 2007"
|
||||
},
|
||||
|
||||
["SilentAssassin's Place"] = {
|
||||
TeleportID = 12155381562,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13233027368",
|
||||
Description = "",
|
||||
Creator = "SilentAssassin",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
["Roblox Museum©®™"] = {
|
||||
TeleportID = 13245230718,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13254094151",
|
||||
Description = "here are the Roblox Museum©®™ were all of the best model will be and all of the most famus player and contest winner.The museum is not complet yet!!!!Please dont copy the idea!!!",
|
||||
Creator = "robloxmuseum",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["▒▓█ Team Battle: Behind Enemy Lines █▓▒"] = {
|
||||
TeleportID = 13292389793,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13292629113",
|
||||
Description = "Destroy the opposite team! Use your cannons to blast away the wall seperating you from your foes. Hide in the caves, but beware you will find that you only have one way out. Go into the towers and rain fire among the people below. Try to survive and have fun.",
|
||||
Creator = "Leeav",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["City Wall"] = {
|
||||
TeleportID = 12851101854,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13293095354",
|
||||
Description = "Welcome to the Great City! Take hold and defend the city from the enemy! Slay your foes with your mighty sword and rain arrows upon them! (Arrows coming soon) UPDATE--Now you can climb the wall to get in, but first you'll have to find the area, and it'll require climbing skill! UPDATE--Now the doors open and close on their own, so you don't have to! Now you can just push the button and watch! No hastle! (Still needs some fixing)",
|
||||
Creator = "Anaminus",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["Sword Fights on the Heights!"] = {
|
||||
TeleportID = 13293878655,
|
||||
GameIcon = "http://www.roblox.com/asset/?id=13293948299",
|
||||
Description = "The first sword fight level evar.",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["Eliet-Sniper Clan's Base And Sniping pit!"] = {
|
||||
TeleportID = 13305738206,
|
||||
GameIcon = "rbxassetid://13306323328",
|
||||
Description = "See if YOU can beat the eliet snipers! :-P",
|
||||
Creator = "TringForAllTheBadges",
|
||||
Type = "Game",
|
||||
Period = "January 2007"
|
||||
},
|
||||
|
||||
|
||||
["Experimental jet pack"] = {
|
||||
TeleportID = 13306736065,
|
||||
GameIcon = "rbxassetid://13306815999",
|
||||
Description = "This is a work in progress",
|
||||
Creator = "erik.cassel",
|
||||
Type = "Game",
|
||||
Period = "September 2006"
|
||||
},
|
||||
|
||||
["Air Base Sector 128A"] = {
|
||||
TeleportID = 13308114418,
|
||||
GameIcon = "rbxassetid://13308485288",
|
||||
Description = 'The rebel alliance rushed to finish the construction of the new air base. A large swarm flashed across the radar screen. "The Emporer has sent a fleet," the Cammander said, "We shall be ready for them." "The Main laser beam is in place, Sir," said the construction supervisor. "Good," smiled the Cammander. "Airplane parts shipped" "Side tower 1 in place" "Get to work ont he soldiers quaters," boomed the Cammander. "But don`t you think the design is too luxurious" "NO, GET TO WORK"',
|
||||
Creator = "tie it up",
|
||||
Type = "Game",
|
||||
Period = "November 2006"
|
||||
},
|
||||
|
||||
["ROBLOX Hat Demo"] = {
|
||||
TeleportID = 13308769036,
|
||||
GameIcon = "rbxassetid://13727428778",
|
||||
Description = "ROBLOX hat testing began in the last week of April 2007",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["Death Valley"] = {
|
||||
TeleportID = 13380394269,
|
||||
GameIcon = "rbxassetid://13380572949",
|
||||
Description = "Fight in the valleys! They hide secrets.",
|
||||
Creator = "Rombom",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["Skyscraper"] = {
|
||||
TeleportID = 13381689455,
|
||||
GameIcon = "rbxassetid://13381730226",
|
||||
Description = "",
|
||||
Creator = "Matt Dusek",
|
||||
Type = "Game",
|
||||
Period = "September 2006"
|
||||
},
|
||||
|
||||
["Racetrack +Jetpacks+plane?"] = {
|
||||
TeleportID = 13398522682,
|
||||
GameIcon = "rbxassetid://13398649872",
|
||||
Description = "*incomplete*, ladder big thx to are14 for car models and drive script, also thx to chrisd for plane",
|
||||
Creator = "Smooshface",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["A Pirates Life"] = {
|
||||
TeleportID = 13399172156,
|
||||
GameIcon = nil,
|
||||
Description = "Yarghhhh, join forces wit yer heartys and go send da other team ta davey jones's locker matey! Har is some stuff ye should know about ma place mateys. 1. To start yer boat press ta blue button, ten proceed to press the green. 2. Ta turn, i am using reverse controls so it be more like a real wheel. So if ye click and hold on ta yellow button on the left, it will make ye turn hard to tha right, and same fer da opposite. 3. Ta stop yer boat press and hold da red. 4. To start yer boat for tha second time just press ta green, not the green then ta blue. Tata about most o the stuff ye need ta know. If ye want to go into ta tower, well then just walk into the larg room, with the big underwater window in it. Ta yer left and right are grey pads, use tem to to go into ta towers. Ye want ta join a team, well then in ta main lobby room, just go left or right to ta red or black pads. Try going underneath tha rocks on both sides of yer dock and see where they lead.",
|
||||
Creator = "CaptinSilver",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007"
|
||||
},
|
||||
|
||||
["Areplanes"] = {
|
||||
TeleportID = 13406955536,
|
||||
GameIcon = nil,
|
||||
Description = "",
|
||||
Creator = "are72",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["driversED's Place"] = {
|
||||
TeleportID = 13407824043,
|
||||
GameIcon = "rbxassetid://13407920593",
|
||||
Description = "",
|
||||
Creator = "driversED",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["Pirate Army HQ"] = {
|
||||
TeleportID = 13436777321,
|
||||
GameIcon = "rbxassetid://13436839359",
|
||||
Description = "Welcome to the Pirate Army Headquarters. This map was made entirely by jackrackam with NO outside models (none!). The castle is unfurnished. Watch out for land mines, and try to find the healing pads.",
|
||||
Creator = "Pirate Army",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
["Bumbper Cars!!!!!!!!!!!!!!!!!!!!"] = {
|
||||
TeleportID = 13436470382,
|
||||
GameIcon = nil,
|
||||
Description = "This will be awsome!",
|
||||
Creator = "PoliceLabs4",
|
||||
Type = "Game",
|
||||
Period = "January 2007"
|
||||
},
|
||||
|
||||
["Rocks25's huge slide!"] = {
|
||||
TeleportID = 13455742036,
|
||||
GameIcon = "rbxassetid://13727323985",
|
||||
Description = "this slide is gigantic its hard to stay on though!",
|
||||
Creator = "Rocks25",
|
||||
Type = "Game",
|
||||
Period = "November 2006"
|
||||
},
|
||||
|
||||
|
||||
["Ball Roll"] = {
|
||||
TeleportID = 13482112951,
|
||||
GameIcon = nil,
|
||||
Description = "It's back, and its better than ever! Survive the incoming balls and climb the mountain!",
|
||||
Creator = "FWM",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
|
||||
["Frontline II: Urban Warfare"] = {
|
||||
TeleportID = 13540920198,
|
||||
GameIcon = nil,
|
||||
Description = "You are a soldier of a once-powerful robloxian empire. Your superiors have stationed you at a base in the West Robloxia region. You and your comrades must retake the region quickly before the battle falls into a stalemate, or worse, the region is lost!",
|
||||
Creator = "FWM",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007"
|
||||
},
|
||||
|
||||
["DROME RACERS"] = {
|
||||
TeleportID = 13540640835,
|
||||
GameIcon = "rbxassetid://13725216889",
|
||||
Description = "Sory this place is under construktion but it gone be the drome race arena. Than it is complet will it be public for evereone . P:S: dont copy",
|
||||
Creator = "ARE92",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["DoomSpire and Towers"] = {
|
||||
TeleportID = 13578750494,
|
||||
GameIcon = "rbxassetid://13727230133",
|
||||
Description = 'Possibly the Halloween version of "The Doom Spire"?',
|
||||
Creator = "leeor_net",
|
||||
Type = "Game",
|
||||
Period = "November 2006"
|
||||
},
|
||||
|
||||
["The Divide"] = {
|
||||
TeleportID = 13583080985,
|
||||
GameIcon = nil,
|
||||
Description = "A long time ago... There was a battle between the Dark and Light. Now you must pick sides and fight, for better...or worse.",
|
||||
Creator = "Trampoline",
|
||||
Type = "Game",
|
||||
Period = "November 2006"
|
||||
},
|
||||
|
||||
|
||||
["Sword Fight Testing"] = {
|
||||
TeleportID = 12840714756,
|
||||
GameIcon = "rbxassetid://13692126422",
|
||||
Description = "",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "L. March 2007"
|
||||
},
|
||||
|
||||
["FoxPolicesBlackHole's Place"] = {
|
||||
TeleportID = 13541788234,
|
||||
GameIcon = nil,
|
||||
Description = "",
|
||||
Creator = "FoxPolicesBlackHole",
|
||||
Type = "Game",
|
||||
Period = "February 2007"
|
||||
},
|
||||
|
||||
["the titanic"] = {
|
||||
TeleportID = 13602124817,
|
||||
GameIcon = "rbxassetid://13602204397",
|
||||
Description = "",
|
||||
Creator = "chrisd",
|
||||
Type = "Game",
|
||||
Period = "January 2007"
|
||||
},
|
||||
|
||||
|
||||
["Building Room"] = {
|
||||
TeleportID = 13683087365,
|
||||
GameIcon = "rbxassetid://13684933658",
|
||||
Description = "This is a room with a bunch of bricks to get you started.",
|
||||
Creator = "David.Baszucki",
|
||||
Type = "Game",
|
||||
Period = "August 2006",
|
||||
},
|
||||
|
||||
["Canonical Roblox Weapons - Linked"] = {
|
||||
TeleportID = 13831468318,
|
||||
GameIcon = "rbxassetid://13832392409",
|
||||
Description = "",
|
||||
Creator = "Telamon",
|
||||
Type = "Game",
|
||||
Period = "April 2007",
|
||||
},
|
||||
|
||||
["City Under Fire Ltd. Server Network"] = {
|
||||
TeleportID = 13832790391,
|
||||
GameIcon = nil,
|
||||
Description = "This Server Network/Corporate Office stores the data for the Monster Web Hosting network.",
|
||||
Creator = "City Under Fire",
|
||||
Type = "Game",
|
||||
Period = "January 2007",
|
||||
},
|
||||
|
||||
["Spring and Fall"] = {
|
||||
TeleportID = 13833432103,
|
||||
GameIcon = nil,
|
||||
Description = "I steal other people's models without remorse. They are mine now ;-)",
|
||||
Creator = "WorldsOfWanwood",
|
||||
Type = "Game",
|
||||
Period = "October 2006",
|
||||
},
|
||||
|
||||
["Blox Battle Arena"] = {
|
||||
TeleportID = 13884578100,
|
||||
GameIcon = nil,
|
||||
Description = "",
|
||||
Creator = "FWM",
|
||||
Type = "Game",
|
||||
Period = "April 2007",
|
||||
},
|
||||
|
||||
["my flipsydoodah placeV2.5"] = {
|
||||
TeleportID = 13938939357,
|
||||
GameIcon = nil,
|
||||
Description = "now whith more fliping action! still in beta testing.",
|
||||
Creator = "stang90",
|
||||
Type = "Game",
|
||||
Period = "E. March 2007"
|
||||
},
|
||||
|
||||
["HoverTank Arena Version 2.0"] = {
|
||||
TeleportID = 13948489988,
|
||||
GameIcon = "rbxassetid://13948645320",
|
||||
Description = "Welcome to the HoverTank Arena! I have made a whole new version of the map! Tired of just driving the Tanks all the time? Then duke it out on the platforms above the arena, or sneak along through the labyrinth! Or just sit back and enjoy the new and improved spectator's area, where you can watch the battle from any angle! I have also added the Wall weapon. Enjoy!",
|
||||
Creator = "ThunderStealth",
|
||||
Type = "Game",
|
||||
Period = "April 2007"
|
||||
},
|
||||
|
||||
["brutus's town"] = {
|
||||
TeleportID = 13956603289,
|
||||
GameIcon = "rbxassetid://13956801977",
|
||||
Description = "",
|
||||
Creator = "brutus",
|
||||
Type = "Game",
|
||||
Period = "December 2006"
|
||||
},
|
||||
|
||||
["PONG (2 Players)"] = {
|
||||
TeleportID = 13968260883,
|
||||
GameIcon = "rbxassetid://13968548520",
|
||||
Description = "This is RobloxPolice's personal and private Labratory. Featuring PONG! Grab your friend and play pong! Controls are easy. Press and hold the blue button to go up and the yellow to go down. Green button pauses the game.",
|
||||
Creator = "RPAdvancedLabs",
|
||||
Type = "Game",
|
||||
Period = "January 2007"
|
||||
},
|
||||
|
||||
["Arena Test"] = {
|
||||
TeleportID = 14066099466,
|
||||
GameIcon = "rbxassetid://14207380680",
|
||||
Description = "",
|
||||
Creator = "Joe Mama",
|
||||
Type = "Game",
|
||||
Period = "L. August 2006" -- real?
|
||||
},
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
--[[
|
||||
|
||||
FORMAT:
|
||||
{ID OF SHIRT OR FACE, (DETERMINES WHETHER TO BE OBTAINABLE BY DEFAULT OR NOT), {KEYWORDS HERE (SEPERATE THEM BY COMMAS)}}
|
||||
|
||||
EXAMPLE:
|
||||
{0, true, {"blank", "shirt", "flex please work on fwm more"}}
|
||||
|
||||
NOTE: IF THE SECOND PARAMETER IS FALSE AND OBTAINABLE THROUGH SOME WAY, YOU MUST EDIT THE
|
||||
"Requirements" TABLE IN BackendMain, ASK Vibin FOR ASSISTANCE ON THAT
|
||||
]]--
|
||||
|
||||
return{
|
||||
["BrickColors"] = {
|
||||
1,
|
||||
208,
|
||||
194,
|
||||
199,
|
||||
26,
|
||||
21,
|
||||
24,
|
||||
226,
|
||||
23,
|
||||
107,
|
||||
102,
|
||||
11,
|
||||
45,
|
||||
135,
|
||||
106,
|
||||
105,
|
||||
141,
|
||||
28,
|
||||
37,
|
||||
119,
|
||||
29,
|
||||
151,
|
||||
38,
|
||||
192,
|
||||
104,
|
||||
9,
|
||||
101,
|
||||
5,
|
||||
153,
|
||||
217,
|
||||
18,
|
||||
125
|
||||
},
|
||||
|
||||
["TShirts"] = { -- to search how many shirts there are in total, ctrl + f the following without the x: "}x,
|
||||
{7601978013, true, "roblox 2006 logo beta default base64"},
|
||||
{7225890697, false, "roblox 2006 logo beta modified veteran"},
|
||||
{0, true, "blank nothing empty transparent none"},
|
||||
|
||||
{1015070, false, "administrator gear cog moderator badge 75x75"},
|
||||
{1014399, false, "combat initiation badge star medal 75x75"},
|
||||
{1005130, false, "warrior badge star medal 75x75"},
|
||||
{1000004, false, "bloxxer badge 75x75 bricks explosion"},
|
||||
|
||||
{5886805736, true, "pf phoenix fire army flames jacobxxduel flag base64 2006"},
|
||||
{6084538010, true, "roblox police badge army jackrackam 2006 2007"},
|
||||
{7121346966, true, "rocket boots jet tool fly bug fire 2006"},
|
||||
{7121344440, true, "halloween skull black skeleton telamon haunted 2006"},
|
||||
{7076185913, true, "smiley flower matt dusek white drawing 2007"},
|
||||
{7121398759, true, "snowflake santa winter stronghold telamon 2006"},
|
||||
{6084691100, true, "sunset windows xp background wallpaper pink 2007"},
|
||||
{7076165986, true, "jacbob super pea vegetable funny 2007"},
|
||||
{6205718408, true, "superman katalyst hero base64 2006"},
|
||||
{6084461592, true, "tuxedo suit katalyst james bond base64 2006"},
|
||||
{1000362, true, "drome racers red dragon are92 base64 2007"}, -- 6084696684
|
||||
{6084673680, true, "radioactive green glow uranium nuke nuclear 2007"},
|
||||
{7121404744, true, "halloween pumpkin telamon jack-o-lantern 2006"},
|
||||
{6084541916, true, "pokeball pokemon pokemon97 base64 2006 2007"},
|
||||
{6328909100, true, "pirate ship brickmason jacbob 2006 2007"},
|
||||
{6251339984, true, "pirate mike brickmason base64 2006"},
|
||||
{7076153627, true, "fleskhjerta mushroom mario bloopers 2007"},
|
||||
{7121411249, true, "multirocket tool 2006 rocket arena"},
|
||||
{6084671744, true, "miked logo emblem super 2007"},
|
||||
{6436742908, true, "lightning purple black jacbob gooblox 2007"},
|
||||
{6205722211, true, "im with stupid arrow pointing meme 2007"},
|
||||
{6084526821, true, "gravitation 2007 space purple mysterious hole"},
|
||||
{5921249189, true, "god of night and day 2007 base64 telamon homestead shield"},
|
||||
{7121345101, true, "haunted mansion ghost tool spooky halloween telamon 2006"},
|
||||
{6084695263, true, "fish aquatic ocean animal 2007"},
|
||||
{7121381586, true, "face meme dank base64 2006"}, -- may remove
|
||||
{7061990017, true, "dragon shield emblem telamon 2007"},
|
||||
{7076184240, true, "telamon jacbob dead head2 2006 2007"},
|
||||
{6205702463, true, "mrdoombringer doom homestead base64 2007"},
|
||||
{6084709412, true, "arrow cursor erik.cassel mouse 2007"},
|
||||
{7121381584, true, "controller flag uhjk 2005 beta dynablocks"},
|
||||
{7121352095, true, "character 2005 beta blue figure teal dynablocks"},
|
||||
{6084545449, true, "character 2005 beta blue figure teal dynablocks"},
|
||||
{6084565594, true, "bspurrell kirigi army blood hawk pf base64 2006"},
|
||||
{13337268453, true, "drome racers are92 logo 2007"},
|
||||
{6084698101, true, "american flag usa united states flag july fireworks 2007"},
|
||||
{6427376160, true, "adventure awaits roblox - game trailer crossroads telamon 2006"},
|
||||
{6084667475, true, "black ace of clubs card casino poker solitaire gambling 2007"},
|
||||
{7618927381, true, "homestead mrwaffles orange waffle butter 2007"},
|
||||
|
||||
|
||||
{13337078578, true, "roblox r logo badge default 2007"},
|
||||
{13337503926, true, "nuke nuclear explosion castle bravo 2007"},
|
||||
{1015429, true, "spongebob squarepants spunch cartoon 2007"},
|
||||
{1000024, true, "builderman wrench buildermanShirt.png 2007"},
|
||||
{13337858984, true, "aol aim running man stickman mascot logo"},
|
||||
|
||||
{1000554, true, "baseball sports 2007"},
|
||||
{1016496, true, "ussr communism soviet union flag 2007"},
|
||||
{13245205113, true, "anaminus homestead question mark base64 2007"},
|
||||
{1000740, true, "gamer3d shirt split red black transparent joker jester clown base64 2007"},
|
||||
{13187758818, true, "wfmp super mario bros overalls base64 2007"},
|
||||
|
||||
{1017060, true, "telamon mog fleskhjerta animal character transparent 2007"},
|
||||
{1003384, true, "death star wars space sci fi 2007"},
|
||||
{1018460, true, "bloxxer plus parody red grey fake 2007"},
|
||||
{13143788393, true, "jackrackam pirate army base64 flag 2006"},
|
||||
{7678853935, true, "are92 blood paintball logo studio are 2007"},
|
||||
|
||||
{1018182, true, "scarface movie mafia gun shoot 2007"},
|
||||
{1011512, true, "dark green suit tuxedo blue tie 2007"},
|
||||
{1011508, true, "dark black suit tuxedo blue tie 2007"},
|
||||
{1011796, true, "brown beige tan suit tuxedo coat black tie 2007"},
|
||||
{1001808, true, "eight 8 ball luck bowling gambling casino 2007"},
|
||||
|
||||
{1017918, true, "kop k white shirt blood shot bullet logo 2007"},
|
||||
{1013879, true, "im with stupider arrow pointer meme 2007"},
|
||||
{1000926, true, "sonic the hedgehog game character 2007"},
|
||||
{1014529, true, "pepsi cola drink soda logo blue 2007"},
|
||||
{13187755263, true, "super mario bros luigi overalls base64 wfmp 2007"},
|
||||
|
||||
{7679375110, true, "barraki rocks25 bionicles base64 homestead 2007"},
|
||||
{1010976, true, "lamborghini car fast speed yellow 2007"},
|
||||
{1012476, true, "food muffin cupcake yummy 2007"},
|
||||
{6084565594, true, "black hole space dark swirl gravity 2007"},
|
||||
{1008012, true, "red black x cross sign flag 2007"},
|
||||
|
||||
{1002268, true, "gamestop logo company videogames shop 2007"},
|
||||
{1011304, true, "halo master chief character 2007"},
|
||||
{1012929, true, "skull and crossbones death halloween spooky 2007"},
|
||||
{1009609, true, "smiley glaggleland happy face 2007"},
|
||||
{1003356, true, "roblox r logo red large full transparent icon 2007"},
|
||||
|
||||
{1029239, true, "cruss kilderstrohe stylish 3-piece tuxedo transparent suit 2007"},
|
||||
{1017832, true, "draco's shirt dracoaxemaster dracoswordmaster dracolabs knight jester 2007"},
|
||||
{1008721, true, "ziigy.jpg bomb cartoon omb mario cartoon 2007"},
|
||||
{1008078, true, "c chrisd titanic logo rainbow 2007"},
|
||||
{13187860604, true, "shirt4.png base64 transparent builderman screwdriver wrench tools 2007"},
|
||||
|
||||
{1013723, true, "binary hacker green black hax h4x l33t 9001 exploit 2007"},
|
||||
{1005242, true, "lego star wars desert jawa 2007"},
|
||||
{10858686890, true, "i am not think as you dumb i am meme 2007"},
|
||||
{13337117323, true, "purple robot 57 metal tron base64 2007"},
|
||||
{1015000, true, "internet explorer ie6 ie7 ring e icon logo blue 2007"},
|
||||
|
||||
{1005908, true, "robloxmuseum map egypt desert treasure museum pirate paper 2007"},
|
||||
{13337200441, true, "lego metal armor bullet vest base64 2007"},
|
||||
{13337691566, true, "cadi employee white pocket shirt base64 2007"},
|
||||
{1015611, true, "chocolate cake brown meme food yum 2007"},
|
||||
{1005186, true, "red striped shirt skater 2007"},
|
||||
|
||||
{13337566022, true, "windows xp background desktop wallpaper hill defaultfield"},
|
||||
{1005378, true, "chainmail armor metal knight fight viking medieval 2007"},
|
||||
{1004108, true, "space cool water neptune moon solar system wallpaper blue 2007"},
|
||||
{1006624, true, "helicopter flight military war middle east oil 2007"},
|
||||
{1037394, true, "jj5x5 elder scrolls morrowind meme 2007"},
|
||||
|
||||
{13644881970, true, "kirby super smash bros brawl mario ssbb"},
|
||||
{1007234, true, "target practice landing red white circle loop 2007"},
|
||||
{1010061, true, "sprite soda cola soft drink bubble green lemon lime 2007"},
|
||||
{1011254, true, "im no noob telamon shedletsky roblox 2007"},
|
||||
{13253939211, true, "pilot luke stealh pilot cloud city black blue jacket base64 2007"},
|
||||
|
||||
{1008468, true, "wikipedia logo icon globe world puzzle nerd 2007"},
|
||||
{1000976, true, "this is my son tustin cheese mario 3d 2007"},
|
||||
{1000356, true, "studioare are92 drome racers green uten navnx base64 2007"},
|
||||
{1000358, true, "studioare are92 drome racers nitro team metal base64 2007"},
|
||||
{1000372, true, "studioare are92 drome racers hot team orange base64 2007"},
|
||||
|
||||
{1000366, true, "studioare are92 drome racers blue zero team base64 2007"},
|
||||
{1008717, true, "void star black text contest telamon shedletsky * coding lua l33t 2007"},
|
||||
{1006026, true, "got root white text meme clone trooper telamon shedletsky l33t 2007"},
|
||||
{13253888384, true, "red black robloxmuseum base64 2007"},
|
||||
{12547933456, true, "toazuku armor blue white homestead contest base64 2007"},
|
||||
|
||||
{12638216701, true, "roblox police badge army jackrackam 2006 2007"},
|
||||
{1004184, true, "coca cola soda soft drink 2007"},
|
||||
{1016804, true, "fleskhjerta roblox bloopers sm64 mario 2007"},
|
||||
{1000038, true, "halo warthog vehicle future sci fi gaming 2007"},
|
||||
{1000532, true, "sun star solar system fireball orange hot 2007"},
|
||||
|
||||
{1010207, true, "blue suit coat red tie 2007"},
|
||||
{1028592, true, "i heart builderman love bm <3 telamon shedletsky 2007"},
|
||||
{1007862, true, "cartoon skull skeleton black white 2007"},
|
||||
{1003402, true, "i went to glass houses and all i got was this stupid tshirt 2007"},
|
||||
{1004052, true, "portal blue black video game vortex gun 2007"},
|
||||
|
||||
|
||||
{1006600, true, "fusion planet jpg space solar system hot cold black galaxy 2007"},
|
||||
{1029132, true, "are92 blood paintball logo studio are white 2007"},
|
||||
{1004172, true, "dr pepper soda cola soft drink 2007"},
|
||||
{1006858, true, "halo hello kitty meme 2007"},
|
||||
{10630575224, true, "nik1995 dragon backpack base64 2006"},
|
||||
|
||||
{1012724, true, "pie red meme food yum 2007"},
|
||||
{1009175, true, "orange half life logo icon 2007"},
|
||||
{1008987, true, "super mario 64 sm64 game bowser tail windows xp 2007"},
|
||||
{1000010, true, "world of warcraft logo black 2007"},
|
||||
{1009647, true, "old google logo browser web icon white transparent 2007"},
|
||||
|
||||
{1011830, true, "griffin red green gold yellow dragon shield medieval knight 2007"},
|
||||
{1003322, true, "meta avatar in an avatar loop render black shirt 2007"},
|
||||
{1003642, true, "Error loading 3d avatar press Alt + F4 to continue 2007"},
|
||||
{1015022, true, "red white pattern trippy colors tie dye 2007"},
|
||||
{1008651, true, "mrdoombringer doom 2 ii logo icon 2007"},
|
||||
|
||||
{1002860, true, "star wars jengo fett boba clone wars trooper 2007"},
|
||||
{13253896450, true, "roblox museum sonofsevenless cell green base64 2007"},
|
||||
{1008617, true, "cat arms out pool meme kitty 2007"},
|
||||
{1003448, true, "naruto orange anime 2007"},
|
||||
{1008388, true, "bionicles abcdefghijklmnopqrstuvwxyz 2007"},
|
||||
|
||||
{1002542, true, "transparent jacket shirt suit 2007"},
|
||||
{1005746, true, "blue cold winter.jpg ice 2007"},
|
||||
{1017522, true, "green day american idiot album song red grenade 2007"},
|
||||
{1000790, true, "green military camo 2007"},
|
||||
{1002864, true, "biohazard caution radioactive waste yellow black icon logo warning danger 2007"},
|
||||
{90991452, false, "riolu"}
|
||||
},
|
||||
|
||||
["Faces"] = {
|
||||
{11945029012, true},
|
||||
{12393448905, true},
|
||||
{12393532118, true},
|
||||
{13145259803, true},
|
||||
{7679385451, true},
|
||||
{13621473345, true},
|
||||
{7678855713, true},
|
||||
{13621498989, true},
|
||||
{13621616396, true},
|
||||
{5577595083, false} -- ekosi's face
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
local module = {
|
||||
["InitPage"] = [===[Welcome to FWM!
|
||||
|
||||
To get started, simply choose a character and visit somebody's Place. When you visit your own place, changes that you make are permanent. Changes to someone else's place are not permanent.
|
||||
|
||||
Consult the developer section in the coming days to learn how to create complex Places, how to create and publish Things, and how to work offline.
|
||||
|
||||
Please enter feedback and bugs in the group wall. Thank you from the FWM team.
|
||||
|
||||
]===],
|
||||
}
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
--TweenService Wrapper
|
||||
--Andrew Bereza
|
||||
local TweenService = game:GetService("TweenService")
|
||||
return function (object, properties, value, duration, style, direction, repeatCount, reverses)
|
||||
style = style or Enum.EasingStyle.Quad
|
||||
direction = direction or Enum.EasingDirection.Out
|
||||
reverses = reverses or false
|
||||
repeatCount = repeatCount or 0
|
||||
|
||||
duration = duration or 0.5
|
||||
|
||||
local propertyGoals = {}
|
||||
|
||||
local isTable = type(value) == "table"
|
||||
|
||||
for i,property in pairs(properties) do
|
||||
propertyGoals[property] = isTable and value[i] or value
|
||||
end
|
||||
local tweenInfo = TweenInfo.new(
|
||||
duration,
|
||||
style,
|
||||
direction,
|
||||
repeatCount,
|
||||
reverses
|
||||
)
|
||||
local tween = TweenService:Create(object,tweenInfo,propertyGoals)
|
||||
tween:Play()
|
||||
|
||||
return tween
|
||||
end
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
local module = {}
|
||||
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
local Modules = ReplicatedStorage:WaitForChild("Modules")
|
||||
|
||||
local TweenWrapper = require(Modules:WaitForChild("Menu"):WaitForChild("TweenWrapper"))
|
||||
|
||||
function module:SetupButtonFeedback(Button, Config)
|
||||
--Cache the initial stuff so we dont need an extra dumb parameter just for that:
|
||||
local NormalSize: UDim2 = Button.Size
|
||||
local NormalRotation: number = Button.Rotation
|
||||
local NormalBackgroundTransparency: number = Button.BackgroundTransparency
|
||||
|
||||
--Config stuff into vars for safe keeping:
|
||||
local HoverSize = Config["HoverSize"] or NormalSize
|
||||
local DownSize = Config["DownSize"] or NormalSize
|
||||
local BackgroundTransparency = Config["BackgroundTransparency"] or NormalBackgroundTransparency
|
||||
local BackgroundTransparencyDown = Config["BackgroundTransparencyDown"] or NormalBackgroundTransparency
|
||||
local HoverRotation = Config["HoverRotation"] or Button.Rotation
|
||||
local Style = Config["Style"] or Enum.EasingStyle.Elastic
|
||||
|
||||
if Config["FrameStyled"] ~= nil and Config["FrameStyled"] == true then --Some buttons use different methods of styling, such as the "JoinButton" having styling and resizing in the TextButton itself
|
||||
local TextButton: Instance? = Button:FindFirstChildOfClass("TextButton")
|
||||
|
||||
if TextButton and TextButton:IsA("TextButton") then
|
||||
|
||||
--Hookup everything:
|
||||
TextButton.MouseEnter:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {HoverSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {HoverRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {BackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
TextButton.MouseLeave:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {NormalSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {NormalBackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
TextButton.MouseButton1Down:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {DownSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {BackgroundTransparencyDown}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
TextButton.MouseButton1Up:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {NormalSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {NormalBackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
end
|
||||
elseif Config["FrameStyled"] ~= nil and Config["FrameStyled"] == false then --Just use the button instance directly
|
||||
--Hookup everything:
|
||||
Button.MouseEnter:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {HoverSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {HoverRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {BackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
Button.MouseLeave:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {NormalSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {NormalBackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
Button.MouseButton1Down:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {DownSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {BackgroundTransparencyDown}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
|
||||
Button.MouseButton1Up:Connect(function()
|
||||
TweenWrapper(Button, {"Size"}, {NormalSize}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"Rotation"}, {NormalRotation}, .5, Style, Enum.EasingDirection.Out)
|
||||
TweenWrapper(Button, {"BackgroundTransparency"}, {NormalBackgroundTransparency}, .5, Style, Enum.EasingDirection.Out)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
return module
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
--!nolint
|
||||
--Gilbert-Johnson-Keerthi distance and intersection tests
|
||||
--Tyler R. Hoyer
|
||||
--11/20/2014
|
||||
|
||||
--May return early if no intersection if found. If it is primed, it will run in amortized constant time (untested).
|
||||
|
||||
--If the distance function is used between colliding objects, the program
|
||||
--may loop a hundred times without finding a result. If this is the case,
|
||||
--it will throw an error. The check is omited for speed. If the objects
|
||||
--might intersect eachother, call the intersection method first.
|
||||
|
||||
--Objects must implement the :getFarthestPoint(dir) function which returns the
|
||||
--farthest point in a given direction.
|
||||
|
||||
--Used Roblox's Vector3 userdata. Outside implementations will require a implementation of the methods of
|
||||
--the Vector3's. :Dot, :Cross, .new, and .magnitude must be defined.
|
||||
|
||||
local abs = math.abs
|
||||
local min = math.min
|
||||
local huge = math.huge
|
||||
local origin = Vector3.new()
|
||||
|
||||
local function loopRemoved(data, step)
|
||||
--We're on the next step
|
||||
step = step + 1
|
||||
|
||||
--If we have completed the last cycle, stop
|
||||
if step > #data then
|
||||
return nil
|
||||
end
|
||||
|
||||
--To be the combination without the value
|
||||
local copy = {}
|
||||
|
||||
--Copy the data up to the missing value
|
||||
for i = 1, step - 1 do
|
||||
copy[i] = data[i]
|
||||
end
|
||||
|
||||
--Copy the data on the other side of the missing value
|
||||
for i = step, #data - 1 do
|
||||
copy[i] = data[i + 1]
|
||||
end
|
||||
|
||||
--return the step, combination, and missing value
|
||||
return step, copy, data[step]
|
||||
end
|
||||
|
||||
--Finds the vector direction to search for the next point
|
||||
--in the simplex.
|
||||
local function getDir(points, to)
|
||||
--Single point, return vector
|
||||
if #points == 1 then
|
||||
return to - points[1]
|
||||
|
||||
--Line, return orthogonal line
|
||||
elseif #points == 2 then
|
||||
local v1 = points[2] - points[1]
|
||||
local v2 = to - points[1]
|
||||
return v1:Cross(v2):Cross(v1)
|
||||
|
||||
--Triangle, return normal
|
||||
else
|
||||
local v1 = points[3] - points[1]
|
||||
local v2 = points[2] - points[1]
|
||||
local v3 = to - points[1]
|
||||
local n = v1:Cross(v2)
|
||||
return n:Dot(v3) < 0 and -n or n
|
||||
end
|
||||
end
|
||||
|
||||
--The function that finds the intersection between two sets
|
||||
--of points, s1 and s2. s1 and s2 must return the point in
|
||||
--the set that is furthest in a given direction when called.
|
||||
--If the start direction sV is specified as the seperation
|
||||
--vector, the program runs in constant time. (excluding the
|
||||
--user implemented functions for finding the furthest point).
|
||||
function intersection(s1, s2, sV)
|
||||
local points = {}
|
||||
|
||||
-- find point
|
||||
local function support(dir)
|
||||
local a = s1(dir)
|
||||
local b = s2(-dir)
|
||||
points[#points + 1] = a - b
|
||||
return dir:Dot(a) < dir:Dot(b)
|
||||
end
|
||||
|
||||
-- find all points forming a simplex
|
||||
if support(sV)
|
||||
or support(getDir(points, origin))
|
||||
or support(getDir(points, origin))
|
||||
or support(getDir(points, origin))
|
||||
then
|
||||
return false
|
||||
end
|
||||
|
||||
local step, others, removed = 0, nil,nil
|
||||
repeat
|
||||
step, others, removed = loopRemoved(points, step)
|
||||
local dir = getDir(others, removed)
|
||||
if others[1]:Dot(dir) > 0 then
|
||||
points = others
|
||||
if support(-dir) then
|
||||
return false
|
||||
end
|
||||
step = 0
|
||||
end
|
||||
until step == 4
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
--Checks if two vectors are equal
|
||||
local function equals(p1, p2)
|
||||
return p1.x == p2.x and p1.y == p2.y and p1.z == p2.z
|
||||
end
|
||||
|
||||
--Gets the mathematical scalar t of the parametrc line defined by
|
||||
--o + t * v of a point p on the line (the magnitude of the projection).
|
||||
local function getT(o, v, p)
|
||||
return (p - o):Dot(v) / v:Dot(v)
|
||||
end
|
||||
|
||||
--Returns the scalar of the closest point on a line to
|
||||
--the origin. Note that if the vector is a zero vector then
|
||||
--it treats it as a point offset instead of a line.
|
||||
local function lineToOrigin(o, v)
|
||||
if equals(v, origin) then
|
||||
return o
|
||||
end
|
||||
local t = getT(o, v, origin)
|
||||
if t < 0 then
|
||||
t = 0
|
||||
elseif t > 1 then
|
||||
t = 1
|
||||
end
|
||||
return o + v*t
|
||||
end
|
||||
|
||||
--Convoluted to deal with cases like points in the same place
|
||||
local function closestPoint(a, b, c)
|
||||
--if abc is a line
|
||||
if c == nil then
|
||||
--get the scalar of the closest point
|
||||
local dir = b - a
|
||||
local t = getT(a, dir, origin)
|
||||
if t < 0 then t = 0
|
||||
elseif t > 1 then t = 1
|
||||
end
|
||||
--and return the point
|
||||
return a + dir * t
|
||||
end
|
||||
|
||||
--Otherwise it is a triangle.
|
||||
--Define all the lines of the triangle and the normal
|
||||
local vAB, vBC, vCA = b - a, c - b, a - c
|
||||
local normal = vAB:Cross(vBC)
|
||||
|
||||
--If two points are in the same place then
|
||||
if normal.magnitude == 0 then
|
||||
|
||||
--Find the closest line between ab and bc to the origin (it cannot be ac)
|
||||
local ab = lineToOrigin(a, vAB)
|
||||
local bc = lineToOrigin(b, vBC)
|
||||
if ab.magnitude < bc.magnitude then
|
||||
return ab
|
||||
else
|
||||
return bc
|
||||
end
|
||||
|
||||
--The following statements find the line which is closest to the origin
|
||||
--by using voroni regions. If it is inside the triangle, it returns the
|
||||
--normal of the triangle.
|
||||
elseif a:Dot(a + vAB * getT(a, vAB, c) - c) <= 0 then
|
||||
return lineToOrigin(a, vAB)
|
||||
elseif b:Dot(b + vBC * getT(b, vBC, a) - a) <= 0 then
|
||||
return lineToOrigin(b, vBC)
|
||||
elseif c:Dot(c + vCA * getT(c, vCA, b) - b) <= 0 then
|
||||
return lineToOrigin(c, vCA)
|
||||
else
|
||||
return -normal * getT(a, normal, origin)
|
||||
end
|
||||
end
|
||||
|
||||
--The distance function. Works like the intersect function above. Returns
|
||||
--the translation vector between the two closest points.
|
||||
function distance(s1, s2, sV)
|
||||
local function support (dir)
|
||||
return s1(dir) - s2(-dir)
|
||||
end
|
||||
|
||||
--Find the initial three points in the search direction, opposite of the
|
||||
--search direction, and in the orthoginal direction between those two
|
||||
--points to the origin.
|
||||
local a = support(sV)
|
||||
local b = support(-a)
|
||||
local c = support(-closestPoint(a, b))
|
||||
|
||||
--Setup maximum loops
|
||||
local i = 1
|
||||
while i < 100 do
|
||||
i = i + 1
|
||||
|
||||
--Get the closest point on the triangle
|
||||
local p = closestPoint(a, b, c)
|
||||
|
||||
--If it is the origin, the objects are just touching,
|
||||
--return a zero vector.
|
||||
if equals(p, origin) then
|
||||
return origin
|
||||
end
|
||||
|
||||
--Search in the direction from the closest point
|
||||
--to the origin for a point.
|
||||
local dir = p.unit
|
||||
local d = support(dir)
|
||||
local dd = d:Dot(dir)
|
||||
local dm = math.min(
|
||||
a:Dot(dir),
|
||||
b:Dot(dir),
|
||||
c:Dot(dir)
|
||||
)
|
||||
|
||||
--If the new point is farther or equal to the closest
|
||||
--point on the triangle, then we have found the closest
|
||||
--point.
|
||||
if dd >= dm then
|
||||
--return the point on the minkowski difference as the
|
||||
--translation vector between the two closest point.
|
||||
return -p
|
||||
end
|
||||
|
||||
--Otherwise replace the point on the triangle furthest
|
||||
--from the origin with the new point
|
||||
local ma, mb, mc = a:Dot(dir), b:Dot(dir), c:Dot(dir)
|
||||
if ma > mb then
|
||||
if ma > mc then
|
||||
a = d
|
||||
else
|
||||
c = d
|
||||
end
|
||||
elseif mb > mc then
|
||||
b = d
|
||||
else
|
||||
c = d
|
||||
end
|
||||
end
|
||||
|
||||
--Return an error if no point was found in the maximum
|
||||
--number of iterations
|
||||
error 'Unable to find distance, are they intersecting?'
|
||||
end
|
||||
|
||||
return {
|
||||
intersection = intersection;
|
||||
distance = distance;
|
||||
}
|
||||
|
|
@ -0,0 +1,246 @@
|
|||
local VpfRayCast = {}
|
||||
|
||||
local Runservice = game:GetService("RunService")
|
||||
local GJK = require(script.GJK)
|
||||
local FRONT = Vector3.new(0, 0, -1)
|
||||
local AllParts = {}
|
||||
VpfRayCast.__index = VpfRayCast
|
||||
|
||||
|
||||
local function LocalPos(Pos,Viewport)
|
||||
local X = Pos.X - Viewport.AbsolutePosition.X
|
||||
local Y = Pos.Y - Viewport.AbsolutePosition.Y
|
||||
return Vector2.new(X, Y)
|
||||
end
|
||||
|
||||
|
||||
local function ToVec2(Vector)
|
||||
return Vector2.new(Vector.x, Vector.y)
|
||||
end
|
||||
|
||||
|
||||
local function ScreenTo3DPlane(Pos, viewport, camera,Depth, Normal, Gui_Inset)
|
||||
Pos = LocalPos(Vector2.new(Pos.X, Pos.Y ), viewport)
|
||||
local Cam_Size = Vector2.new(viewport.AbsoluteSize.X , viewport.AbsoluteSize.Y - (Gui_Inset or 0))
|
||||
local Height = Cam_Size.Y
|
||||
local Width = Cam_Size.X
|
||||
local AspectRatio = (Cam_Size.X/Cam_Size.Y)
|
||||
local Cam_Pos = camera.CFrame.Position
|
||||
local Scale =(Depth or 1)
|
||||
local yfov =math.rad(camera.FieldOfView)
|
||||
local Tangent = math.tan((yfov/2));
|
||||
local fx = ((2 * Scale) * (Pos.x /(Width-1)) -(Scale*1))
|
||||
local fy = ((2 * Scale) * (Pos.y/(Height-1)) -(Scale*1))
|
||||
local NX = ((AspectRatio * Tangent * fx ))
|
||||
local NY = (-Tangent * fy)
|
||||
local NZ = -Scale
|
||||
local Translatedcf = (camera.CFrame) * CFrame.new(Vector3.new(NX, NY, NZ)) -- rotate rel to camera
|
||||
return CFrame.new( Translatedcf.p , camera.CFrame.p ) -- rotate to face camera
|
||||
end
|
||||
|
||||
|
||||
|
||||
local pPos, pI, pJ, pK
|
||||
local function supportPart(dir)
|
||||
return pPos
|
||||
+ (pI:Dot(dir) > 0 and pI or -pI)
|
||||
+ (pJ:Dot(dir) > 0 and pJ or -pJ)
|
||||
+ (pK:Dot(dir) > 0 and pK or -pK)
|
||||
end
|
||||
|
||||
|
||||
local min = math.min
|
||||
local max = math.max
|
||||
|
||||
local function rejectionVector(point, start, dir)
|
||||
local vStartToPoint = point - start
|
||||
return vStartToPoint - vStartToPoint:Dot(dir) * dir
|
||||
end
|
||||
|
||||
local function rejectionMagnitudeSquared(point, start, dir)
|
||||
local vStartToPoint = point - start
|
||||
local projectionMagnitude = vStartToPoint:Dot(dir)
|
||||
return vStartToPoint:Dot(vStartToPoint) - projectionMagnitude * projectionMagnitude
|
||||
end
|
||||
|
||||
|
||||
|
||||
local rayStart, rayFinish
|
||||
local function supportRay(dir)
|
||||
if rayStart:Dot(dir) > rayFinish:Dot(dir) then
|
||||
return rayStart
|
||||
else
|
||||
return rayFinish
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local vertices
|
||||
local function SupportPolygon(dir)
|
||||
local furthestDistance = -math.huge
|
||||
local furthestVertex = nil
|
||||
for i =1, #vertices do
|
||||
local distance = vertices[i].p:Dot(dir);
|
||||
if (distance > furthestDistance) then
|
||||
furthestDistance = distance;
|
||||
furthestVertex = vertices[i].p
|
||||
end
|
||||
end
|
||||
return furthestVertex;
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function CloneTable(Table)
|
||||
local Newtable = {}
|
||||
for _, v in ipairs(Table) do
|
||||
table.insert(Newtable,v)
|
||||
end
|
||||
return Newtable
|
||||
end
|
||||
|
||||
|
||||
local function GetWedgeCorners(part)
|
||||
local T = {}
|
||||
local S = part.size * .5
|
||||
local cf = part.CFrame
|
||||
table.insert(T, cf * CFrame.new(-S.x,-S.y,-S.z))
|
||||
table.insert(T,cf * CFrame.new(S.x,-S.y,-S.z))
|
||||
table.insert(T, cf * CFrame.new(-S.x,S.y,S.z))
|
||||
table.insert(T,cf * CFrame.new(S.x,S.y,S.z))
|
||||
table.insert(T, cf * CFrame.new(-S.x,-S.y,S.z))
|
||||
table.insert(T,cf *CFrame.new(S.x,-S.y,S.z))
|
||||
return T
|
||||
end
|
||||
|
||||
|
||||
|
||||
local pos, s, radius
|
||||
local function SupportSphere(dir)
|
||||
return pos + dir.Unit * radius
|
||||
end
|
||||
|
||||
|
||||
local function ClosetPoint(Part, vec)
|
||||
local Transform = Part.CFrame:pointToObjectSpace(vec)
|
||||
local HalfSize = Part.Size * 0.5
|
||||
return Part.CFrame * Vector3.new(
|
||||
math.clamp(Transform.x, -HalfSize.x, HalfSize.x),
|
||||
math.clamp(Transform.y, -HalfSize.y, HalfSize.y),
|
||||
math.clamp(Transform.z, -HalfSize.z, HalfSize.z)
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function ClosetPart(RayOrigin,Parts)
|
||||
local BestScore = -math.huge
|
||||
local BestPick
|
||||
local OverallClosetPoint
|
||||
for i, Part in ipairs(Parts) do
|
||||
local ClosetPoint = ClosetPoint(Part, rayStart)
|
||||
local Mag = (ClosetPoint- RayOrigin).Magnitude
|
||||
if BestScore > Mag or i == 1 then
|
||||
BestScore = Mag
|
||||
BestPick = Part
|
||||
OverallClosetPoint = ClosetPoint
|
||||
end
|
||||
end
|
||||
return BestPick, OverallClosetPoint
|
||||
end
|
||||
|
||||
|
||||
local function findPartsOnRay(start, dir, parts,maxDist, ReturnAll )
|
||||
local finish = start + dir * (maxDist or 500)
|
||||
rayStart = start
|
||||
rayFinish = finish
|
||||
local Foundparts = {}
|
||||
for i, part in next, parts do
|
||||
local Mag = rejectionMagnitudeSquared(part.Position, start, dir)
|
||||
if Mag < part.Size:Dot(part.Size) then
|
||||
local SupportFunc
|
||||
pPos = part.Position
|
||||
if part:IsA("WedgePart") then
|
||||
SupportFunc = SupportPolygon
|
||||
vertices = GetWedgeCorners(part)
|
||||
elseif part:IsA("Part") and part.Shape == Enum.PartType.Ball then ---Check if part is a Sphere
|
||||
pos = part.Position
|
||||
s = part.Size * 0.5
|
||||
radius = math.min(s.X, s.Y, s.Z)
|
||||
SupportFunc = SupportSphere
|
||||
else ---if part is not sphere or wedge then...
|
||||
SupportFunc = supportPart
|
||||
local cf = part.CFrame
|
||||
cf = cf - cf.p
|
||||
local s = part.Size * 0.5
|
||||
pI = cf.RightVector * s.X
|
||||
pJ = cf.UpVector * s.Y
|
||||
pK = cf.LookVector * s.Z
|
||||
end
|
||||
if SupportFunc then
|
||||
local vec =rejectionVector(pPos, start, dir)
|
||||
if GJK.intersection(SupportFunc,supportRay,vec) then
|
||||
table.insert(Foundparts, part )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if ReturnAll then
|
||||
return Foundparts, rayFinish
|
||||
else
|
||||
return ClosetPart(rayStart,Foundparts)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local function GetAllDecendents(Table, handler, Filter)
|
||||
if not Table[handler] then
|
||||
Table[handler] ={}
|
||||
end
|
||||
Filter = Filter or {}
|
||||
local ModelTargetFilters = {}
|
||||
for _, part in pairs(handler:GetDescendants()) do
|
||||
if not table.find(Filter, part) and not table.find(ModelTargetFilters,part) then
|
||||
if part:IsA("MeshPart") or part:IsA("BasePart") then
|
||||
if not table.find(Table[handler] , part) then
|
||||
table.insert(Table[handler] , part)
|
||||
end
|
||||
end
|
||||
elseif part:IsA("Model") then
|
||||
for _, p in pairs(part:GetDescendants()) do
|
||||
table.insert(ModelTargetFilters, p)
|
||||
end
|
||||
end
|
||||
end
|
||||
return Table[handler]
|
||||
end
|
||||
|
||||
|
||||
local function MouseHitFunc(Mouse,Viewport, Handler, cam, TargetFilter,All,Dist)
|
||||
if typeof(TargetFilter) ~= "table" then TargetFilter = {TargetFilter} end
|
||||
local Parts = GetAllDecendents(AllParts, Handler or Viewport, TargetFilter) -----This Can Be Removed as to not check constantly for parts
|
||||
local cf, rot = ScreenTo3DPlane(Vector2.new(Mouse.X, Mouse.Y) , Viewport, cam)
|
||||
local FowardDir = cf:VectorToWorldSpace(-FRONT)
|
||||
local Parts, Pos = findPartsOnRay(cf.p, FowardDir,Parts, Dist, All)
|
||||
return Parts, Pos
|
||||
end
|
||||
|
||||
|
||||
|
||||
function VpfRayCast.NewMouse(Mouse,vpf,camera, Handler, maxDist )
|
||||
local Functions = {
|
||||
MouseHit = function(Targetfilter, All)
|
||||
return MouseHitFunc(Mouse,vpf, Handler, camera,Targetfilter, All, maxDist)
|
||||
end}
|
||||
return Functions, setmetatable(VpfRayCast,Functions)
|
||||
end
|
||||
|
||||
VpfRayCast.new = VpfRayCast.NewMouse
|
||||
VpfRayCast.RayCast = findPartsOnRay
|
||||
|
||||
return VpfRayCast
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,260 @@
|
|||
-- declarations
|
||||
local Players = game:GetService("Players")
|
||||
local self = Players.LocalPlayer
|
||||
local Figure = script.Parent
|
||||
local Torso = Figure:WaitForChild("Torso")
|
||||
local RightShoulder = Torso:WaitForChild("Right Shoulder")
|
||||
local LeftShoulder = Torso:WaitForChild("Left Shoulder")
|
||||
local RightHip = Torso:WaitForChild("Right Hip")
|
||||
local LeftHip = Torso:WaitForChild("Left Hip")
|
||||
local Neck = Torso:WaitForChild("Neck")
|
||||
local Humanoid = Figure:WaitForChild("Humanoid")
|
||||
|
||||
local pose = "Standing"
|
||||
local jumped = false
|
||||
|
||||
local TablePoseList = {
|
||||
-- [Enum.HumanoidStateType.FallingDown] = "FallingDown",
|
||||
-- [Enum.HumanoidStateType.Freefall] = "FreeFall",
|
||||
[Enum.HumanoidStateType.Climbing] = "Climbing",
|
||||
[Enum.HumanoidStateType.Jumping] = "Jumping",
|
||||
[Enum.HumanoidStateType.Seated] = "Seated",
|
||||
[Enum.HumanoidStateType.Dead] = "Dead",
|
||||
}
|
||||
|
||||
local params = OverlapParams.new()
|
||||
local ignore = {Figure, workspace.CurrentCamera}
|
||||
params.FilterDescendantsInstances = ignore
|
||||
params.FilterType = Enum.RaycastFilterType.Blacklist
|
||||
|
||||
local legObjects = {}
|
||||
|
||||
local toolAnim = "None"
|
||||
local toolAnimTime = 0
|
||||
|
||||
-- functions
|
||||
|
||||
local speed : number = 0
|
||||
function onRunning(spd : number)
|
||||
speed = spd
|
||||
if speed >= 0.6 or Humanoid.MoveDirection.Magnitude > 0.1 then
|
||||
pose = "Running"
|
||||
else
|
||||
pose = "Standing"
|
||||
end
|
||||
end
|
||||
|
||||
local sillyPoses = {"Jumping", "Freefall"}
|
||||
function StateChanged(old : Enum.HumanoidStateType, new : Enum.HumanoidStateType)
|
||||
if not new.Name:match("Running") then
|
||||
local poseFound = TablePoseList[new]
|
||||
|
||||
if poseFound then
|
||||
pose = poseFound
|
||||
end
|
||||
end
|
||||
|
||||
if not table.find(sillyPoses, new.Name) and jumped == true then
|
||||
jumped = false
|
||||
end
|
||||
end
|
||||
|
||||
function moveJump()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14
|
||||
LeftShoulder.DesiredAngle = -3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function moveSeated()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14/2
|
||||
LeftShoulder.DesiredAngle = -3.14/2
|
||||
RightHip.DesiredAngle = 3.14/2
|
||||
LeftHip.DesiredAngle = -3.14/2
|
||||
end
|
||||
|
||||
function moveClimb()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = -3.14
|
||||
LeftShoulder.DesiredAngle = 3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function getToolAnim(tool)
|
||||
for _, c in ipairs(tool:GetChildren()) do
|
||||
if c.Name == "toolanim" and c.className == "StringValue" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function animateTool()
|
||||
|
||||
if (toolAnim == "None" and pose ~= "Climbing") then
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
RightShoulder.MaxVelocity = 0.175/2
|
||||
-- LeftShoulder.MaxVelocity = 0.175
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Slash") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 0
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Lunge") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
LeftShoulder.MaxVelocity = 0.35/2
|
||||
RightHip.MaxVelocity = 0.35/2
|
||||
LeftHip.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
LeftShoulder.DesiredAngle = 1.0
|
||||
RightHip.DesiredAngle = 1.57
|
||||
LeftHip.DesiredAngle = 1.0
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function getTool()
|
||||
for _, v : Instance in pairs(Figure:GetChildren()) do
|
||||
if v:IsA("Tool") then
|
||||
if not v:FindFirstChild("FakeHopperbin") then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function move(time)
|
||||
local state = Humanoid:GetState().Name
|
||||
local amplitude
|
||||
local frequency
|
||||
|
||||
if pose == "Seated" or state == "Seated" then
|
||||
moveSeated()
|
||||
return
|
||||
end
|
||||
|
||||
if (pose == "FreeFall" or pose == "Jumping") and jumped == true then
|
||||
moveJump()
|
||||
return
|
||||
end
|
||||
|
||||
if pose == "Climbing" or #legObjects > 0 then
|
||||
moveClimb()
|
||||
return
|
||||
end
|
||||
|
||||
RightShoulder.MaxVelocity = 0.15/2
|
||||
LeftShoulder.MaxVelocity = 0.15/2
|
||||
if pose == "Running" then
|
||||
amplitude = 1
|
||||
frequency = 9
|
||||
else
|
||||
amplitude = 0.1
|
||||
frequency = 1
|
||||
end
|
||||
|
||||
local desiredAngle = amplitude * math.sin(time*frequency)
|
||||
|
||||
RightShoulder.DesiredAngle = desiredAngle
|
||||
LeftShoulder.DesiredAngle = desiredAngle
|
||||
RightHip.DesiredAngle = -desiredAngle
|
||||
LeftHip.DesiredAngle = -desiredAngle
|
||||
|
||||
local tool = getTool()
|
||||
|
||||
if tool then
|
||||
|
||||
local animStringValueObject = getToolAnim(tool)
|
||||
|
||||
if animStringValueObject then
|
||||
toolAnim = animStringValueObject.Value
|
||||
-- message recieved, delete StringValue
|
||||
animStringValueObject.Parent = nil
|
||||
toolAnimTime = time + .3
|
||||
end
|
||||
|
||||
if time > toolAnimTime then
|
||||
toolAnimTime = 0
|
||||
toolAnim = "None"
|
||||
end
|
||||
|
||||
--animateTool()
|
||||
|
||||
|
||||
else
|
||||
toolAnim = "None"
|
||||
toolAnimTime = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Connect events
|
||||
|
||||
Humanoid.Running:Connect(onRunning)
|
||||
Humanoid.StateChanged:Connect(StateChanged)
|
||||
|
||||
script:WaitForChild("ForcePose").Event:Connect(function(newPose : string)
|
||||
if typeof(newPose) == "string" then
|
||||
pose = newPose
|
||||
if newPose == "Jumping" then
|
||||
jumped = true
|
||||
moveJump()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Humanoid.Jumping:Connect(function(state)
|
||||
if state == true then
|
||||
jumped = true
|
||||
pose = "Jumping"
|
||||
moveJump()
|
||||
end
|
||||
end)
|
||||
|
||||
-- main program
|
||||
|
||||
local nextTime = 0
|
||||
local runService = game:GetService("RunService");
|
||||
|
||||
while Figure.Parent ~= nil do
|
||||
local CurrentState = Humanoid:GetState().Name
|
||||
local time = runService.Stepped:Wait()
|
||||
if time > nextTime then
|
||||
local VerticalVelocity = Torso.AssemblyLinearVelocity.Y
|
||||
local HorizontalVelocity = Torso.AssemblyLinearVelocity * Vector3.new(1, 0, 1)
|
||||
local requestMoveMagnitude = (Humanoid.MoveDirection.Magnitude > 0 and Humanoid.MoveDirection.Magnitude or CFrame.lookAt(Torso.Position * Vector3.new(1, 0, 1), Humanoid.WalkToPoint * Vector3.new(1, 0, 1)).LookVector.Magnitude)
|
||||
|
||||
if math.abs(VerticalVelocity) > 0.025 and CurrentState:match("Running") then
|
||||
local overlap = workspace:GetPartBoundsInBox((Torso.CFrame * CFrame.new(0, -1.75, 0)) * CFrame.new(Torso.AssemblyLinearVelocity.Unit * Vector3.new(1, 0, 1)), Vector3.new(2, 2, 1) / 1.5, params)
|
||||
for _, v : BasePart? in pairs(overlap) do
|
||||
if v and v.CanCollide == false then
|
||||
table.insert(ignore, v)
|
||||
params.FilterDescendantsInstances = ignore
|
||||
|
||||
table.remove(overlap, table.find(overlap, v))
|
||||
end
|
||||
end
|
||||
legObjects = overlap
|
||||
else
|
||||
table.clear(legObjects)
|
||||
if jumped == false and CurrentState ~= "Climbing" and CurrentState ~= "FallingDown" then
|
||||
onRunning(HorizontalVelocity.Magnitude * requestMoveMagnitude)
|
||||
end
|
||||
end
|
||||
|
||||
move(time)
|
||||
nextTime = time + 0.1
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "WorldModel",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
--!strict
|
||||
|
||||
local TeleportService : TeleportService = game:GetService("TeleportService")
|
||||
local ReplicatedStorage : ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local Protocols : Instance = ReplicatedStorage:WaitForChild("Protocols")
|
||||
local TeleportPlayer : Instance = Protocols:WaitForChild("TeleportPlayer")
|
||||
|
||||
|
||||
local function Clicked(): ()
|
||||
local Container = script.Parent.Parent.Parent
|
||||
local GameID = Container.GameId
|
||||
|
||||
if TeleportPlayer:IsA("RemoteEvent") then
|
||||
TeleportPlayer:FireServer(GameID.Value, Container.GameName.Text, "play")
|
||||
end
|
||||
end
|
||||
|
||||
script.Parent.MouseButton1Click:Connect(Clicked)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "TextButton",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
--!strict
|
||||
|
||||
local TeleportService : TeleportService = game:GetService("TeleportService")
|
||||
local ReplicatedStorage : ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local Protocols : Instance = ReplicatedStorage:WaitForChild("Protocols")
|
||||
local TeleportPlayer : Instance = Protocols:WaitForChild("TeleportPlayer")
|
||||
|
||||
|
||||
local function Clicked(): ()
|
||||
local Container = script.Parent.Parent.Parent
|
||||
local GameID = Container.GameId
|
||||
|
||||
if TeleportPlayer:IsA("RemoteEvent") then
|
||||
TeleportPlayer:FireServer(GameID.Value, Container.GameName.Text, "solo")
|
||||
end
|
||||
end
|
||||
|
||||
script.Parent.MouseButton1Click:Connect(Clicked)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "TextButton",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
workspace.Music.Volume = 0
|
||||
|
||||
local newMusic = Instance.new("Sound")
|
||||
newMusic.SoundId = "rbxasset://0"
|
||||
newMusic.Volume = 1
|
||||
newMusic.Parent = workspace
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ScreenGui",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,141 @@
|
|||
--!strict
|
||||
|
||||
--[[
|
||||
KeyboardCombination 2022
|
||||
|
||||
I like to fart alot
|
||||
WHAT IS THIS
|
||||
]]
|
||||
|
||||
--Init:
|
||||
local Music: Sound = workspace.Music
|
||||
|
||||
local MusicList = {
|
||||
[1] = {
|
||||
"rbxassetid://11928218894",
|
||||
"Users Roblox Trailer"
|
||||
},
|
||||
|
||||
[2] = {
|
||||
"rbxassetid://9087258918",
|
||||
"Windows XP Installation Music (Stray Objects Remix)"
|
||||
},
|
||||
|
||||
[3] = {
|
||||
"rbxassetid://11340251339",
|
||||
"Fanfare"
|
||||
},
|
||||
|
||||
[4] = {
|
||||
"rbxassetid://1841787266",
|
||||
"Heatwave"
|
||||
},
|
||||
|
||||
[5] = {
|
||||
"rbxassetid://11928175984",
|
||||
"The System is Down"
|
||||
},
|
||||
|
||||
[6] = {
|
||||
"rbxassetid://12626067744",
|
||||
"SONG1010.MP2"
|
||||
},
|
||||
|
||||
[7] = {
|
||||
"rbxassetid://12708866776",
|
||||
"Wind of Fjords (Faded w/ Glitch)"
|
||||
},
|
||||
|
||||
[8] = {
|
||||
"rbxassetid://13614340445",
|
||||
"Operation Evolution"
|
||||
},
|
||||
|
||||
[9] = {
|
||||
"rbxassetid://13614356463",
|
||||
"The Sims - Neighborhood 2"
|
||||
},
|
||||
|
||||
[10] = {
|
||||
"rbxassetid://13614397479",
|
||||
"The Final Hour"
|
||||
},
|
||||
|
||||
[11] = {
|
||||
"rbxassetid://13614444887",
|
||||
"Defcon Zero"
|
||||
},
|
||||
|
||||
[12] = {
|
||||
"rbxassetid://13614460720",
|
||||
"ROBLOX XBOX Main Menu"
|
||||
},
|
||||
|
||||
[13] = {
|
||||
"rbxassetid://13614508914",
|
||||
"The Great Strategy"
|
||||
},
|
||||
|
||||
[14] = {
|
||||
"rbxassetid://13621278048",
|
||||
"Mega Man 7 - Freezeman"
|
||||
},
|
||||
|
||||
[15] = {
|
||||
"rbxassetid://13761204660",
|
||||
"Phenomena - Enigma (Remix)"
|
||||
},
|
||||
|
||||
[16] = {
|
||||
"rbxassetid://13515277396",
|
||||
"Rusty Bucket Bay"
|
||||
},
|
||||
|
||||
[17] = {
|
||||
"rbxassetid://13772090269",
|
||||
"The Humpback Hop"
|
||||
},
|
||||
|
||||
[18] = {
|
||||
"rbxassetid://13823878821",
|
||||
"Positively Dark - Awakening"
|
||||
},
|
||||
|
||||
[19] = {
|
||||
"rbxassetid://13833571796",
|
||||
"Elwood - Neutral Zone"
|
||||
},
|
||||
|
||||
[20] = {
|
||||
"rbxassetid://13855912165",
|
||||
"Lite 'N Dreamy (Resampled)"
|
||||
},
|
||||
|
||||
[21] = {
|
||||
"rbxassetid://13864165212",
|
||||
"(gauge) radio ver."
|
||||
},
|
||||
|
||||
[22] = {
|
||||
"rbxassetid://13938054301",
|
||||
"Rainbow Destructor"
|
||||
}
|
||||
}
|
||||
|
||||
local SongIndex: number = math.random(1, #MusicList)
|
||||
|
||||
--Main loop:
|
||||
while true do
|
||||
Music.SoundId = MusicList[SongIndex][1]
|
||||
Music.Name = MusicList[SongIndex][2]
|
||||
Music.TimePosition = 0
|
||||
Music:Play()
|
||||
|
||||
SongIndex = math.random(1, #MusicList)
|
||||
|
||||
--if SongIndex > #MusicList then
|
||||
-- SongIndex = 1
|
||||
--end
|
||||
|
||||
Music.Ended:Wait()
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
game.Players.PlayerAdded:connect(function(plr)
|
||||
if string.lower(plr.Name:sub(1,6)) == "thomas" then
|
||||
plr:Kick()
|
||||
elseif string.lower(plr.Name:sub(1,4)) == "fwmd" then
|
||||
plr:Kick()
|
||||
end
|
||||
end)
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
local MessagingService = game:GetService("MessagingService")
|
||||
local RunService = game:GetService("RunService")
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local Protocols = ReplicatedStorage:WaitForChild("Protocols")
|
||||
|
||||
local Information = {}
|
||||
|
||||
local function FindPlace(PlaceId)
|
||||
if Information[PlaceId] then
|
||||
return Information[PlaceId]
|
||||
end
|
||||
end
|
||||
|
||||
if not RunService:IsStudio() then
|
||||
MessagingService:SubscribeAsync("PlayersOnline", function(Info)
|
||||
local GrabbedData = Info.Data
|
||||
local PlaceId = GrabbedData.GameId
|
||||
local PlaceServerId = GrabbedData.ServerId
|
||||
local PlayerCount = GrabbedData.PlayersOnline
|
||||
|
||||
if PlayerCount and PlaceId and PlaceServerId then
|
||||
if not FindPlace(PlaceId) then
|
||||
Information[PlaceId] = {}
|
||||
end
|
||||
|
||||
if PlayerCount > 0 then
|
||||
Information[PlaceId][PlaceServerId] = PlayerCount
|
||||
else
|
||||
Information[PlaceId][PlaceServerId] = nil
|
||||
end
|
||||
|
||||
Protocols.ReturnPlayerCount:FireAllClients(Information)
|
||||
end
|
||||
end)
|
||||
else
|
||||
print("Player count will not update due to the game being played in studio (and so messagingservice doesn't fill up lol)")
|
||||
end
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
--!strict
|
||||
local Players = game:GetService("Players")
|
||||
local StarterGui = game:GetService("StarterGui")
|
||||
local MarketplaceService = game:GetService("MarketplaceService")
|
||||
|
||||
--[[
|
||||
|
||||
[USERID] = {
|
||||
["BanNote"] = Note
|
||||
["TimeUntilUnban"] = 1931823198312 (if nil then never)
|
||||
}
|
||||
|
||||
]]--
|
||||
|
||||
Players.PlayerAdded:Connect(function(player: Player): ()
|
||||
local HasBadge
|
||||
local NewUI = StarterGui.MainUI:Clone()
|
||||
|
||||
player:SetAttribute("HasAdvanced", true)
|
||||
--script.AdvancedCustomizationFrame:Clone().Parent = NewUI.Content.AvatarPage.CustomizationContainer
|
||||
|
||||
--local GotBadge, FailedToGrab = pcall(function()
|
||||
-- HasBadge = MarketplaceService:UserOwnsGamePassAsync(player.UserId, 10762139)
|
||||
--end)
|
||||
|
||||
--if not FailedToGrab and HasBadge then
|
||||
--player:SetAttribute("HasAdvanced", true)
|
||||
--script.AdvancedCustomizationFrame:Clone().Parent = NewUI.Content.AvatarPage.CustomizationContainer
|
||||
--end
|
||||
|
||||
NewUI.Parent = player:FindFirstChildOfClass("PlayerGui")
|
||||
end)
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
local post = {
|
||||
["Title"] = "Profiles?! WHAT!",
|
||||
["Date"] = 1691157937,
|
||||
["HeaderImage"] = "rbxassetid://0",
|
||||
|
||||
["Content"] = [[
|
||||
It's here, finally after a whole summer of the development team procrastinating, we have at least one major thing to give out to everyone: Profiles. Yep, that's right. Profiles are finally here in FWM! You are able to view the stats of others, view the persons game (wink wink), and view their recently played.
|
||||
|
||||
Right now, you can do the following things with the profiles feature: Search a user up, view a user's avatar, message a user, view a user's statistics and bio.
|
||||
|
||||
We made this as part of a plan to expand FWM past a simple simulator with games, avatar editor, and an accurate client. We want to give users more creativity and allow for expansion within FWM.
|
||||
|
||||
I want to assure a few things that may be asked about immediately by those:
|
||||
|
||||
Q: How do I search someone up?
|
||||
A: Simply type in the person's username on the search bar on top of the "Peoples" page. The username isn't, so searching one in all lowercases works.
|
||||
|
||||
Q: I don't want someone to view my Recently Played, how can I turn it off?
|
||||
A: Well you are in luck! We get that some people don't want others stalking their every move, which is why we've introduced a "Profiles" section to the settings as well. On the Profiles section you should see a "View Recent" option, from there click to change the visibility of your recently played for others.
|
||||
|
||||
Q: Can I stop messages from coming in?
|
||||
A: Yes, that can also be found under "Messages" in the Profiles section in settings.
|
||||
|
||||
Q: Can I view a top 10 player?
|
||||
A: Yes, by clicking their name on the leaderboard.
|
||||
|
||||
This feature is pretty barebones and more will definently be coming in the future. For now, enjoy messenging. I ask that you don't just spam my messages. Hey... HEY! HEY!!!
|
||||
|
||||
- Roblox_Gamer2030
|
||||
|
||||
]]
|
||||
}
|
||||
|
||||
return post
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
while true do
|
||||
wait(0.01)
|
||||
script.Parent.CFrame = script.Parent.CFrame * CFrame.Angles(0,0,math.rad(-5))
|
||||
end
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Part",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
local brew = script.Parent.Brew
|
||||
|
||||
local function doTheBrew(humanoid, player): ()
|
||||
player.Head.Size = Vector3.new(2, 2, 2)
|
||||
player.Head.BrickColor = BrickColor.random()
|
||||
end
|
||||
|
||||
local function onTouch(otherPart: BasePart): ()
|
||||
print("touched")
|
||||
|
||||
-- see if a character touched it
|
||||
local parent = otherPart.Parent
|
||||
|
||||
if parent then
|
||||
local humanoid = parent:FindFirstChild("Humanoid", false)
|
||||
|
||||
if humanoid then
|
||||
doTheBrew(humanoid, parent)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
print(brew)
|
||||
|
||||
brew.Touched:Connect(onTouch)
|
||||
|
||||
print("Witch's Brew loaded")
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
while true do
|
||||
script.Parent.Color = Color3.new(math.random(), math.random(), math.random())
|
||||
wait(0.5)
|
||||
end
|
||||
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Part",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
while true do
|
||||
script.Parent.Color = Color3.new(math.random(), math.random(), math.random())
|
||||
wait(0.1)
|
||||
end
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Part",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Model",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,269 @@
|
|||
-- declarations
|
||||
local Players = game:GetService("Players")
|
||||
local self = Players.LocalPlayer
|
||||
local Figure = script.Parent
|
||||
local Torso = Figure:WaitForChild("Torso")
|
||||
local RightShoulder = Torso:WaitForChild("Right Shoulder")
|
||||
local LeftShoulder = Torso:WaitForChild("Left Shoulder")
|
||||
local RightHip = Torso:WaitForChild("Right Hip")
|
||||
local LeftHip = Torso:WaitForChild("Left Hip")
|
||||
local Neck = Torso:WaitForChild("Neck")
|
||||
local Humanoid = Figure:WaitForChild("Humanoid")
|
||||
|
||||
local pose = "Standing"
|
||||
local jumped = false
|
||||
|
||||
local TablePoseList = {
|
||||
-- [Enum.HumanoidStateType.FallingDown] = "FallingDown",
|
||||
-- [Enum.HumanoidStateType.Freefall] = "FreeFall",
|
||||
[Enum.HumanoidStateType.Climbing] = "Climbing",
|
||||
[Enum.HumanoidStateType.Jumping] = "Jumping",
|
||||
[Enum.HumanoidStateType.Seated] = "Seated",
|
||||
[Enum.HumanoidStateType.Dead] = "Dead",
|
||||
}
|
||||
|
||||
local params = OverlapParams.new()
|
||||
local ignore = {Figure, workspace.CurrentCamera}
|
||||
params.FilterDescendantsInstances = ignore
|
||||
params.FilterType = Enum.RaycastFilterType.Blacklist
|
||||
|
||||
local legObjects = {}
|
||||
|
||||
local toolAnim = "None"
|
||||
local toolAnimTime = 0
|
||||
|
||||
-- functions
|
||||
|
||||
local speed : number = 0
|
||||
function onRunning(spd : number)
|
||||
speed = spd
|
||||
if speed >= 0.6 or Humanoid.MoveDirection.Magnitude > 0.1 then
|
||||
pose = "Running"
|
||||
else
|
||||
pose = "Standing"
|
||||
end
|
||||
end
|
||||
|
||||
local sillyPoses = {"Jumping", "Freefall"}
|
||||
function StateChanged(old : Enum.HumanoidStateType, new : Enum.HumanoidStateType)
|
||||
if not new.Name:match("Running") then
|
||||
local poseFound = TablePoseList[new]
|
||||
|
||||
if poseFound then
|
||||
pose = poseFound
|
||||
end
|
||||
end
|
||||
|
||||
if not table.find(sillyPoses, new.Name) and jumped == true then
|
||||
jumped = false
|
||||
end
|
||||
end
|
||||
|
||||
function moveJump()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14
|
||||
LeftShoulder.DesiredAngle = -3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function moveSeated()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14/2
|
||||
LeftShoulder.DesiredAngle = -3.14/2
|
||||
RightHip.DesiredAngle = 3.14/2
|
||||
LeftHip.DesiredAngle = -3.14/2
|
||||
end
|
||||
|
||||
function moveClimb()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = -3.14
|
||||
LeftShoulder.DesiredAngle = 3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function getToolAnim(tool)
|
||||
for _, c in ipairs(tool:GetChildren()) do
|
||||
if c.Name == "toolanim" and c.className == "StringValue" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function animateTool()
|
||||
|
||||
if (toolAnim == "None" and pose ~= "Climbing") then
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
RightShoulder.MaxVelocity = 0.175/2
|
||||
-- LeftShoulder.MaxVelocity = 0.175
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Slash") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 0
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Lunge") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
LeftShoulder.MaxVelocity = 0.35/2
|
||||
RightHip.MaxVelocity = 0.35/2
|
||||
LeftHip.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
LeftShoulder.DesiredAngle = 1.0
|
||||
RightHip.DesiredAngle = 1.57
|
||||
LeftHip.DesiredAngle = 1.0
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function getTool()
|
||||
for _, v : Instance in pairs(Figure:GetChildren()) do
|
||||
if v:IsA("Tool") then
|
||||
if not v:FindFirstChild("FakeHopperbin") then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function move(time)
|
||||
local state = Humanoid:GetState().Name
|
||||
local amplitude
|
||||
local frequency
|
||||
|
||||
if pose == "Seated" or state == "Seated" then
|
||||
moveSeated()
|
||||
return
|
||||
end
|
||||
|
||||
if (pose == "FreeFall" or pose == "Jumping") and jumped == true then
|
||||
moveJump()
|
||||
return
|
||||
end
|
||||
|
||||
if pose == "Climbing" or #legObjects > 0 then
|
||||
moveClimb()
|
||||
return
|
||||
end
|
||||
|
||||
RightShoulder.MaxVelocity = 0.15/2
|
||||
LeftShoulder.MaxVelocity = 0.15/2
|
||||
if pose == "Running" then
|
||||
amplitude = 1
|
||||
frequency = 9
|
||||
else
|
||||
amplitude = 0.1
|
||||
frequency = 1
|
||||
end
|
||||
|
||||
local desiredAngle = amplitude * math.sin(time*frequency)
|
||||
|
||||
RightShoulder.DesiredAngle = desiredAngle
|
||||
LeftShoulder.DesiredAngle = desiredAngle
|
||||
RightHip.DesiredAngle = -desiredAngle
|
||||
LeftHip.DesiredAngle = -desiredAngle
|
||||
|
||||
local tool = getTool()
|
||||
|
||||
if tool then
|
||||
|
||||
local animStringValueObject = getToolAnim(tool)
|
||||
|
||||
if animStringValueObject then
|
||||
toolAnim = animStringValueObject.Value
|
||||
-- message recieved, delete StringValue
|
||||
animStringValueObject.Parent = nil
|
||||
toolAnimTime = time + .3
|
||||
end
|
||||
|
||||
if time > toolAnimTime then
|
||||
toolAnimTime = 0
|
||||
toolAnim = "None"
|
||||
end
|
||||
|
||||
--animateTool()
|
||||
|
||||
|
||||
else
|
||||
toolAnim = "None"
|
||||
toolAnimTime = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Connect events
|
||||
|
||||
Humanoid.Running:Connect(onRunning)
|
||||
Humanoid.StateChanged:Connect(StateChanged)
|
||||
|
||||
script:WaitForChild("ForcePose").Event:Connect(function(newPose : string)
|
||||
if typeof(newPose) == "string" then
|
||||
pose = newPose
|
||||
if newPose == "Jumping" then
|
||||
jumped = true
|
||||
moveJump()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Humanoid.Jumping:Connect(function(state)
|
||||
if state == true then
|
||||
jumped = true
|
||||
pose = "Jumping"
|
||||
moveJump()
|
||||
end
|
||||
end)
|
||||
|
||||
-- main program
|
||||
|
||||
local nextTime = 0
|
||||
local runService = game:GetService("RunService");
|
||||
|
||||
while Figure.Parent ~= nil do
|
||||
if script.Parent.Parent.Parent.Animations.Value == true then
|
||||
local CurrentState = Humanoid:GetState().Name
|
||||
local time = runService.Stepped:Wait()
|
||||
if time > nextTime then
|
||||
local VerticalVelocity = Torso.AssemblyLinearVelocity.Y
|
||||
local HorizontalVelocity = Torso.AssemblyLinearVelocity * Vector3.new(1, 0, 1)
|
||||
local requestMoveMagnitude = (Humanoid.MoveDirection.Magnitude > 0 and Humanoid.MoveDirection.Magnitude or CFrame.lookAt(Torso.Position * Vector3.new(1, 0, 1), Humanoid.WalkToPoint * Vector3.new(1, 0, 1)).LookVector.Magnitude)
|
||||
|
||||
if math.abs(VerticalVelocity) > 0.025 and CurrentState:match("Running") then
|
||||
local overlap = workspace:GetPartBoundsInBox((Torso.CFrame * CFrame.new(0, -1.75, 0)) * CFrame.new(Torso.AssemblyLinearVelocity.Unit * Vector3.new(1, 0, 1)), Vector3.new(2, 2, 1) / 1.5, params)
|
||||
for _, v : BasePart? in pairs(overlap) do
|
||||
if v and v.CanCollide == false then
|
||||
table.insert(ignore, v)
|
||||
params.FilterDescendantsInstances = ignore
|
||||
|
||||
table.remove(overlap, table.find(overlap, v))
|
||||
end
|
||||
end
|
||||
legObjects = overlap
|
||||
else
|
||||
table.clear(legObjects)
|
||||
if jumped == false and CurrentState ~= "Climbing" and CurrentState ~= "FallingDown" then
|
||||
onRunning(HorizontalVelocity.Magnitude * requestMoveMagnitude)
|
||||
end
|
||||
end
|
||||
|
||||
move(time)
|
||||
nextTime = time + 0.1
|
||||
end
|
||||
else
|
||||
RightShoulder.DesiredAngle = 0
|
||||
LeftShoulder.DesiredAngle = 0
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
task.wait()
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "WorldModel",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,268 @@
|
|||
-- declarations
|
||||
local Players = game:GetService("Players")
|
||||
local self = Players.LocalPlayer
|
||||
local Figure = script.Parent
|
||||
local Torso = Figure:WaitForChild("Torso")
|
||||
local RightShoulder = Torso:WaitForChild("Right Shoulder")
|
||||
local LeftShoulder = Torso:WaitForChild("Left Shoulder")
|
||||
local RightHip = Torso:WaitForChild("Right Hip")
|
||||
local LeftHip = Torso:WaitForChild("Left Hip")
|
||||
local Neck = Torso:WaitForChild("Neck")
|
||||
local Humanoid = Figure:WaitForChild("Humanoid")
|
||||
|
||||
local pose = "Standing"
|
||||
local jumped = false
|
||||
|
||||
local TablePoseList = {
|
||||
-- [Enum.HumanoidStateType.FallingDown] = "FallingDown",
|
||||
-- [Enum.HumanoidStateType.Freefall] = "FreeFall",
|
||||
[Enum.HumanoidStateType.Climbing] = "Climbing",
|
||||
[Enum.HumanoidStateType.Jumping] = "Jumping",
|
||||
[Enum.HumanoidStateType.Seated] = "Seated",
|
||||
[Enum.HumanoidStateType.Dead] = "Dead",
|
||||
}
|
||||
|
||||
local params = OverlapParams.new()
|
||||
local ignore = {Figure, workspace.CurrentCamera}
|
||||
params.FilterDescendantsInstances = ignore
|
||||
params.FilterType = Enum.RaycastFilterType.Blacklist
|
||||
|
||||
local legObjects = {}
|
||||
|
||||
local toolAnim = "None"
|
||||
local toolAnimTime = 0
|
||||
|
||||
-- functions
|
||||
|
||||
local speed : number = 0
|
||||
function onRunning(spd : number)
|
||||
speed = spd
|
||||
if speed >= 0.6 or Humanoid.MoveDirection.Magnitude > 0.1 then
|
||||
pose = "Running"
|
||||
else
|
||||
pose = "Standing"
|
||||
end
|
||||
end
|
||||
|
||||
local sillyPoses = {"Jumping", "Freefall"}
|
||||
function StateChanged(old : Enum.HumanoidStateType, new : Enum.HumanoidStateType)
|
||||
if not new.Name:match("Running") then
|
||||
local poseFound = TablePoseList[new]
|
||||
|
||||
if poseFound then
|
||||
pose = poseFound
|
||||
end
|
||||
end
|
||||
|
||||
if not table.find(sillyPoses, new.Name) and jumped == true then
|
||||
jumped = false
|
||||
end
|
||||
end
|
||||
|
||||
function moveJump()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14
|
||||
LeftShoulder.DesiredAngle = -3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function moveSeated()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14/2
|
||||
LeftShoulder.DesiredAngle = -3.14/2
|
||||
RightHip.DesiredAngle = 3.14/2
|
||||
LeftHip.DesiredAngle = -3.14/2
|
||||
end
|
||||
|
||||
function moveClimb()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = -3.14
|
||||
LeftShoulder.DesiredAngle = 3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function getToolAnim(tool)
|
||||
for _, c in ipairs(tool:GetChildren()) do
|
||||
if c.Name == "toolanim" and c.className == "StringValue" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function animateTool()
|
||||
|
||||
if (toolAnim == "None" and pose ~= "Climbing") then
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
RightShoulder.MaxVelocity = 0.175/2
|
||||
-- LeftShoulder.MaxVelocity = 0.175
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Slash") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 0
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Lunge") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
LeftShoulder.MaxVelocity = 0.35/2
|
||||
RightHip.MaxVelocity = 0.35/2
|
||||
LeftHip.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
LeftShoulder.DesiredAngle = 1.0
|
||||
RightHip.DesiredAngle = 1.57
|
||||
LeftHip.DesiredAngle = 1.0
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function getTool()
|
||||
for _, v : Instance in pairs(Figure:GetChildren()) do
|
||||
if v:IsA("Tool") then
|
||||
if not v:FindFirstChild("FakeHopperbin") then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function move(time)
|
||||
local state = Humanoid:GetState().Name
|
||||
local amplitude
|
||||
local frequency
|
||||
|
||||
if pose == "Seated" or state == "Seated" then
|
||||
moveSeated()
|
||||
return
|
||||
end
|
||||
|
||||
if (pose == "FreeFall" or pose == "Jumping") and jumped == true then
|
||||
moveJump()
|
||||
return
|
||||
end
|
||||
|
||||
if pose == "Climbing" or #legObjects > 0 then
|
||||
moveClimb()
|
||||
return
|
||||
end
|
||||
|
||||
RightShoulder.MaxVelocity = 0.15/2
|
||||
LeftShoulder.MaxVelocity = 0.15/2
|
||||
if pose == "Running" then
|
||||
amplitude = 1
|
||||
frequency = 9
|
||||
else
|
||||
amplitude = 0.1
|
||||
frequency = 1
|
||||
end
|
||||
|
||||
local desiredAngle = amplitude * math.sin(time*frequency)
|
||||
|
||||
RightShoulder.DesiredAngle = desiredAngle
|
||||
LeftShoulder.DesiredAngle = desiredAngle
|
||||
RightHip.DesiredAngle = -desiredAngle
|
||||
LeftHip.DesiredAngle = -desiredAngle
|
||||
|
||||
local tool = getTool()
|
||||
|
||||
if tool then
|
||||
|
||||
local animStringValueObject = getToolAnim(tool)
|
||||
|
||||
if animStringValueObject then
|
||||
toolAnim = animStringValueObject.Value
|
||||
-- message recieved, delete StringValue
|
||||
animStringValueObject.Parent = nil
|
||||
toolAnimTime = time + .3
|
||||
end
|
||||
|
||||
if time > toolAnimTime then
|
||||
toolAnimTime = 0
|
||||
toolAnim = "None"
|
||||
end
|
||||
|
||||
--animateTool()
|
||||
|
||||
|
||||
else
|
||||
toolAnim = "None"
|
||||
toolAnimTime = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Connect events
|
||||
|
||||
Humanoid.Running:Connect(onRunning)
|
||||
Humanoid.StateChanged:Connect(StateChanged)
|
||||
|
||||
script:WaitForChild("ForcePose").Event:Connect(function(newPose : string)
|
||||
if typeof(newPose) == "string" then
|
||||
pose = newPose
|
||||
if newPose == "Jumping" then
|
||||
jumped = true
|
||||
moveJump()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Humanoid.Jumping:Connect(function(state)
|
||||
if state == true then
|
||||
jumped = true
|
||||
pose = "Jumping"
|
||||
moveJump()
|
||||
end
|
||||
end)
|
||||
|
||||
-- main program
|
||||
|
||||
local nextTime = 0
|
||||
local runService = game:GetService("RunService");
|
||||
|
||||
while Figure.Parent ~= nil do
|
||||
if script.Parent.Parent.Animations.Value == true then
|
||||
local CurrentState = Humanoid:GetState().Name
|
||||
local time = runService.Stepped:Wait()
|
||||
if time > nextTime then
|
||||
local VerticalVelocity = Torso.AssemblyLinearVelocity.Y
|
||||
local HorizontalVelocity = Torso.AssemblyLinearVelocity * Vector3.new(1, 0, 1)
|
||||
local requestMoveMagnitude = (Humanoid.MoveDirection.Magnitude > 0 and Humanoid.MoveDirection.Magnitude or CFrame.lookAt(Torso.Position * Vector3.new(1, 0, 1), Humanoid.WalkToPoint * Vector3.new(1, 0, 1)).LookVector.Magnitude)
|
||||
|
||||
if math.abs(VerticalVelocity) > 0.025 and CurrentState:match("Running") then
|
||||
local overlap = workspace:GetPartBoundsInBox((Torso.CFrame * CFrame.new(0, -1.75, 0)) * CFrame.new(Torso.AssemblyLinearVelocity.Unit * Vector3.new(1, 0, 1)), Vector3.new(2, 2, 1) / 1.5, params)
|
||||
for _, v : BasePart? in pairs(overlap) do
|
||||
if v and v.CanCollide == false then
|
||||
table.insert(ignore, v)
|
||||
params.FilterDescendantsInstances = ignore
|
||||
|
||||
table.remove(overlap, table.find(overlap, v))
|
||||
end
|
||||
end
|
||||
legObjects = overlap
|
||||
else
|
||||
table.clear(legObjects)
|
||||
if jumped == false and CurrentState ~= "Climbing" and CurrentState ~= "FallingDown" then
|
||||
onRunning(HorizontalVelocity.Magnitude * requestMoveMagnitude)
|
||||
end
|
||||
end
|
||||
|
||||
move(time)
|
||||
nextTime = time + 0.1
|
||||
end
|
||||
else
|
||||
RightShoulder.DesiredAngle = 0
|
||||
LeftShoulder.DesiredAngle = 0
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
task.wait()
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "WorldModel",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,260 @@
|
|||
-- declarations
|
||||
local Players = game:GetService("Players")
|
||||
local self = Players.LocalPlayer
|
||||
local Figure = script.Parent
|
||||
local Torso = Figure:WaitForChild("Torso")
|
||||
local RightShoulder = Torso:WaitForChild("Right Shoulder")
|
||||
local LeftShoulder = Torso:WaitForChild("Left Shoulder")
|
||||
local RightHip = Torso:WaitForChild("Right Hip")
|
||||
local LeftHip = Torso:WaitForChild("Left Hip")
|
||||
local Neck = Torso:WaitForChild("Neck")
|
||||
local Humanoid = Figure:WaitForChild("Humanoid")
|
||||
|
||||
local pose = "Standing"
|
||||
local jumped = false
|
||||
|
||||
local TablePoseList = {
|
||||
-- [Enum.HumanoidStateType.FallingDown] = "FallingDown",
|
||||
-- [Enum.HumanoidStateType.Freefall] = "FreeFall",
|
||||
[Enum.HumanoidStateType.Climbing] = "Climbing",
|
||||
[Enum.HumanoidStateType.Jumping] = "Jumping",
|
||||
[Enum.HumanoidStateType.Seated] = "Seated",
|
||||
[Enum.HumanoidStateType.Dead] = "Dead",
|
||||
}
|
||||
|
||||
local params = OverlapParams.new()
|
||||
local ignore = {Figure, workspace.CurrentCamera}
|
||||
params.FilterDescendantsInstances = ignore
|
||||
params.FilterType = Enum.RaycastFilterType.Blacklist
|
||||
|
||||
local legObjects = {}
|
||||
|
||||
local toolAnim = "None"
|
||||
local toolAnimTime = 0
|
||||
|
||||
-- functions
|
||||
|
||||
local speed : number = 0
|
||||
function onRunning(spd : number)
|
||||
speed = spd
|
||||
if speed >= 0.6 or Humanoid.MoveDirection.Magnitude > 0.1 then
|
||||
pose = "Running"
|
||||
else
|
||||
pose = "Standing"
|
||||
end
|
||||
end
|
||||
|
||||
local sillyPoses = {"Jumping", "Freefall"}
|
||||
function StateChanged(old : Enum.HumanoidStateType, new : Enum.HumanoidStateType)
|
||||
if not new.Name:match("Running") then
|
||||
local poseFound = TablePoseList[new]
|
||||
|
||||
if poseFound then
|
||||
pose = poseFound
|
||||
end
|
||||
end
|
||||
|
||||
if not table.find(sillyPoses, new.Name) and jumped == true then
|
||||
jumped = false
|
||||
end
|
||||
end
|
||||
|
||||
function moveJump()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14
|
||||
LeftShoulder.DesiredAngle = -3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function moveSeated()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14/2
|
||||
LeftShoulder.DesiredAngle = -3.14/2
|
||||
RightHip.DesiredAngle = 3.14/2
|
||||
LeftHip.DesiredAngle = -3.14/2
|
||||
end
|
||||
|
||||
function moveClimb()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = -3.14
|
||||
LeftShoulder.DesiredAngle = 3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function getToolAnim(tool)
|
||||
for _, c in ipairs(tool:GetChildren()) do
|
||||
if c.Name == "toolanim" and c.className == "StringValue" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function animateTool()
|
||||
|
||||
if (toolAnim == "None" and pose ~= "Climbing") then
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
RightShoulder.MaxVelocity = 0.175/2
|
||||
-- LeftShoulder.MaxVelocity = 0.175
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Slash") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 0
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Lunge") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
LeftShoulder.MaxVelocity = 0.35/2
|
||||
RightHip.MaxVelocity = 0.35/2
|
||||
LeftHip.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
LeftShoulder.DesiredAngle = 1.0
|
||||
RightHip.DesiredAngle = 1.57
|
||||
LeftHip.DesiredAngle = 1.0
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function getTool()
|
||||
for _, v : Instance in pairs(Figure:GetChildren()) do
|
||||
if v:IsA("Tool") then
|
||||
if not v:FindFirstChild("FakeHopperbin") then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function move(time)
|
||||
local state = Humanoid:GetState().Name
|
||||
local amplitude
|
||||
local frequency
|
||||
|
||||
if pose == "Seated" or state == "Seated" then
|
||||
moveSeated()
|
||||
return
|
||||
end
|
||||
|
||||
if (pose == "FreeFall" or pose == "Jumping") and jumped == true then
|
||||
moveJump()
|
||||
return
|
||||
end
|
||||
|
||||
if pose == "Climbing" or #legObjects > 0 then
|
||||
moveClimb()
|
||||
return
|
||||
end
|
||||
|
||||
RightShoulder.MaxVelocity = 0.15/2
|
||||
LeftShoulder.MaxVelocity = 0.15/2
|
||||
if pose == "Running" then
|
||||
amplitude = 1
|
||||
frequency = 9
|
||||
else
|
||||
amplitude = 0.1
|
||||
frequency = 1
|
||||
end
|
||||
|
||||
local desiredAngle = amplitude * math.sin(time*frequency)
|
||||
|
||||
RightShoulder.DesiredAngle = desiredAngle
|
||||
LeftShoulder.DesiredAngle = desiredAngle
|
||||
RightHip.DesiredAngle = -desiredAngle
|
||||
LeftHip.DesiredAngle = -desiredAngle
|
||||
|
||||
local tool = getTool()
|
||||
|
||||
if tool then
|
||||
|
||||
local animStringValueObject = getToolAnim(tool)
|
||||
|
||||
if animStringValueObject then
|
||||
toolAnim = animStringValueObject.Value
|
||||
-- message recieved, delete StringValue
|
||||
animStringValueObject.Parent = nil
|
||||
toolAnimTime = time + .3
|
||||
end
|
||||
|
||||
if time > toolAnimTime then
|
||||
toolAnimTime = 0
|
||||
toolAnim = "None"
|
||||
end
|
||||
|
||||
--animateTool()
|
||||
|
||||
|
||||
else
|
||||
toolAnim = "None"
|
||||
toolAnimTime = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Connect events
|
||||
|
||||
Humanoid.Running:Connect(onRunning)
|
||||
Humanoid.StateChanged:Connect(StateChanged)
|
||||
|
||||
script:WaitForChild("ForcePose").Event:Connect(function(newPose : string)
|
||||
if typeof(newPose) == "string" then
|
||||
pose = newPose
|
||||
if newPose == "Jumping" then
|
||||
jumped = true
|
||||
moveJump()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Humanoid.Jumping:Connect(function(state)
|
||||
if state == true then
|
||||
jumped = true
|
||||
pose = "Jumping"
|
||||
moveJump()
|
||||
end
|
||||
end)
|
||||
|
||||
-- main program
|
||||
|
||||
local nextTime = 0
|
||||
local runService = game:GetService("RunService");
|
||||
|
||||
while Figure.Parent ~= nil do
|
||||
local CurrentState = Humanoid:GetState().Name
|
||||
local time = runService.Stepped:Wait()
|
||||
if time > nextTime then
|
||||
local VerticalVelocity = Torso.AssemblyLinearVelocity.Y
|
||||
local HorizontalVelocity = Torso.AssemblyLinearVelocity * Vector3.new(1, 0, 1)
|
||||
local requestMoveMagnitude = (Humanoid.MoveDirection.Magnitude > 0 and Humanoid.MoveDirection.Magnitude or CFrame.lookAt(Torso.Position * Vector3.new(1, 0, 1), Humanoid.WalkToPoint * Vector3.new(1, 0, 1)).LookVector.Magnitude)
|
||||
|
||||
if math.abs(VerticalVelocity) > 0.025 and CurrentState:match("Running") then
|
||||
local overlap = workspace:GetPartBoundsInBox((Torso.CFrame * CFrame.new(0, -1.75, 0)) * CFrame.new(Torso.AssemblyLinearVelocity.Unit * Vector3.new(1, 0, 1)), Vector3.new(2, 2, 1) / 1.5, params)
|
||||
for _, v : BasePart? in pairs(overlap) do
|
||||
if v and v.CanCollide == false then
|
||||
table.insert(ignore, v)
|
||||
params.FilterDescendantsInstances = ignore
|
||||
|
||||
table.remove(overlap, table.find(overlap, v))
|
||||
end
|
||||
end
|
||||
legObjects = overlap
|
||||
else
|
||||
table.clear(legObjects)
|
||||
if jumped == false and CurrentState ~= "Climbing" and CurrentState ~= "FallingDown" then
|
||||
onRunning(HorizontalVelocity.Magnitude * requestMoveMagnitude)
|
||||
end
|
||||
end
|
||||
|
||||
move(time)
|
||||
nextTime = time + 0.1
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "WorldModel",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ScrollingFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,260 @@
|
|||
-- declarations
|
||||
local Players = game:GetService("Players")
|
||||
local self = Players.LocalPlayer
|
||||
local Figure = script.Parent
|
||||
local Torso = Figure:WaitForChild("Torso")
|
||||
local RightShoulder = Torso:WaitForChild("Right Shoulder")
|
||||
local LeftShoulder = Torso:WaitForChild("Left Shoulder")
|
||||
local RightHip = Torso:WaitForChild("Right Hip")
|
||||
local LeftHip = Torso:WaitForChild("Left Hip")
|
||||
local Neck = Torso:WaitForChild("Neck")
|
||||
local Humanoid = Figure:WaitForChild("Humanoid")
|
||||
|
||||
local pose = "Standing"
|
||||
local jumped = false
|
||||
|
||||
local TablePoseList = {
|
||||
-- [Enum.HumanoidStateType.FallingDown] = "FallingDown",
|
||||
-- [Enum.HumanoidStateType.Freefall] = "FreeFall",
|
||||
[Enum.HumanoidStateType.Climbing] = "Climbing",
|
||||
[Enum.HumanoidStateType.Jumping] = "Jumping",
|
||||
[Enum.HumanoidStateType.Seated] = "Seated",
|
||||
[Enum.HumanoidStateType.Dead] = "Dead",
|
||||
}
|
||||
|
||||
local params = OverlapParams.new()
|
||||
local ignore = {Figure, workspace.CurrentCamera}
|
||||
params.FilterDescendantsInstances = ignore
|
||||
params.FilterType = Enum.RaycastFilterType.Blacklist
|
||||
|
||||
local legObjects = {}
|
||||
|
||||
local toolAnim = "None"
|
||||
local toolAnimTime = 0
|
||||
|
||||
-- functions
|
||||
|
||||
local speed : number = 0
|
||||
function onRunning(spd : number)
|
||||
speed = spd
|
||||
if speed >= 0.6 or Humanoid.MoveDirection.Magnitude > 0.1 then
|
||||
pose = "Running"
|
||||
else
|
||||
pose = "Standing"
|
||||
end
|
||||
end
|
||||
|
||||
local sillyPoses = {"Jumping", "Freefall"}
|
||||
function StateChanged(old : Enum.HumanoidStateType, new : Enum.HumanoidStateType)
|
||||
if not new.Name:match("Running") then
|
||||
local poseFound = TablePoseList[new]
|
||||
|
||||
if poseFound then
|
||||
pose = poseFound
|
||||
end
|
||||
end
|
||||
|
||||
if not table.find(sillyPoses, new.Name) and jumped == true then
|
||||
jumped = false
|
||||
end
|
||||
end
|
||||
|
||||
function moveJump()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14
|
||||
LeftShoulder.DesiredAngle = -3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function moveSeated()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = 3.14/2
|
||||
LeftShoulder.DesiredAngle = -3.14/2
|
||||
RightHip.DesiredAngle = 3.14/2
|
||||
LeftHip.DesiredAngle = -3.14/2
|
||||
end
|
||||
|
||||
function moveClimb()
|
||||
RightShoulder.MaxVelocity = 0.5/2
|
||||
LeftShoulder.MaxVelocity = 0.5/2
|
||||
RightShoulder.DesiredAngle = -3.14
|
||||
LeftShoulder.DesiredAngle = 3.14
|
||||
RightHip.DesiredAngle = 0
|
||||
LeftHip.DesiredAngle = 0
|
||||
end
|
||||
|
||||
function getToolAnim(tool)
|
||||
for _, c in ipairs(tool:GetChildren()) do
|
||||
if c.Name == "toolanim" and c.className == "StringValue" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function animateTool()
|
||||
|
||||
if (toolAnim == "None" and pose ~= "Climbing") then
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
RightShoulder.MaxVelocity = 0.175/2
|
||||
-- LeftShoulder.MaxVelocity = 0.175
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Slash") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 0
|
||||
return
|
||||
end
|
||||
|
||||
if (toolAnim == "Lunge") then
|
||||
RightShoulder.MaxVelocity = 0.35/2
|
||||
LeftShoulder.MaxVelocity = 0.35/2
|
||||
RightHip.MaxVelocity = 0.35/2
|
||||
LeftHip.MaxVelocity = 0.35/2
|
||||
RightShoulder.DesiredAngle = 1.57
|
||||
LeftShoulder.DesiredAngle = 1.0
|
||||
RightHip.DesiredAngle = 1.57
|
||||
LeftHip.DesiredAngle = 1.0
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function getTool()
|
||||
for _, v : Instance in pairs(Figure:GetChildren()) do
|
||||
if v:IsA("Tool") then
|
||||
if not v:FindFirstChild("FakeHopperbin") then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function move(time)
|
||||
local state = Humanoid:GetState().Name
|
||||
local amplitude
|
||||
local frequency
|
||||
|
||||
if pose == "Seated" or state == "Seated" then
|
||||
moveSeated()
|
||||
return
|
||||
end
|
||||
|
||||
if (pose == "FreeFall" or pose == "Jumping") and jumped == true then
|
||||
moveJump()
|
||||
return
|
||||
end
|
||||
|
||||
if pose == "Climbing" or #legObjects > 0 then
|
||||
moveClimb()
|
||||
return
|
||||
end
|
||||
|
||||
RightShoulder.MaxVelocity = 0.15/2
|
||||
LeftShoulder.MaxVelocity = 0.15/2
|
||||
if pose == "Running" then
|
||||
amplitude = 1
|
||||
frequency = 9
|
||||
else
|
||||
amplitude = 0.1
|
||||
frequency = 1
|
||||
end
|
||||
|
||||
local desiredAngle = amplitude * math.sin(time*frequency)
|
||||
|
||||
RightShoulder.DesiredAngle = desiredAngle
|
||||
LeftShoulder.DesiredAngle = desiredAngle
|
||||
RightHip.DesiredAngle = -desiredAngle
|
||||
LeftHip.DesiredAngle = -desiredAngle
|
||||
|
||||
local tool = getTool()
|
||||
|
||||
if tool then
|
||||
|
||||
local animStringValueObject = getToolAnim(tool)
|
||||
|
||||
if animStringValueObject then
|
||||
toolAnim = animStringValueObject.Value
|
||||
-- message recieved, delete StringValue
|
||||
animStringValueObject.Parent = nil
|
||||
toolAnimTime = time + .3
|
||||
end
|
||||
|
||||
if time > toolAnimTime then
|
||||
toolAnimTime = 0
|
||||
toolAnim = "None"
|
||||
end
|
||||
|
||||
--animateTool()
|
||||
|
||||
|
||||
else
|
||||
toolAnim = "None"
|
||||
toolAnimTime = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Connect events
|
||||
|
||||
Humanoid.Running:Connect(onRunning)
|
||||
Humanoid.StateChanged:Connect(StateChanged)
|
||||
|
||||
script:WaitForChild("ForcePose").Event:Connect(function(newPose : string)
|
||||
if typeof(newPose) == "string" then
|
||||
pose = newPose
|
||||
if newPose == "Jumping" then
|
||||
jumped = true
|
||||
moveJump()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Humanoid.Jumping:Connect(function(state)
|
||||
if state == true then
|
||||
jumped = true
|
||||
pose = "Jumping"
|
||||
moveJump()
|
||||
end
|
||||
end)
|
||||
|
||||
-- main program
|
||||
|
||||
local nextTime = 0
|
||||
local runService = game:GetService("RunService");
|
||||
|
||||
while Figure.Parent ~= nil do
|
||||
local CurrentState = Humanoid:GetState().Name
|
||||
local time = runService.Stepped:Wait()
|
||||
if time > nextTime then
|
||||
local VerticalVelocity = Torso.AssemblyLinearVelocity.Y
|
||||
local HorizontalVelocity = Torso.AssemblyLinearVelocity * Vector3.new(1, 0, 1)
|
||||
local requestMoveMagnitude = (Humanoid.MoveDirection.Magnitude > 0 and Humanoid.MoveDirection.Magnitude or CFrame.lookAt(Torso.Position * Vector3.new(1, 0, 1), Humanoid.WalkToPoint * Vector3.new(1, 0, 1)).LookVector.Magnitude)
|
||||
|
||||
if math.abs(VerticalVelocity) > 0.025 and CurrentState:match("Running") then
|
||||
local overlap = workspace:GetPartBoundsInBox((Torso.CFrame * CFrame.new(0, -1.75, 0)) * CFrame.new(Torso.AssemblyLinearVelocity.Unit * Vector3.new(1, 0, 1)), Vector3.new(2, 2, 1) / 1.5, params)
|
||||
for _, v : BasePart? in pairs(overlap) do
|
||||
if v and v.CanCollide == false then
|
||||
table.insert(ignore, v)
|
||||
params.FilterDescendantsInstances = ignore
|
||||
|
||||
table.remove(overlap, table.find(overlap, v))
|
||||
end
|
||||
end
|
||||
legObjects = overlap
|
||||
else
|
||||
table.clear(legObjects)
|
||||
if jumped == false and CurrentState ~= "Climbing" and CurrentState ~= "FallingDown" then
|
||||
onRunning(HorizontalVelocity.Magnitude * requestMoveMagnitude)
|
||||
end
|
||||
end
|
||||
|
||||
move(time)
|
||||
nextTime = time + 0.1
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "WorldModel",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "ViewportFrame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
--!strict
|
||||
|
||||
local TeleportService : TeleportService = game:GetService("TeleportService")
|
||||
local ReplicatedStorage : ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local Protocols : Instance = ReplicatedStorage:WaitForChild("Protocols")
|
||||
local TeleportPlayer : Instance = Protocols:WaitForChild("TeleportPlayer")
|
||||
|
||||
|
||||
local function Clicked(): ()
|
||||
local Container = script.Parent.Parent.Parent
|
||||
local GameID = Container.GameId
|
||||
|
||||
if TeleportPlayer:IsA("RemoteEvent") then
|
||||
TeleportPlayer:FireServer(GameID.Value, Container.GameName.Text, "play")
|
||||
end
|
||||
end
|
||||
|
||||
script.Parent.MouseButton1Click:Connect(Clicked)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "TextButton",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
--!strict
|
||||
|
||||
local TeleportService : TeleportService = game:GetService("TeleportService")
|
||||
local ReplicatedStorage : ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local Protocols : Instance = ReplicatedStorage:WaitForChild("Protocols")
|
||||
local TeleportPlayer : Instance = Protocols:WaitForChild("TeleportPlayer")
|
||||
|
||||
|
||||
local function Clicked(): ()
|
||||
local Container = script.Parent.Parent.Parent
|
||||
local GameID = Container.GameId
|
||||
|
||||
if TeleportPlayer:IsA("RemoteEvent") then
|
||||
TeleportPlayer:FireServer(GameID.Value, Container.GameName.Text, "solo")
|
||||
end
|
||||
end
|
||||
|
||||
script.Parent.MouseButton1Click:Connect(Clicked)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "TextButton",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"className": "Frame",
|
||||
"ignoreUnknownInstances": true
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue