John Smith Posted June 1, 2018 Share Posted June 1, 2018 Hello there. I am John Smith, also known as ZoeN. Today, I am here to offer my scripting services. Will they cost money? Yes. How much? I'll talk about it soon in this topic.Some info about me: I am an 18 year old guy from Croatia who has a particular interest in scripting on Multi Theft Auto. I've firstly started off back in 2014, going from simple Hello World scripts, to what I am today. A fully experienced MTA scripter with lots of experience and knowledge on how to do scripts, ranging from smaller projects to even bigger projects such as whole gamemodes and multigamemodes.What can I do? Basically anything. I've already done lots of resources. Examples would be: Custom Race Gamemode Custom Freeroam Gamemode Custom Downloader (both for Freeroam and DM-like gamemodes) Map Loader Script Loader Multigamemode Login Panel Punishment System Userpanel and many more which I haven't mentioned while I favour working on developing new gamemodes, let's be realistic that most customers won't come to me for that; the center of my service are custom requests, which means you can ask me to script (or fix) anything you'd like, after which I will consider it and tell you if it's possible, and if so, suggest a price that can be further negotiated. I will start development, and you can test it out on my testserver before paying, so you can confirm it's in good working state and nothing from your requested features is missing. After the resource/code is sent, there'll be extended support for bugs that may appear after delivery, as I am pretty confident of my code's quality. How much do I charge? It really depends on lot of factors, such as complexity, time needed to do the job, and what you're asking me to do. For instance, smaller scripts would be in range of something like 5-10€, whilebigger scripts would be in range of 10-30€, depending on their complexity. Finally, complete gamemodes (written from scratch) would be charged somewhat in this terms: Small Gamemodes -- 50€ Big Gamemodes -- 100€+ (for big gamemodes, that is a minimum price, however it may change to a higher one depending on what you're requesting, also based on complexity and time needed to complete the gamemode) Why are complete gamemodes so expensive? Well, because especially gamemodes takes some time, if not even a long time. Then, there's also the fact that the scripts which I'm creating are profesionally written and optimized, they're not amateur. Think of it as getting a tattoo on your body. You'd want the tattoo to be good and to still be fine even after years have passed right? You certainly don't want your tattoo to be made by an amateur and to have your tattoo fade away under 6 months.Any examples of my work? To be honest here, I haven't really made any public resources as I've always preferred to create private scripts (usually for my server(s)). I just have 1 public resource out there; https://community.multitheftauto.com/index.php?p=resources&s=details&id=14725 To give you a sense of my code, let me quickly share the core of that resource (open spoiler); Spoiler -- -- This script also re-integrates the healthbar (MTA hardcoded to custom one) but with the same looks, cannot be noticed it's a new one. This is needed to overcome technical limitations. -- Nametag Settings -- local Nametags = { showing = false; -- don't touch this, it's already auto-enabled with onClientResourceStart (but if you change that you'll need to edit this variable) font = "default-bold"; -- nametag font shadow = true; -- whether or not to make shadow of nametag's text (so that it can be seen in any environment) showHealthbar = true; -- whether or not to show health bar and armor bar hpBarWidth = 122; -- Max health bar width (132 because i think max nick length is 22 and dxGetTextWidth returns around 132 for that length) hpBarHeight = 13; -- Health bar height scale = 1; -- Font scale shadowRecThickness = 6; -- Thickness of shadow around healthbar maxDistance = 10; -- Distance at which nametag starts to fade out adaptToTeam = true; -- Should player's nametag color be changed to team's if player has a team? }; function Player:GetNick() -- returns hexless nick return self:getName():gsub("#%x%x%x%x%x%x", ""); end function getPedMaxHealth(ped) -- Output an error and stop executing the function if the argument is not valid assert(isElement(ped) and (getElementType(ped) == "ped" or getElementType(ped) == "player"), "Bad argument @ 'getPedMaxHealth' [Expected ped/player at argument 1, got " .. tostring(ped) .. "]") -- Grab his player health stat. local stat = getPedStat(ped, 24) -- Do a linear interpolation to get how many health a ped can have. -- Assumes: 100 health = 569 stat, 200 health = 1000 stat. local maxhealth = 100 + (stat - 569) / 4.31 -- Return the max health. Make sure it can't be below 1 return math.max(1, maxhealth) end function dxDrawEmptyRectangle(startX, startY, endX, endY, color, width, postGUI) dxDrawLine ( startX, startY, startX+endX, startY, color, width, postGUI ) dxDrawLine ( startX, startY, startX, startY+endY, color, width, postGUI ) dxDrawLine ( startX, startY+endY, startX+endX, startY+endY, color, width, postGUI ) dxDrawLine ( startX+endX, startY, startX+endX, startY+endY, color, width, postGUI ) end function IsColorcode(s) local n = s:gsub("#%x%x%x%x%x%x", ""); if (#n) < (#s) then return true else return false end; end function Nametags.render() local bIgnoreDistance = false; local people = {}; -- Check if we're aiming at someone, if yes, force the nametag to be shown if localPlayer:getTargetStart() and localPlayer:getTargetEnd() and getKeyState("mouse2") then local sx, sy, sz = getPedTargetStart(localPlayer); local ex, ey, ez = getPedTargetEnd(localPlayer); bIgnoreDistance, _, _, _, hitElement = processLineOfSight(sx, sy, sz, ex, ey, ez, false, true, true, false, false, true, false, true, localPlayer, false, false); -- Check if it's a player or is it a vehicle with players if hitElement then if hitElement:getType() == "player" then people[hitElement] = true; elseif hitElement:getType() == "vehicle" then -- get passengers if there are any for _, v in pairs(getVehicleOccupants(hitElement)) do people[v] = true; end end end end for i, player in pairs(getElementsByType("player", nil, true)) do local x, y, z = getPedBonePosition(player, 2); local mx, my, mz = getCameraMatrix(); local distance = getDistanceBetweenPoints3D(mx, my, mz, x, y, z); if player ~= localPlayer and ( distance <= 50 or people[player] == true) then if isLineOfSightClear( mx, my, mz, x, y, z, true, false, false, true, false, false, false, localPlayer ) then local additional_z = .20; local X, Y = getScreenFromWorldPosition(x, y, z + additional_z); if X and Y then local text = Nametags.shadow and player:GetNick() or player:getName(); local texto = player:getName(); local r, g, b; local alpha = 175; local font = IsColorcode(texto) and "default-bold" or "default"; -- Check for team if player:getTeam() and Nametags.adaptToTeam then r, g, b = player:getTeam():getColor(); else r, g, b = player:getNametagColor(); end -- Should we fade out? -- if distance >= Nametags.maxDistance and not bIgnoreDistance then local leftover = distance - Nametags.maxDistance; alpha = math.max(0, alpha - distance * (leftover/5)); end -- Draw player text -- dxDrawText(text, X - dxGetTextWidth(text, Nametags.scale, font), Y, X + dxGetTextWidth(text, Nametags.scale, font), Y, Nametags.shadow and tocolor(0, 0, 0, alpha) or tocolor(r, g, b, alpha), Nametags.scale, font, "center", "top", false, false, false, Nametags.shadow and false or true); if Nametags.shadow then dxDrawText(texto, X - dxGetTextWidth(texto, Nametags.scale, font) - 1, Y - 1, X + dxGetTextWidth(texto, Nametags.scale, font) - 1, Y - 1, tocolor(r, g, b, alpha), Nametags.scale, font, "center", "top", false, false, false, true); end -- Draw healthbar -- if Nametags.showHealthbar then local fontHeight = dxGetFontHeight(Nametags.scale, font); local distanceScaling = distance * 1.5; local alpha2 = alpha - 150; local alphaDivider = 255 / 150; -- Alpha fix -- if alpha2 < 10 then alpha2 = 0 end -- If we are aiming from distance longer than fade distance then dont scale the rectangles -- if (bIgnoreDistance and distance > Nametags.maxDistance) or (distance > Nametags.maxDistance + (distance - Nametags.maxDistance)) then distanceScaling = 0; distance = 0; end local multiplier = Nametags.hpBarWidth / getPedMaxHealth(player); local middleDistanceScale = ( (X - Nametags.hpBarWidth / 2 + distanceScaling / 2 ) - (X - Nametags.hpBarWidth / 2) ) / 2; local colorMultiplier = 255 / getPedMaxHealth(player); local armor = player:getArmor(); local divider = (10-(player:getHealth()/getPedMaxHealth(player))*8); local recX = X - Nametags.hpBarWidth / 2 + middleDistanceScale; local recY = Y + fontHeight + Nametags.shadowRecThickness * 2 - distanceScaling / 10; local recWidth = math.max(player:getHealth() * multiplier - distanceScaling / divider, 1); -- distanceScaling / 10 makes it so low health doesnt 'decrease' when you get far away from player but it causes issue of full health getting out of healtbar, and distanceScaling / 2 makes it at full health to stay inside but on small health when you go away from player it looks like his health is lowering local recHeight = Nametags.hpBarHeight - distanceScaling / 20; -- Dead issue fix -- if player:getHealth() == 0 then recWidth = 0; end -- Fix when player has 200hp eventho his max is 100, and fixes other impossible cases, this is actually more of a safeguard that health bar never gets out of its 'prison' if recWidth > Nametags.hpBarWidth then recWidth = Nametags.hpBarWidth - Nametags.shadowRecThickness; end dxDrawRectangle(recX - Nametags.shadowRecThickness, recY - Nametags.shadowRecThickness, Nametags.hpBarWidth + Nametags.shadowRecThickness * 2 - distanceScaling / 2, recHeight + Nametags.shadowRecThickness * 2, armor > 0 and tocolor(120, 120, 120, alpha) or tocolor(0, 0, 0, alpha)); dxDrawRectangle(recX, recY, Nametags.hpBarWidth - distanceScaling / 2, recHeight, tocolor(0, 0, 0, alpha)); dxDrawRectangle(recX, recY, Nametags.hpBarWidth - distanceScaling / 2, recHeight, tocolor(math.max(255 - player:getHealth() * colorMultiplier, 0), math.max(0 + player:getHealth() * colorMultiplier, 0), 0, alpha2)); dxDrawRectangle(recX, recY, recWidth, recHeight, tocolor(math.max(255 - player:getHealth() * colorMultiplier, 0), math.max(0 + player:getHealth() * colorMultiplier, 0), 0, alpha)); end end end end end end function Nametags:isShowing() return Nametags.showing; end function Nametags:setShowing(bShowing) if bShowing then if not Nametags:isShowing() then addEventHandler("onClientRender", root, Nametags.render); Nametags.showing = true; end else if Nametags:isShowing() then removeEventHandler("onClientRender", root, Nametags.render); Nametags.showing = false; end end end addEventHandler("onClientResourceStart", resourceRoot, function() -- Disable nametags for everyone -- for _, player in pairs(getElementsByType("player")) do player:setNametagShowing(false); end Nametags:setShowing(true); end ); addEventHandler("onClientPlayerJoin", root, function() source:setNametagShowing(false); end ); However, I did make a video about one project of mine, 3 years ago. You may also notice that there's a Level System and HUD, both developed by me, also 3 years ago. I was pretty good at scripting even back then, but at the current moment, I'm a beast How can you contact me? Discord: ZoeN#4774 Private Message on this Forum Thank you for reading. If you have any questions regarding me and/or my services, contact me, and I'll reply to you as soon as I can. - John Smith (aka ZoeN) 3 Link to comment
xeon17 Posted June 8, 2018 Share Posted June 8, 2018 Totally recommended, this guy is nice 1 Link to comment
John Smith Posted June 9, 2018 Author Share Posted June 9, 2018 Uh, I couldn't find an edit button for my topic so I'll have to mention it here; I've changed my Discord username to ZoeN#4774 so if you're going to contact me over Discord, use this name instead. Link to comment
Unknown-Guy Posted June 10, 2018 Share Posted June 10, 2018 Well, if you got RPG scripts then you can message me. Link to comment
John Smith Posted December 5, 2019 Author Share Posted December 5, 2019 Hi there! Since this topic was created, I've done a good amount of jobs here and there but after a few months Iwent inactive. With this new message I want to announce that I am back and that if you need scripting services that I can provide them! Feel free to contact me on Discord (ZoeN#4774) or PM me here :) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now