Maintenance for the week of December 16:
• PC/Mac: No maintenance – December 16
• NA megaservers for patch maintenance – December 17, 4:00AM EST (9:00 UTC) - 12:00PM EST (17:00 UTC)
• EU megaservers for patch maintenance – December 17, 9:00 UTC (4:00AM EST) - 17:00 UTC (12:00PM EST)

The amount of bugs made the game literally unplayable.

Kneighbors
Kneighbors
✭✭✭✭✭
Why do they continue to stack them? Why don't they like to invest some a week, a month, a 6 month into fixing the game?

Every patch brings tons of new bugs and fixes several.

Why just not stop with new content and start fixing the game? Seriously, I like to play ESO, I want to play it nonstop 10 hours in a row like before but I simply can't.

I think the community has to start to show some muscle. Like canceling sub together in a wave for a month or two. This is the only thing ZoS currently understand, money talk.
  • apostate9
    apostate9
    ✭✭✭✭✭
    Literally? Like...nobody can play ESO now?
  • Epona222
    Epona222
    ✭✭✭✭✭
    ✭✭✭✭
    Oh wow, I was in game a couple of minutes ago, what happened to make it literally unplayable?
    GM - Ghost Sea Trading Co - NA PC

    Epona was a Romano-Celtic goddess dating back to around 1800 to 2000 years before computer games were invented.
  • theamazingx
    theamazingx
    ✭✭✭✭
    U
    N
    P
    L I T E R A L L Y
    A
    Y
    A
    B
    L
    E
  • Kneighbors
    Kneighbors
    ✭✭✭✭✭
    Continue to beta test it guys and pay money while I'll take a break with my new rig and tons of other AAA games I missed. Thank you in advance.
  • BlackSparrow
    BlackSparrow
    ✭✭✭✭✭
    I've personally encountered no new bugs with this release, other than the odd crash on Day 1 (likely due to overpopulation).

    Yes, the forums are overflowing with bug reports, but that's what they always do, If people have trouble playing, they come here. If they don't have trouble, they're too busy playing the game to come to the forums. Therefore, you can't use the forums to gauge how smoothly the game is running.

    If you're having a specific problem that is making it unplayable for you, that stinks, and I'll agree that there are lots of bugs... but that's just the nature of a game this big. They fix the ones they can in the order they deem most effective... the next few incremental patches will address the big ones, and go from there every week to follow. If they dedicated any more time to bug fixing than they currently do, you'd have the "new content" crowd crying foul instead. I think the current balance is about as good as it's going to get.

    Then again, I'm a long-time Elder Scrolls player. The bugs are pretty much part of the tradition, at this point. ;)
    Living vicariously through my characters.

    My Girls:
    "If you were trapped in your house for, say, a year, how would you pass the time?"

    Nephikah the Houseless, dunmer assassin: "I suppose I could use the break. I have a lot of business holdings now that need management."
    Swum-Many-Waters, elderly argonian healer: "I think that I would enjoy writing a memoir."
    Silh'ki, khajiit warrior-chef: "Would this one be able to go outside, to the nearby river? It's hard to fish without water!"
    Peregrine Huntress, bosmer hunter: "Who is forcing me to stay inside, and where can I find them?"
    Lorenyawe, altmer mechanist: "And why would I want to go outside in the first place? Too much to be done in the workshop."
    Lorelai Magpie, breton master thief: "I'd go nuts. Lucky for me, I have a little experience sneaking out!"
    Rasheda the Burning Heart, redguard knight: "I would continue my training to keep my skills sharp."
    Hex-Eye Azabi, khajiit daedric priestess: "I suppose it would be lucky, then, that I built a shrine to Mephala in my backyard."
    Yngva Stormhammer, nord bandit (reformed...ish): "I hate being inside even when I'm not forced to be. GET. ME. OUT."
    Madam Argentia, vampire dunmer aristocrat: "I suppose it would be more of the same. I have a rather... contentious relationship with the sun."
    Mazie gra-Bolga, orc scout: "Uh... I'd have to house train my bear..."
    Felicia the Wanderer, imperial witch-for-hire: "What Lorelai said."
    Calico Jaka-dra, retired khajiit pirate: "This one would like a rest from her grand adventures. Her jewel shop runs out of stock!"
    Shimmerbeam, blind altmer psijic: "Provided that I am confined to Artaeum, I do not think I will want for things to occupy my time."
    Shauna Blackfire, redguard necromancer: "Sounds like paradise. I hate people."
    Kirniel the Undying, cursed bosmer warrior: "I would feel useless, not being able to fight."
    Echoes-from-Dragons, argonian who thinks she's a dragon: "All the better to count my hoard!"

    (Signature idea shamelessly stolen from Abeille.)
  • idk
    idk
    ✭✭✭✭✭
    ✭✭✭✭✭
    Another rate rant.

    OP, some business line structure information for you. Development teams are compartmentalized into specialalties. Along those lines there are groups that specialize in finding and fixing specific types of bugs.

    Ceasing developing of new content would do zilch to change anything except for more players would be driven from the game due to boredom. Really simple reality.

    it is just a very narrow minded idea that would be bad for the game and bad for business.
  • Epona222
    Epona222
    ✭✭✭✭✭
    ✭✭✭✭
    Kneighbors wrote: »
    Continue to beta test it guys and pay money while I'll take a break with my new rig and tons of other AAA games I missed. Thank you in advance.

    Good on you, have fun! What games have you got? :)
    GM - Ghost Sea Trading Co - NA PC

    Epona was a Romano-Celtic goddess dating back to around 1800 to 2000 years before computer games were invented.
  • Epona222
    Epona222
    ✭✭✭✭✭
    ✭✭✭✭
    Another rate rant.

    OP, some business line structure information for you. Development teams are compartmentalized into specialalties. Along those lines there are groups that specialize in finding and fixing specific types of bugs.

    Ceasing developing of new content would do zilch to change anything except for more players would be driven from the game due to boredom. Really simple reality.

    it is just a very narrow minded idea that would be bad for the game and bad for business.

    Oh let's make the people who draw new art assets go and do some coding, that would be fun! (j/k, in case that wasn't 100% clear :D )
    GM - Ghost Sea Trading Co - NA PC

    Epona was a Romano-Celtic goddess dating back to around 1800 to 2000 years before computer games were invented.
  • Shardan4968
    Shardan4968
    ✭✭✭✭✭
    Oh my gawd! I saw guard today, who has completely red face! This is unplayable! LITERALLY UN-PLAYABLE!
    Edited by Shardan4968 on May 24, 2017 5:37PM
    PC/EU
  • Drachenfier
    Drachenfier
    ✭✭✭✭✭
    Haven't encountered a single bug yet /knock on wood
  • Epona222
    Epona222
    ✭✭✭✭✭
    ✭✭✭✭
    Oh my gawd! I saw guard today, who have completely red face! This is unplayable! LITERALLY UN-PLAYABLE!

    No, that was me after a heavy session at the Ebon Flask. Drinking session that is. Yes, drinking.
    GM - Ghost Sea Trading Co - NA PC

    Epona was a Romano-Celtic goddess dating back to around 1800 to 2000 years before computer games were invented.
  • Kneighbors
    Kneighbors
    ✭✭✭✭✭
    Another rate rant.

    OP, some business line structure information for you. Development teams are compartmentalized into specialalties. Along those lines there are groups that specialize in finding and fixing specific types of bugs.

    Ceasing developing of new content would do zilch to change anything except for more players would be driven from the game due to boredom. Really simple reality.

    it is just a very narrow minded idea that would be bad for the game and bad for business.

    You are narrow minded. It's basic for any business. Imagine a pipelayers team. There are 5 guys working on laying a new pipe and one guy running behind them fixing where they missed. If they are bad enough they will outrun him and you will get very low water pressure on the end of the line. Same happening with ESO now.

    Huge amount of content but what is the purpose if a player can barely make a random dungeon run or if a player getting kicked to main screen all the time etc?

    Don't take things in too complicated manner, everything is simple. Surely game development is not the most complicated thing people did for amount of money ZoS get. Yea, I'm jealous of them because I think they get much more money than they are supposed to.
  • DMuehlhausen
    DMuehlhausen
    ✭✭✭✭✭
    ✭✭
    Kneighbors wrote: »
    Why do they continue to stack them? Why don't they like to invest some a week, a month, a 6 month into fixing the game?

    Every patch brings tons of new bugs and fixes several.

    Why just not stop with new content and start fixing the game? Seriously, I like to play ESO, I want to play it nonstop 10 hours in a row like before but I simply can't.

    I think the community has to start to show some muscle. Like canceling sub together in a wave for a month or two. This is the only thing ZoS currently understand, money talk.

    Yeah I was on yesterday and playing..every patch in every piece of software brings new bugs...nothing new to see here move along.
  • Belidos
    Belidos
    ✭✭✭✭✭
    Kneighbors wrote: »

    Don't take things in too complicated manner, everything is simple. Surely game development is not the most complicated thing people did for amount of money ZoS get. Yea, I'm jealous of them because I think they get much more money than they are supposed to.

    OK, if game coding isn't so hard here's a little task for you, there's a mistake in this code, please find it, you have 10 minutes ...
    -- LUA Script - precede every function and global member with lowercase name of script + '_main'
    -- Default script - does nothing.
    -- Add this to always active entity - only one is needed

    local Q = require "scriptbank\\quatlib"

    local deg = math.deg
    local rad = math.rad
    local sin = math.sin
    local cos = math.cos
    local atan = math.atan2
    local tan = math.tan
    local pi = math.pi
    local abs = math.abs
    local modf = math.modf
    local sqrt = math,sqrt

    local pickUpDistance = 150

    local pickUppableEntity = {Ent = nil}

    local function Rotate3D (x, y, z, xrot, yrot, zrot)

    function RotatePoint2D (x, y, Ang) -- Ang in radians
    local Sa, Ca = sin(Ang), cos(Ang)
    return x*Ca - y*Sa, x*Sa + y*Ca
    end

    local NX, NY, NZ = x, y, z

    -- X
    NZ, NY = RotatePoint2D (NZ, NY, -xrot)

    -- Y
    NX, NZ = RotatePoint2D (NX, NZ, -yrot)

    -- Z
    NY, NX = RotatePoint2D (NY, NX, -zrot)

    return NX, NY, NZ
    end

    local function WrapAng(Ang)
    local RAng = Ang
    while RAng >= 360 do
    RAng = RAng - 360
    end
    while RAng < 0 do
    RAng = RAng + 360
    end
    return RAng
    end

    function ray_collision_test_init(e)
    pickUppableEntity.Ent = nil
    end

    local function GetObjectSize(p)
    p.l, p.h, p.w = 0, 0, 0

    local Ent = g_Entity[p.Ent]

    local x, y, z = Ent.x, Ent.y, Ent.z
    local ax, ay, az = rad(Ent.anglex), rad(WrapAng(Ent.angley)), rad(Ent.anglez)

    local xwi, yli, zwi = Rotate3D(1, 0, 0, ax, ay, az)
    local xli, yli, zli = Rotate3D(0, 0, 1, ax, ay, az)

    -- find height of object
    local height = y + 1
    local ignore = 0

    local newx, newz = x + xwi, z + zwi

    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    newx, newz = newx + xwi, newz + zwi
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) == p.Obj do
    height = height + 10
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    height = height - 1
    end

    p.h = height - y + 1

    local newy = y + height + 2

    local stX, stZ = newx, newz

    -- measure 'width'
    local foundEdge = false
    local fObj = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx - xwi, newz - zwi
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xwi * 10), newz - (zwi * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xwi, newz + zwi
    end
    end

    local xd, zd = newx - stX, newz - stZ

    p.w = sqrt(xd*xd+zd*zd)

    -- measure 'length'
    newx, newz = x, z

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xli * 10), newz - (zli * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xli, newz + zli
    end
    end

    xd, zd = newx - x, newz - z

    p.l = (sqrt(xd*xd+zd*zd) + 1) * 2
    end

    local function PrintDetails(p)
    if p.l > p.w then
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.l .. " width=" .. p.w .. " height=" .. p.h)
    else
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.w .. " width=" .. p.l .. " height=" .. p.h)
    end
    end

    function ray_collision_test_main(e)

    if pickUppableEntity.Ent ~= nil then
    PrintDetails(pickUppableEntity)
    end

    -- Only check every 10th second
    if not scheduler(e) then return end

    local x, y, z = g_PlayerPosX, g_PlayerPosY + 35, g_PlayerPosZ

    local rayX, rayY, rayZ = 0, 0, pickUpDistance

    local paX, paY, paZ = rad(g_PlayerAngX), rad(g_PlayerAngY), rad(g_PlayerAngZ)

    rayX, rayY, rayZ = Rotate3D(rayX, rayY, rayZ, paX, paY, paZ)

    local Pobj = IntersectAll(x, y, z, x + rayX, y + rayY, z + rayZ, 0)

    if Pobj ~= 0 then
    for k,v in pairs(g_Entity) do
    if v.obj == Pobj then
    if pickUppableEntity.Ent ~= k then
    pickUppableEntity = {Ent = k, Obj = Pobj, pickedUp = false}
    GetObjectSize(pickUppableEntity)
    end
    return
    end
    end
    end

    pickUppableEntity.Ent = nil
    end

    -- Scheduler, this nifty little function keeps track of time. --
    -- The main routine should be called every frame and returns --
    -- a flag indicating whether the passed in time has expired --
    -- since the last time it was called. --
    -- If no time period is specified 100ms is used by default, --
    -- i.e. 1/10th of a second. --
    -- The caller can either ignore the return flag or use it to --
    -- trigger time sensitive functionality. --
    -- A global value giving the frames per second count is also --
    -- generated, this can be used in script to make animations --
    -- independent of frames. --
    -- The reason this function is tied to an entity rather than --
    -- being global is so that each entity can be triggered at a --
    -- different time rather than all being triggered in the same --
    -- frame.
    g_scheduler = {}

    function scheduler(e, period)
    period = period or 100 -- defaults to tenths of a second (100ms)

    if g_Time == nil then return false end

    if g_scheduler[e] == nil then

    g_scheduler[e] = {frames_per_second = 60,
    period_accumulated = math.random(0, period),
    accumulated_time = 0,
    timer_value_last_frame = g_Time,
    frame_counter = 0};

    -- 'test' mode sometimes doesn't clear Lua globals so if
    -- this appears to be the case initialise everything
    elseif g_scheduler[e].accumulated_time > 2000 then

    g_scheduler[e].frames_per_second = 60
    g_scheduler[e].period_accumulated = math.random(0, period)
    g_scheduler[e].accumulated_time = 0
    g_scheduler[e].timer_value_last_frame = g_Time
    g_scheduler[e].frame_counter = 0
    end

    local entry = g_scheduler[e]
    local do_this_frame_flag = false

    entry.frame_counter = entry.frame_counter + 1

    local time_since_last_frame = g_Time - entry.timer_value_last_frame

    if (entry.period_accumulated + time_since_last_frame) > period then

    entry.period_accumulated = (entry.period_accumulated +
    time_since_last_frame) - period;
    do_this_frame_flag = true
    else
    entry.period_accumulated = entry.period_accumulated + time_since_last_frame
    end

    if (entry.accumulated_time + time_since_last_frame) > 1000 then -- more than a second passed?

    entry.accumulated_time = (entry.accumulated_time +
    time_since_last_frame) - 1000;
    entry.frames_per_second = entry.frame_counter
    entry.frame_counter = 0
    else
    entry.accumulated_time = entry.accumulated_time + time_since_last_frame
    end

    entry.timer_value_last_frame = entry.timer_value_last_frame + time_since_last_frame

    return do_this_frame_flag
    end

    This script an experiment in ray-cast detection for moving objects in a game engine, all this code basically does is detect the size, shape, and location of an object, not as easy as you thought eh?

    (note: there's actually quite a few mistakes on there, but only one that will make it completely fall down, the rest are intentional "mistakes" used as workarounds for testing.)
    Edited by Belidos on May 24, 2017 4:49PM
  • Kneighbors
    Kneighbors
    ✭✭✭✭✭
    Belidos wrote: »
    Kneighbors wrote: »

    Don't take things in too complicated manner, everything is simple. Surely game development is not the most complicated thing people did for amount of money ZoS get. Yea, I'm jealous of them because I think they get much more money than they are supposed to.

    OK, if game coding isn't so hard here's a little task for you, there's a mistake in this code, please find it, you have 10 minutes ...
    -- LUA Script - precede every function and global member with lowercase name of script + '_main'
    -- Default script - does nothing.
    -- Add this to always active entity - only one is needed

    local Q = require "scriptbank\\quatlib"

    local deg = math.deg
    local rad = math.rad
    local sin = math.sin
    local cos = math.cos
    local atan = math.atan2
    local tan = math.tan
    local pi = math.pi
    local abs = math.abs
    local modf = math.modf
    local sqrt = math,sqrt

    local pickUpDistance = 150

    local pickUppableEntity = {Ent = nil}

    local function Rotate3D (x, y, z, xrot, yrot, zrot)

    function RotatePoint2D (x, y, Ang) -- Ang in radians
    local Sa, Ca = sin(Ang), cos(Ang)
    return x*Ca - y*Sa, x*Sa + y*Ca
    end

    local NX, NY, NZ = x, y, z

    -- X
    NZ, NY = RotatePoint2D (NZ, NY, -xrot)

    -- Y
    NX, NZ = RotatePoint2D (NX, NZ, -yrot)

    -- Z
    NY, NX = RotatePoint2D (NY, NX, -zrot)

    return NX, NY, NZ
    end

    local function WrapAng(Ang)
    local RAng = Ang
    while RAng >= 360 do
    RAng = RAng - 360
    end
    while RAng < 0 do
    RAng = RAng + 360
    end
    return RAng
    end

    function ray_collision_test_init(e)
    pickUppableEntity.Ent = nil
    end

    local function GetObjectSize(p)
    p.l, p.h, p.w = 0, 0, 0

    local Ent = g_Entity[p.Ent]

    local x, y, z = Ent.x, Ent.y, Ent.z
    local ax, ay, az = rad(Ent.anglex), rad(WrapAng(Ent.angley)), rad(Ent.anglez)

    local xwi, yli, zwi = Rotate3D(1, 0, 0, ax, ay, az)
    local xli, yli, zli = Rotate3D(0, 0, 1, ax, ay, az)

    -- find height of object
    local height = y + 1
    local ignore = 0

    local newx, newz = x + xwi, z + zwi

    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    newx, newz = newx + xwi, newz + zwi
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) == p.Obj do
    height = height + 10
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    height = height - 1
    end

    p.h = height - y + 1

    local newy = y + height + 2

    local stX, stZ = newx, newz

    -- measure 'width'
    local foundEdge = false
    local fObj = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx - xwi, newz - zwi
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xwi * 10), newz - (zwi * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xwi, newz + zwi
    end
    end

    local xd, zd = newx - stX, newz - stZ

    p.w = sqrt(xd*xd+zd*zd)

    -- measure 'length'
    newx, newz = x, z

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xli * 10), newz - (zli * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xli, newz + zli
    end
    end

    xd, zd = newx - x, newz - z

    p.l = (sqrt(xd*xd+zd*zd) + 1) * 2
    end

    local function PrintDetails(p)
    if p.l > p.w then
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.l .. " width=" .. p.w .. " height=" .. p.h)
    else
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.w .. " width=" .. p.l .. " height=" .. p.h)
    end
    end

    function ray_collision_test_main(e)

    if pickUppableEntity.Ent ~= nil then
    PrintDetails(pickUppableEntity)
    end

    -- Only check every 10th second
    if not scheduler(e) then return end

    local x, y, z = g_PlayerPosX, g_PlayerPosY + 35, g_PlayerPosZ

    local rayX, rayY, rayZ = 0, 0, pickUpDistance

    local paX, paY, paZ = rad(g_PlayerAngX), rad(g_PlayerAngY), rad(g_PlayerAngZ)

    rayX, rayY, rayZ = Rotate3D(rayX, rayY, rayZ, paX, paY, paZ)

    local Pobj = IntersectAll(x, y, z, x + rayX, y + rayY, z + rayZ, 0)

    if Pobj ~= 0 then
    for k,v in pairs(g_Entity) do
    if v.obj == Pobj then
    if pickUppableEntity.Ent ~= k then
    pickUppableEntity = {Ent = k, Obj = Pobj, pickedUp = false}
    GetObjectSize(pickUppableEntity)
    end
    return
    end
    end
    end

    pickUppableEntity.Ent = nil
    end

    -- Scheduler, this nifty little function keeps track of time. --
    -- The main routine should be called every frame and returns --
    -- a flag indicating whether the passed in time has expired --
    -- since the last time it was called. --
    -- If no time period is specified 100ms is used by default, --
    -- i.e. 1/10th of a second. --
    -- The caller can either ignore the return flag or use it to --
    -- trigger time sensitive functionality. --
    -- A global value giving the frames per second count is also --
    -- generated, this can be used in script to make animations --
    -- independent of frames. --
    -- The reason this function is tied to an entity rather than --
    -- being global is so that each entity can be triggered at a --
    -- different time rather than all being triggered in the same --
    -- frame.
    g_scheduler = {}

    function scheduler(e, period)
    period = period or 100 -- defaults to tenths of a second (100ms)

    if g_Time == nil then return false end

    if g_scheduler[e] == nil then

    g_scheduler[e] = {frames_per_second = 60,
    period_accumulated = math.random(0, period),
    accumulated_time = 0,
    timer_value_last_frame = g_Time,
    frame_counter = 0};

    -- 'test' mode sometimes doesn't clear Lua globals so if
    -- this appears to be the case initialise everything
    elseif g_scheduler[e].accumulated_time > 2000 then

    g_scheduler[e].frames_per_second = 60
    g_scheduler[e].period_accumulated = math.random(0, period)
    g_scheduler[e].accumulated_time = 0
    g_scheduler[e].timer_value_last_frame = g_Time
    g_scheduler[e].frame_counter = 0
    end

    local entry = g_scheduler[e]
    local do_this_frame_flag = false

    entry.frame_counter = entry.frame_counter + 1

    local time_since_last_frame = g_Time - entry.timer_value_last_frame

    if (entry.period_accumulated + time_since_last_frame) > period then

    entry.period_accumulated = (entry.period_accumulated +
    time_since_last_frame) - period;
    do_this_frame_flag = true
    else
    entry.period_accumulated = entry.period_accumulated + time_since_last_frame
    end

    if (entry.accumulated_time + time_since_last_frame) > 1000 then -- more than a second passed?

    entry.accumulated_time = (entry.accumulated_time +
    time_since_last_frame) - 1000;
    entry.frames_per_second = entry.frame_counter
    entry.frame_counter = 0
    else
    entry.accumulated_time = entry.accumulated_time + time_since_last_frame
    end

    entry.timer_value_last_frame = entry.timer_value_last_frame + time_since_last_frame

    return do_this_frame_flag
    end

    This script an experiment in ray-cast detection for moving objects in a game engine, all this code basically does is detect the size, shape, and location of an object, not as easy as you thought eh?

    (note: there's actually quite a few mistakes on there, but only one that will make it completely fall down, the rest are intentional "mistakes" used as workarounds for testing.)

    I am not into programming but I surely hope I do my job better than the guy who programmed group finder.
  • PlagueSD
    PlagueSD
    ✭✭✭✭✭
    @Kneighbors I've had exactly 0 game-breaking issues with this update so far.

    63be2a7909143da9ebe5af6566dd25b29931b08d7dc863ffae610f5e76d94c02.jpg
  • rynth
    rynth
    ✭✭✭✭✭
    I LITERALLY have no problems playing this game, like literally this game is a lot of fun for me to play. Because literally I have no issues playing with literally no bugs, I mean literally no bugs causing my game like literally no problems.
    When asked what he would do for a Klondike bar. Grand Moff Tarkin said "why I would blow up Alderaan."
  • ThePaleItalian
    ThePaleItalian
    ✭✭✭✭✭
    Just leave.

    Honestly, stop playing, cancel your sub and get off the forums. Actually follow your words, enough with the rants and ZOMG ZOS QQ. If the game is that bad, put your money where your mouth is, in another game.
    Conan, what is good in life?
    Crush your enemies. See them driven before you. Hear the lamentations of their women.

    PS4 Screen Name: The_Pale_Italian
    ZweiHandler - Orc DK Tank
    Solstice StormHaven - Magika Sorc
    Oba Nobanaga - Stam NB
  • Belidos
    Belidos
    ✭✭✭✭✭
    Kneighbors wrote: »
    Belidos wrote: »
    Kneighbors wrote: »

    Don't take things in too complicated manner, everything is simple. Surely game development is not the most complicated thing people did for amount of money ZoS get. Yea, I'm jealous of them because I think they get much more money than they are supposed to.

    OK, if game coding isn't so hard here's a little task for you, there's a mistake in this code, please find it, you have 10 minutes ...
    -- LUA Script - precede every function and global member with lowercase name of script + '_main'
    -- Default script - does nothing.
    -- Add this to always active entity - only one is needed

    local Q = require "scriptbank\\quatlib"

    local deg = math.deg
    local rad = math.rad
    local sin = math.sin
    local cos = math.cos
    local atan = math.atan2
    local tan = math.tan
    local pi = math.pi
    local abs = math.abs
    local modf = math.modf
    local sqrt = math,sqrt

    local pickUpDistance = 150

    local pickUppableEntity = {Ent = nil}

    local function Rotate3D (x, y, z, xrot, yrot, zrot)

    function RotatePoint2D (x, y, Ang) -- Ang in radians
    local Sa, Ca = sin(Ang), cos(Ang)
    return x*Ca - y*Sa, x*Sa + y*Ca
    end

    local NX, NY, NZ = x, y, z

    -- X
    NZ, NY = RotatePoint2D (NZ, NY, -xrot)

    -- Y
    NX, NZ = RotatePoint2D (NX, NZ, -yrot)

    -- Z
    NY, NX = RotatePoint2D (NY, NX, -zrot)

    return NX, NY, NZ
    end

    local function WrapAng(Ang)
    local RAng = Ang
    while RAng >= 360 do
    RAng = RAng - 360
    end
    while RAng < 0 do
    RAng = RAng + 360
    end
    return RAng
    end

    function ray_collision_test_init(e)
    pickUppableEntity.Ent = nil
    end

    local function GetObjectSize(p)
    p.l, p.h, p.w = 0, 0, 0

    local Ent = g_Entity[p.Ent]

    local x, y, z = Ent.x, Ent.y, Ent.z
    local ax, ay, az = rad(Ent.anglex), rad(WrapAng(Ent.angley)), rad(Ent.anglez)

    local xwi, yli, zwi = Rotate3D(1, 0, 0, ax, ay, az)
    local xli, yli, zli = Rotate3D(0, 0, 1, ax, ay, az)

    -- find height of object
    local height = y + 1
    local ignore = 0

    local newx, newz = x + xwi, z + zwi

    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    newx, newz = newx + xwi, newz + zwi
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) == p.Obj do
    height = height + 10
    end
    while IntersectAll(newx, height, newz, x, height, z, ignore) ~= p.Obj do
    height = height - 1
    end

    p.h = height - y + 1

    local newy = y + height + 2

    local stX, stZ = newx, newz

    -- measure 'width'
    local foundEdge = false
    local fObj = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx - xwi, newz - zwi
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xwi * 10), newz - (zwi * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xwi, newz + zwi
    end
    end

    local xd, zd = newx - stX, newz - stZ

    p.w = sqrt(xd*xd+zd*zd)

    -- measure 'length'
    newx, newz = x, z

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj ~= p.Obj then
    if fObj == nil or fObj == 0 then
    foundEdge = true
    else
    ignore = fObj
    end
    else
    newx, newz = newx - (xli * 10), newz - (zli * 10)
    end
    end

    foundEdge = false
    ignore = 0

    while not foundEdge do
    fObj = IntersectAll(newx, newy, newz, newx, y, newz, ignore)
    if fObj == p.Obj then
    foundEdge = true
    elseif fObj ~= nil and fObj ~= 0 then
    ignore = fObj
    else
    newx, newz = newx + xli, newz + zli
    end
    end

    xd, zd = newx - x, newz - z

    p.l = (sqrt(xd*xd+zd*zd) + 1) * 2
    end

    local function PrintDetails(p)
    if p.l > p.w then
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.l .. " width=" .. p.w .. " height=" .. p.h)
    else
    PromptLocal(p.Ent, p.Ent .. ", len=" .. p.w .. " width=" .. p.l .. " height=" .. p.h)
    end
    end

    function ray_collision_test_main(e)

    if pickUppableEntity.Ent ~= nil then
    PrintDetails(pickUppableEntity)
    end

    -- Only check every 10th second
    if not scheduler(e) then return end

    local x, y, z = g_PlayerPosX, g_PlayerPosY + 35, g_PlayerPosZ

    local rayX, rayY, rayZ = 0, 0, pickUpDistance

    local paX, paY, paZ = rad(g_PlayerAngX), rad(g_PlayerAngY), rad(g_PlayerAngZ)

    rayX, rayY, rayZ = Rotate3D(rayX, rayY, rayZ, paX, paY, paZ)

    local Pobj = IntersectAll(x, y, z, x + rayX, y + rayY, z + rayZ, 0)

    if Pobj ~= 0 then
    for k,v in pairs(g_Entity) do
    if v.obj == Pobj then
    if pickUppableEntity.Ent ~= k then
    pickUppableEntity = {Ent = k, Obj = Pobj, pickedUp = false}
    GetObjectSize(pickUppableEntity)
    end
    return
    end
    end
    end

    pickUppableEntity.Ent = nil
    end

    -- Scheduler, this nifty little function keeps track of time. --
    -- The main routine should be called every frame and returns --
    -- a flag indicating whether the passed in time has expired --
    -- since the last time it was called. --
    -- If no time period is specified 100ms is used by default, --
    -- i.e. 1/10th of a second. --
    -- The caller can either ignore the return flag or use it to --
    -- trigger time sensitive functionality. --
    -- A global value giving the frames per second count is also --
    -- generated, this can be used in script to make animations --
    -- independent of frames. --
    -- The reason this function is tied to an entity rather than --
    -- being global is so that each entity can be triggered at a --
    -- different time rather than all being triggered in the same --
    -- frame.
    g_scheduler = {}

    function scheduler(e, period)
    period = period or 100 -- defaults to tenths of a second (100ms)

    if g_Time == nil then return false end

    if g_scheduler[e] == nil then

    g_scheduler[e] = {frames_per_second = 60,
    period_accumulated = math.random(0, period),
    accumulated_time = 0,
    timer_value_last_frame = g_Time,
    frame_counter = 0};

    -- 'test' mode sometimes doesn't clear Lua globals so if
    -- this appears to be the case initialise everything
    elseif g_scheduler[e].accumulated_time > 2000 then

    g_scheduler[e].frames_per_second = 60
    g_scheduler[e].period_accumulated = math.random(0, period)
    g_scheduler[e].accumulated_time = 0
    g_scheduler[e].timer_value_last_frame = g_Time
    g_scheduler[e].frame_counter = 0
    end

    local entry = g_scheduler[e]
    local do_this_frame_flag = false

    entry.frame_counter = entry.frame_counter + 1

    local time_since_last_frame = g_Time - entry.timer_value_last_frame

    if (entry.period_accumulated + time_since_last_frame) > period then

    entry.period_accumulated = (entry.period_accumulated +
    time_since_last_frame) - period;
    do_this_frame_flag = true
    else
    entry.period_accumulated = entry.period_accumulated + time_since_last_frame
    end

    if (entry.accumulated_time + time_since_last_frame) > 1000 then -- more than a second passed?

    entry.accumulated_time = (entry.accumulated_time +
    time_since_last_frame) - 1000;
    entry.frames_per_second = entry.frame_counter
    entry.frame_counter = 0
    else
    entry.accumulated_time = entry.accumulated_time + time_since_last_frame
    end

    entry.timer_value_last_frame = entry.timer_value_last_frame + time_since_last_frame

    return do_this_frame_flag
    end

    This script an experiment in ray-cast detection for moving objects in a game engine, all this code basically does is detect the size, shape, and location of an object, not as easy as you thought eh?

    (note: there's actually quite a few mistakes on there, but only one that will make it completely fall down, the rest are intentional "mistakes" used as workarounds for testing.)

    I am not into programming but I surely hope I do my job better than the guy who programmed group finder.

    Until you do learn a little about coding it's probably best you don't comment on how easy or hard it is then, it just makes you look silly. Things go wrong in game code, a lot of things go wrong, especially when you have a team working on the same project, the silliest little thing one person codes, could, completely ruin another persons code, but it would only be visible under an extreme set of circumstances that aren't present in the testing environment, for example in this code a comma is in place of a period, this wouldn't show up until a certain amount of objects are within ray-cast range of the player, a lot more objects than i wold normally test with. That's how bugs slip through, it just happens, and to happens to every coder in the world frequently no matter how good you are.
  • SanderBuraas
    SanderBuraas
    ✭✭✭✭✭
    Just leave.

    Honestly, stop playing, cancel your sub and get off the forums. Actually follow your words, enough with the rants and ZOMG ZOS QQ. If the game is that bad, put your money where your mouth is, in another game.
    @ThePaleItalian

    Though I don't agree with the OP, your response is also silly. Constructive critisism is welcome on the forum. If someone cares about the game, they post a thread with their complaints. If they are smart, they do so constructively.
  • Sigtric
    Sigtric
    ✭✭✭✭✭
    ✭✭✭✭✭
    I died reading this thread.
    giphy.gif


    Stormproof: Vibeke - 50 EP mDragonknight | Savi Dreloth - 50 EP Magsorc | Sadi Dreloth - 50 EP Magblade | Sigtric Stormaxe - 50 EP Stamsorc | Valora Dreloth - 50 EP Magplar | Sigtric the Unbearable 50 EP Stam Warden
    Scrub: Chews-on-Beavers - 50 EP DK Tank | Vera the Wild - 50 EP magicka Warden | Sigtric the Axe - 50 EP Dragonknight Crafter | Sigtric the Blade - 50 EP Lost Nightblade | Sigtric the Savage - 50 EP magicka Templar | Vibeka Shadowblade - 50 Ep Stealthy Ganky Nightblade |

    Show Me Your Dunmer
    [/center]
  • apostate9
    apostate9
    ✭✭✭✭✭
    Just leave.

    Honestly, stop playing, cancel your sub and get off the forums. Actually follow your words, enough with the rants and ZOMG ZOS QQ. If the game is that bad, put your money where your mouth is, in another game.

    Amen.
  • starlizard70ub17_ESO
    starlizard70ub17_ESO
    ✭✭✭✭✭
    ✭✭
    Kneighbors wrote: »

    Why just not stop with new content and start fixing the game? Seriously, I like to play ESO, I want to play it nonstop 10 hours in a row like before but I simply can't.

    You shouldn't be sitting on your a$$ doing anything for 10 hours straight, it isn't healthy. Think of the "bugs" as a prompt for you to get up and move around a bit.

    Honestly I haven't encountered any of these bugs you speak of. If you'd tell us what exactly these bugs you've found are, then you wouldn't get trolled so hard here.

    "We have found a cave, but I don't think there are warm fires and friendly faces inside."
  • ThePaleItalian
    ThePaleItalian
    ✭✭✭✭✭
    Smepic wrote: »
    Just leave.

    Honestly, stop playing, cancel your sub and get off the forums. Actually follow your words, enough with the rants and ZOMG ZOS QQ. If the game is that bad, put your money where your mouth is, in another game.
    @ThePaleItalian

    Though I don't agree with the OP, your response is also silly. Constructive critisism is welcome on the forum. If someone cares about the game, they post a thread with their complaints. If they are smart, they do so constructively.

    This is the quote from the OP "Like canceling sub together in a wave for a month or two. This is the only thing ZoS currently understand, money talk"

    That is my point, there are forums users that are still on the forums complaining about a game they don't even play anymore. I get constructive criticism. But its just this endless cycle.
    Conan, what is good in life?
    Crush your enemies. See them driven before you. Hear the lamentations of their women.

    PS4 Screen Name: The_Pale_Italian
    ZweiHandler - Orc DK Tank
    Solstice StormHaven - Magika Sorc
    Oba Nobanaga - Stam NB
  • SydneyGrey
    SydneyGrey
    ✭✭✭✭✭
    ✭✭✭✭✭
    I had one bug yesterday. I had to close out the game, then when I returned to it, the bug was gone. It was annoying, but didn't destroy my day. :| I've played plenty of buggier games than this, so in comparison ESO seems bug-free.*

    *The absolute WORST was the original Gothic. Oh boy mother of God that was a buggy game. It was a great game if you ignored the bugs, but wow, there were SO MANY bugs.
  • kargen27
    kargen27
    ✭✭✭✭✭
    ✭✭✭✭✭
    Haven't encountered a single bug yet /knock on wood

    Are you even playing the game? You can hardly swing a dead Skeever without hitting a Mushroom Beetle.

    Good news is, hitting a Mushroom Beetle with a dead Skeever is a good way to replenish fishing supplies.
    and then the parrot said, "must be the water mines green too."
  • Tandor
    Tandor
    ✭✭✭✭✭
    ✭✭✭✭✭
    rynth wrote: »
    I LITERALLY have no problems playing this game, like literally this game is a lot of fun for me to play. Because literally I have no issues playing with literally no bugs, I mean literally no bugs causing my game like literally no problems.

    I'm literally almost the same as you. I have literally never realised that the rare couple of bugs that I've encountered since PC launch had made the game literally unplayable.
  • Rohamad_Ali
    Rohamad_Ali
    ✭✭✭✭✭
    ✭✭✭✭✭
    This thread is literally an over exaggeration .
  • Nova Sky
    Nova Sky
    ✭✭✭✭✭
    *agonized scream* It's literally unplayable! *choking sounds, followed by death rattle*
    "Wheresoever you go, go with all of your heart."
  • Lavennin
    Lavennin
    ✭✭✭
    Kneighbors wrote: »
    Don't take things in too complicated manner, everything is simple. Surely game development is not the most complicated thing people did for amount of money ZoS get. Yea, I'm jealous of them because I think they get much more money than they are supposed to.

    While I do agree that fixing important features like activity finder should have been a higher priority (and frankly, I've never played any game with this feature broken), you seem to assume the programmers' job is easy for their high salary.

    Well, college-trained programmers generally have a high salary, but not if they want to work their dream job, like in a game company, which ironically, demands more skill and experience.

    I know plenty of people freshly graduated from some of the better CS programs (seeing that I'm Asian, ha) and tried to find a job in a video game studio. They first contacted the top studios, then some smaller ones, until eventually got into Google or Amazon or Facebook (and not the game dev department) with a salary at least 25% higher than all the game dev jobs they applied to could have offered.

    The video game industry just hates new graduates. They want experienced folks, who could have just worked anywhere else and got more money and more free time. At least that's what I heard.

    Edited by Lavennin on May 24, 2017 10:35PM
Sign In or Register to comment.