RbxStatus: Difference between revisions
From Legacy Roblox Wiki
Jump to navigationJump to search
>Quenty Created page with "== Source Code == This Library is to be used on the Humanoid. How interesting. Looks like we can look forward to Armour, Poison, Corruption, and more. Source as of 12/24/11...." |
>Quenty Created page with "== Source Code == This Library is to be used on the Humanoid. How interesting. Looks like we can look forward to Armour, Poison, Corruption, and more. Source as of 12/24/11...." |
(No difference)
|
Revision as of 07:28, 24 December 2011
Source Code
This Library is to be used on the Humanoid. How interesting. Looks like we can look forward to Armour, Poison, Corruption, and more. Source as of 12/24/11.
%Nprav7OW5o1Nj1uqtUUxu/a8ERD8NqyaFPLd/ZvlDnQKDjHjAds+yMpGLRAfNeIWGvutHF7pCeSh42P1C1qbWXpehUTtUiOMfliS3EW2XCAqiYMFjfQtBfa814T/2DSyKIi9EI94omykFTyfoSm85w7M7FesZ0BZQerTPH/kf5w=%%52177566%<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4"> <External>null</External> <External>nil</External> <Item class="Script" referent="RBX0"> <Properties> <bool name="Disabled">true</bool> <Content name="LinkedSource"><null></null></Content> <string name="Name">RBXStatusScript</string> <ProtectedString name="Source">-- Global Status Buff Script -- -- This will be a part of a humanoid -- Everytime a humanoid gets hit, this script will be invoked -- If the damage is from a previous older gear we just query the takeDamage C++ function -- If its from some of the newer ones with status buffs, we look them up in our table and use that to determine what we need to do -- [[ The status debuffs currently are -- OVER TIME EFFECTS -- Poison -- Fire -- Ice, also slows -- Heal -- Plague -- For fire, ice etc we could apply the texture to nearby parts to showcase as if its spreading -- INSTANT EFFECTS -- Stun, 10-20% chance to stun -- Confusion -- Invisibilty, there will be fading in and fading out -- Silence, can't use gears -- Blind/Miss -- TODO, AOE EFFECTS (these will propagate from the wielder) ]] local t = {} function waitForChild(instance, name) while not instance:FindFirstChild(name) do instance.ChildAdded:wait() end end local damageGuiWidth = 5.0 local damageGuiHeight = 5.0 local myPlayer = script.Parent local myName = script.Parent.Name local myHumanoid = myPlayer:FindFirstChild("Humanoid") local charConfig = nil -- gear effects local poison = 0 local physical = 0 local heal = 0 local regen = 0 local piercing = 0 local poisonTime = 10 -- duration of a poisoning (default 10) local corruption = 0 -- amount poison worsens local iceDOT = 0 local iceDuration = 0 local iceSlow = 0 local stunDuration = 0 -- armor/character effects [will be reloaded upon characters config folder changing] local existingIceDuration = 0 local fireDOT = 0 local fireDuration = 0 local existingFireDuration = 0 local armor = 0 local poisonArmor = 0 local existingPoison = 0 local existingCorruption = 0 local existingStunDuration = 0 -- Create Lookup Tables local charPropType = { ["Armor"] = function(x) print("ARMOR ", x) armor = x end, ["Poison Resistance"] = function(x) print("POISON RESISTANCE ", x) poisonArmor = x end, ["Poison"] = function(x) existingPoison = x.X existingCorruption = x.Z end, ["Ice"] = function(x) existingIceDuration = x.Y end, ["Fire"] = function(x) existingFireDuration = x.Y end, ["Stun"] = function(x) -- Tentative value, usually we should allow to override stun duration and have a long cool down or a chance effect existingStunDuration = x end } -- Damage Type Table local damageType = { ["Damage"] = function(x) --print("DAMAGE ", x) physical = x end, ["Poison"] = function(x) print("POISONED", x) poison = x --poisonTime = x.Y --corruption = x.Z end, ["Heal"] = function(x) print("HEALED", x) heal = x end, ["Regen"] = function(x) print("REGEN", x) regen = x end, ["Piercing"] = function(x) print("PIERCING", x) piercing = x end, ["Poison Time"] = function(x) print("POISON TIME", x) poisonTime = x end, ["Corruption"] = function(x) print("CORRUPTION", x) corruption = x end, -- Code Change Feb 25th ["Ice"] = function(x) --print("Ice") iceDOT = x.X iceDuration = x.Y iceSlow = x.Z end, ["Fire"] = function(x) fireDOT = x.X fireDuration = x.Y end, ["Stun"] = function(x) stunDuration = x end -- } function updateCharProperties() -- reset all char properties first to 0 armor = 0 poisonArmor = 0 existingPoison = 0 existingCorruption = 0 --iceDOT = 0 --iceDuration = 0 --iceSlow = 0 --print("Updating Char Properties") charProperties = charConfig:GetChildren() --print(iceDOT," ", iceDuration," ", iceSlow) for i = 1, #charProperties do if charPropType[charProperties[i].Name] then -- can get rid of this check to improve speed at cost of safety charPropType[charProperties[i].Name](charProperties[i].Value) end end end function applyRandomizationTo(property) if (math.random() > property.Y) then return property.X else return property.Z end end function eval(property) if type(property) == "number" then return property else return applyRandomizationTo(property) end end t.ComputeStatusEffects = function (gearConfig) -- all gear effects need to be set to 0 initially poison = 0 physical = 0 heal = 0 --iceDOT = 0 iceDuration = 0 --iceSlow = 0 regen = 0 piercing = 0 poisonTime = 10 -- default is to poison someone for 10 seconds gearProperties = gearConfig:GetChildren() for i = 1, #gearProperties do if not (gearProperties[i].Name == "Damage") then damageType[gearProperties[i].Name](gearProperties[i].Value) print(gearProperties[i].Name) else damageType[gearProperties[i].Name](eval(gearProperties[i].Value)) end end -- apply randomization to armors that need it -- (doing this here [with eval] allows us to change armor variables only when necessary) --print(physical) --print(armor) --poi = math.max(existingPoison, math.max(poison - eval(poisonArmor), 0)) dmg = math.max(physical - math.max(eval(armor) - piercing, 0), 0) - heal poi = math.max(poison - eval(poisonArmor), 0) cor = math.max(existingCorruption, corruption) -- Feb 25th Change iceDamage = iceDOT -- --print("Overall Damage: ", dmg) --print("Overall Poison: ", poi) -- Feb 25th Change --print("Overall Ice Damage: ", iceDamage) -- -- Populate the tags in the Players Config! myHumanoid:takeDamage(dmg) print(myHumanoid.Health) if charConfig ~= nil then --if poi > 0 then -- if poison damage taken, make sure we give 'em a poisoned status if poi > 0 and poi >= existingPoison then -- must at least tie previous poison strength to change the poison tag poisonTag = charConfig:FindFirstChild("Poison") if poisonTag == nil then poisonTag = Instance.new("Vector3Value") poisonTag.Name = "Poison" poisonTag.Parent = charConfig end poisonTag.Value = Vector3.new(poi, poisonTime, cor) end -- Feb 25th Change if iceDuration > 0 and existingIceDuration <= 0 then iceTag = charConfig:FindFirstChild("Ice") if iceTag == nil then iceTag = Instance.new("Vector3Value") iceTag.Name = "Ice" iceTag.Parent = charConfig end iceTag.Value = Vector3.new(iceDOT, iceDuration, iceSlow) end print(fireDuration, existingFireDuration) if fireDuration > 0 and existingFireDuration <= 0 then fireTag = charConfig:FindFirstChild("Fire") if fireTag == nil then fireTag = Instance.new("Vector3Value") fireTag.Name = "Fire" fireTag.Parent = charConfig end fireTag.Value = Vector3.new(fireDOT, fireDuration, 0.0) end if stunDuration > 0 and existingStunDuration <= 0 then stunTag = charConfig:FindFirstChild("Stun") if stunTag == nil then stunTag = Instance.new("NumberValue") stunTag.Name = "Stun" stunTag.Parent = charConfig end stunTag.Value = stunDuration end end vPlayer = game.Players:GetPlayerFromCharacter(script.Parent) if vPlayer then dmgGui = vPlayer.PlayerGui:FindFirstChild("DamageGui") if dmgGui ~= nil then dmgChildren = dmgGui:GetChildren() for i = 1, #dmgChildren do if dmgChildren[i].TextTransparency < .35 then dmgChildren[i].Text = tostring(tonumber(dmgChildren[i].Text) + dmg) return end end end local guiCoRoutine = coroutine.create(statusGui) coroutine.resume(guiCoRoutine, vPlayer, dmg, poi) print("CREATING GUI") end end -- GUI STUFF -- function statusGui(vPlayer, guiDmg, guiPoi) local damageGui = vPlayer.PlayerGui:FindFirstChild("DamageGui") if damageGui == nil then damageGui = Instance.new("BillboardGui") damageGui.Name = "DamageGui" print("BB GUI CREATED") damageGui.Parent = vPlayer.PlayerGui damageGui.Adornee = script.Parent:FindFirstChild("Head") damageGui.Active = true damageGui.size = UDim2.new(damageGuiWidth, 0.0, damageGuiHeight, 0.0) damageGui.StudsOffset = Vector3.new(0.0, 2.0, 0.0) end local textLabel = Instance.new("TextLabel") print("TEXT LABEL CREATED") textLabel.Text = tostring(guiDmg) textLabel.size = UDim2.new(1.0, 0.0, 1.0, 0.0) textLabel.Active = true textLabel.FontSize = 6 textLabel.BackgroundTransparency = 1 textLabel.TextColor3 = Color3.new(1, 0, 0) textLabel.Parent = damageGui for t = 1, 10 do wait(.1) textLabel.TextTransparency = t/10 textLabel.Position = UDim2.new(0, 0, 0, -t*5) textLabel.FontSize = 6-t*.6 end textLabel:remove() end return t -- Hook-up stuff to listeners here and do any other initialization --[[while true do waitForChild(script.Parent, "PlayerStats") charConfig = script.Parent:FindFirstChild("PlayerStats") if charConfig then updateCharProperties() charConfig.Changed:connect(updateCharProperties) charConfig.ChildAdded:connect(function (newChild) newChild.Changed:connect(updateCharProperties) updateCharProperties() end) --charConfig.Desc break end end]] </ProtectedString> <bool name="archivable">true</bool> </Properties> </Item> </roblox>