Explore. Build. Conquer. EVE Online immerses you in a sci-fi experience where your every action can have rippling effects across a massive online universe. Team with and compete against over 500,000 players in epic starship battles or wage economic warfare on the galactic player-controlled market.
Felhasználói értékelés:
Mostanában:
Vegyes (211 értékelés) - 211 felhasználói értékelésből 59% pozitív az utóbbi 30 napban.
Összesítve:
Nagyon pozitív (6,121 értékelés) - E játék 6,121 felhasználói értékeléséből 80% pozitív.
Megjelenés dátuma: 2003. máj. 6.

Jelentkezz be, hogy ezt a tételt a kívánságlistádhoz adhasd, követhesd vagy érdektelennek jelöld.

A(z) Magyar nyelv nem támogatott.

Ez a termék nem támogatja a nálad beállított nyelvet. Kérjük, vásárlás előtt tekintsd át a támogatott nyelvek listáját.

Megjegyzés: Accounts created via Steam have to be accessed separately through the Steam client. Subscriptions & PLEX through the Steam store can only be redeemed by users that have created the EVE Online accounts via Steam on or after June 4th, 2013.

EVE Online indítása

EVE Online - Core Starter Pack vásárlása

Figyelmeztetés: A Steammel létrehozott fiókokba külön kell belépni a Steam kliensen keresztül. A Steam Áruházban csak olyan felhasználók vásárolhatnak előfizetéseket és PLEX-et, akik a Steamen keresztül hozták létre EVE Online fiókjukat 2013. június 4-én, vagy azután.

Az EVE Online - Core Starter Pack tulajdonosai nem fogják tudni megvásárolni az EVE Online - Premium Editiont ugyanarra a fiókra.

EVE Online - Premium Edition vásárlása

1 elemet tartalmaz: EVE Online

Subscriptions

EVE Online előfizetési mód vásárlása

Rendszeresen ismétlődő számlázással.

Akár 27% megtakarítás.
Válasz előfizetési módot

PLEX

Buy EVE Online PLEX

PLEX is short for 30 Day Concord Pilot License Extension. It's an in-game item that can be used to pay for your subscription without using more traditional payment methods.

Válassz vásárlási lehetőséget
 

Legutóbbi frissítések Összes megnézése (207)

február 20.

Exploit Notification – Illicit Transfer of Items & Ships Between Upwell Structures

An issue with the trade system has been brought to our attention this morning which allows illicit transfer of assets between upwell structures sharing a system.

The issue is currently being worked on and this notification serves to inform pilots that using the trade system to transfer items between upwell structures is considered an exploit.

Abuse of this exploit will be actioned as per the EVE Online EULA.

5 megjegyzés Tovább

február 16.

Sleeping beauty - How one of the oldest bugs in EVE got hunted down and resolved



Sometimes a story of a bug is so intriguing you have to write it down - so if you are technically minded or just curious about the realities of development on EVE Online. Join me for a deep-dive into the technical depths of the EVE Online code base, as I recount how one of the oldest defects in the game got hunted down and resolved! 

We're always working on improving EVE Online and our code base, and I hope you enjoy coming along on a journey of how this work can look.

How it all began

A little while ago CCP karkur asked me if I could help with an issue she had been looking into with the drone window, where it sometimes would stop updating when drones are being recalled. Her investigation did not uncover any bugs in the code related to drones or the UI. Over the course of a few hours, she managed to repro the drone bug 3 times, each time adding more logging where the problem seemed to lie. After the last repro, it became clear that it was failing at the least expected line of code - the drone window simply started updating, then went to sleep for a bit, but never woke up again -  it seemed that tasklets were on occasion simply not returning from their sleep.

The original bug was quite difficult to reproduce, but CCP karkur put together a script that generated 500,000 tasklets that simply sleep for some given time, with some tracking to identify tasklets that never finish. With this script, we've been able to reproduce this sleeping disorder somewhat reliably. This script identified the tasklet that didn't wake up, and upon inspection it was clear that the tasklet was neither scheduled nor blocked - it was in some sort of limbo.

My first attempts at reproducing the bug with CCP karkur's script were not successful - I was running in Jessica (our authoring/debugging tool) without the client and didn't seem to have any luck. Later I tried in the client with better luck, so it seemed there was more to it than simply having lots of tasklets. I started reading through the relevant C++ code to try to come up with theories.

Some background

Tasklets (see Stackless Python for more information) are run in PyScheduler::Run, by calling PyStackless_RunWatchdogEx. This method takes in a timeout value and runs any scheduled tasklets until the given time has passed. When a tasklet is created, it is scheduled and so will run when the PyScheduler::Run is called. When a tasklet sleeps, it calls Synchro::SleepWallclock, which is implemented by creating a channel and calling receive on the channel. This blocks the channel until somebody sends something on that channel. Synchro maintains a heap of sleepers - a sleeper is a simple object that holds the due time when the tasklet should wake up, and the channel. Synchro::Tick pulls sleepers from the top of the heap and sends a value on the channel. This in turn unblocks the tasklet and schedules it.

My first idea was that there might be a bug in the heap code. It's our own code, it's old and there are no unit tests for it. I considered writing some tests for it, or even finding a suitable replacement, but then I realized the symptoms didn't match with the tasklet never being pulled from that heap. If that were the case, the tasklet would simply remain blocked forever. It's still on my to-do list to add tests for this code, though.

My next idea came from looking at the documentation of PyStackless_RunWatchdogEx. It can return a tasklet, that should either be killed or rescheduled. That turned out to be a dead end - this only applies when running in preemptive mode, where a tasklet can be interrupted.

Show me the code

I had a hunch that killing tasklets might be a factor in this, but I couldn't see anything wrong with the code around that. Nevertheless, I couldn't convince myself that the reference counting of the channel was correct, so I decided to clean up the code a bit. It felt awkward how it was done.

<code>PyObject* Synchro::SleepWallclock(int ms, const int64_t &due){ Sleeper sl; sl.channel = PyChannel_New(NULL); if (!sl.channel) return 0; PyChannel_SetPreference(sl.channel, 0); //just make runnable on wakeup sl.due = due; mWallclockSleepers.Insert(sl); // Go to sleep and wake up! *(the sender releases the channel) PyObject *ret = PyChannel_Receive(sl.channel); if (!ret) { //we were killed, so lets try and find us in the queue, to release resources. RemoveSleeper( mWallclockSleepers, sl ); } return ret;}</code>

The SleepWallclock function creates the channel, stores it in the Sleeper object, puts the Sleeper object in the heap and calls receive on the channel. The receive call returns after Synchro::Tick has called send on the channel. That unblocks it, causing it to be scheduled. The tasklet could also be killed, in which case receive returns a nullptr. Let's take a look at a snippet from Synchro::Tick:

<code>//gather sleepers for wakeupstd::vector<sleeper> sleepers;while (mWallclockSleepers.size()) { if (mWallclockSleepers.front().due > now) break; sleepers.push_back(mWallclockSleepers.Shift());}if (sleepers.size()) { Be::Time nnow = BeOS->GetActualTime(); for(unsigned int i = 0; i < sleepers.size(); i++) { Sleeper &s = sleepers; if (PyChannel_GetBalance(s.channel)) { int res = PyChannel_Send(s.channel, Py_None); if (res) PyOS->PyError(); } Py_DECREF(s.channel); }}</sleeper></code>

This all looks correct - the channel could not pulled out from under the tasklet until after the Send call. What happens when a tasklet is killed?

<code>void Synchro::RemoveSleeper( Heap<sleeper> &sleepers, Sleeper &sl ){ SleeperIt it; for( it = sleepers.begin(); it != sleepers.end(); ++it ) { if( it->channel == sl.channel ) { break; } } if( it != sleepers.end() ) { //Ok found us. Let&#39;s delete us. sleepers.Remove( it ); Py_DECREF( sl.channel ); }}</sleeper></code>

Again, it all looks alright - the tasklet is removed from the heap and the channel is released. Note that it is not an error if the tasklet can't be found on the heap - it could have woken up and been scheduled on the same tick as it is being killed, but in that case the channel will have been released in Tick.

Let's examine this a bit further, though. Keep in mind that Py_DECREF frees the memory if the reference count goes to zero. The PyChannel_New call in SleepWallclock returns a PyChannelObject with a reference count of one. There are no references added, so the channel object is deleted in Tick when it calls Py_DECREF.  This should be fine, as there are no references to the channel in SleepWallclock after the receive call. Except...

In RemoveSleeper, which is called after a tasklet has been killed we&#39;re comparing channel objects. There should always be a one-to-one correspondence with tasklets and channels so we're effectively looking for a tasklet here, but since we needed to keep track of channels to wake them up, we just use the channels. I added a reference to the tasklet in the Sleeper object so that I could verify it here, and lo and behold, when running the scripts from CCP karkur I got a discrepancy - a tasklet was determined to be in the heap based on the channel, but the tasklet didn't match.

The Eureka moment

When a channel object is deleted, its memory is now free and available for reuse. This implies that a tasklet that goes to sleep on the same tick as a tasklet is killed exactly when it wanted to wake up can get the same channel pointer as the killed tasklet. RemoveSleeper will in that case remove the wrong tasklet (the one that just called SleepWallclock) from the heap, kill it&#39;s channel, leaving it in a non-scheduled, non-blocked state.

The fix is simple - move the Py_DECREF calls into SleepWallclock. This ensures that channel objects are not recycled prematurely, and in my opinion is actually cleaner, keeping the reference counting localized in one function.

Never assume

EVE Online is almost 14 years old now and has seen many battles during its lifetime, and one can say the code base is thoroughly battle tested. However, that doesn't mean sneaky bugs might not be hiding there, but finding a bug in such a fundamental function was surprising, to say the least. I guess we can never assume that any part of our code base is absolutely 100% correct. CCP karkur and others have spent a considerable amount of time tracking this issue down so we had high confidence in the higher level code. This allowed me to go into this investigation on the assumption that Sleep was broken, being stubborn until I found this rare edge case.

We have reason to believe that a few other bugs are symptoms of the same underlying issue - the overview not updating, for example, or the shield, armor and structure bars not updating. These bugs have always been nearly impossible to reproduce but nevertheless are reported occasionally, especially after mass tests or heavy fights on Tranquility.

12 megjegyzés Tovább

Core Starter Pack



Introducing the new EVE Online Starter Pack! Designed from the ground up to kickstart a new pilot's career, the Core Starter Pack features a full arsenal of skills and gear for miners and crafters.

The Core Starter Pack includes:

  • The ORE Venture mining frigate
  • A full set of modules and equipment to kit out your ship
  • Extra skills, ready to train
  • Blueprints to build the Venture and the deadly Corax destroyer
  • A Mobile Depot personal deployable
  • Avatar apparel: male “Esquire” and female “Executor” coats (black)
  • Prototype Cerebral Accelerator (skill booster)
  • 30 days of game time

Premium Edition



Leave all your options open and be ready for anything with the Premium Starter Pack. Everything from the Core Starter Pack and all four Content Packs are included. We’ve also added some of the hottest battleship skins and PLEX, an in-game token worth 30 additional days of game time that can be used or traded on the EVE market. Be prepared for wherever your adventurous spirit wants to take you with the Premium Edition.

The Premium Edition includes:

  • Core Starter Pack (including 30 days of game time)
  • All four Content Packs (excluding Aurum): Explorer, Colonist, Industrialist, Skirmisher
  • Abaddon Tash-Murkon Battleship skin
  • Hyperion Innerzone Shipping Battleship skin
  • Maelstrom Nefantar Battleship skin
  • Rokh Wiyrkomi Edition Battleship skin
  • 1 PLEX (30 additional days of game time)
  • 750 AURUM for New Eden Store

Includes the following Content Packs:

  • The Colonist Content Pack equips you with the essentials for your own planetary industry colonies.
  • The Explorer Content Pack provides specialized gear for whose make their fortunes discovering and looting lost treasures.
  • The Industrialist Content Pack gives you skills, minerals, and blueprints to get started as a manufacturer of the machines of war.
  • The Skirmisher Content Pack arms you with a combat-ready Breacher frigate, ammo and the skills you need to learn to hold your own in battle.

A játékról

Fedezz fel! Építs! Hódíts! Az EVE Online-ban olyan sci-fi élményben merülhetsz el, melyben minden tetted a hatalmas online univerzumon végigfutó hatást válthat ki. Szövetkezz vagy versengj több mint 350 000 játékossal epikus csillaghajó-csatákban, vagy vívj gazdasági háborút a játékosok irányította galaktikus piacon.

Fő jellemzők

  • Több PVP-rendszer – csatlakozz a Factional Warfare-hez az EVE négy faja egyikének hű tagjaként, játszd ki a törvényt mélyűri kalózként, vagy ragadj fegyvert a szövetségi hadviselés nagy léptékű konfliktusaiban, ahol a csillagok közötti fennhatóságért folyó csatákban akár ezernél is több pilóta harcol. Az EVE Online-ban kiválaszthatod a te játékstílusodnak megfelelő PvP harcot.
  • Hatalmas, játékosok irányította gazdaság – mindent, ami az EVE Online piacán megvehető vagy eladható, játékosok gyártanak vagy kínálnak. Vételi és eladási megbízások, szerződések, futár-megállapodások, és sok más kereskedelmi eszköz áll a játékos rendelkezésére ipari birodalma felépítéséhez. Emelkedj a csúcsra eszes vállalkozóként, vagy az EVE-ben létező számos megacég egyikének tagjaként.
  • Felfedezés, bányászat, küldetések – az EVE Online változatos hivatáspályákat kínál. A játékos előbbre juthat kereskedőként, gyárosként, politikusként, kémként, vagy bármilyen egyéb módon, megkötések nélkül. Megtanulható képzettségek százai és nyitott játékmenet teszi lehetővé számodra, hogy meghatározd a szerepet, melyet be akarsz tölteni a virtuális univerzumban.
  • Felszabadító karakterfejlődés - sosem kell többé képzettségért "darálni". A passzív képzettségfejlesztő rendszer lehetővé teszi, hogy még akkor is fejlődj, mikor nem vagy bejelentkezve.
  • Egyetlen univerzum - csatlakozz játékosok százezreihez ugyanabban az állandó univerzumban, ahol híred vagy hírhedtséged nem korlátozódik csupán a játékosok egy csoportjára.
  • Ingyenes bővítések – az EVE bővítéseiért sosem kell fizetned; ahogy növekszik az EVE univerzum, úgy nőnek az előfizetésed nyújtotta előnyök is.
  • Játék INGYEN – a megállapodott játékosok idővel a játék során keresett játékon belüli pénzzel is fizethetnek a játékidőért.

Rendszerkövetelmények

Windows
Mac OS X
    Minimum:
    • Supported OS: Windows 7 / 8.1 / 10
    • Processor: CPU that supports SSE2 (Intel Dual Core @ 2.0 GHz, AMD Dual Core @ 2.0 GHz)
    • Memory: 2 GB
    • Hard Drive: 20 GB Free Space
    • Video: GPU with 256 MB VRAM or more that supports Shader Model 3 and DirectX 9.0c (AMD Radeon 2600 XT or NVIDIA GeForce 8600 GTS)
    • Audio: Supports SSE, Direct Sound compatible
    • Drivers: DirectX® 9.0c (included) and latest video drivers
    • Network: ADSL connection (or faster)
    • Note that older graphics cards such as the NVIDIA 6000 and 7000 series may work but are not officially supported. Please note that Windows 95, 98, ME, NT, 2000, XP and Vista are not supported.
    • Note: the minimum screen resolution for EVE is 1024x768. Audio hardware must be Direct Sound compatible. For optimum performance, use latest drivers available.
    Recommended:
    • OS: Windows 7 / 8.1 / 10
    • Processor: Intel Pentium i7 Series or AMD X4 @ 2.0 GHz or greater
    • Memory: 4 GB or greater
    • Hard Drive: 20 GB free space
    • Video: AMD Radeon 6790 or NVIDIA GeForce GTX 560 or better with at least 1 GB VRAM
    • Audio: Supports SSE, Direct Sound compatible
    • Drivers: DirectX® 11 (included) and latest video drivers
    • Network: ADSL connection or faster
    Minimum:
    • Supported OS: Mac OS X 10.9, 10.10, 10.11
    • Processor: CPU that supports SSE2 (Intel Dual Core @ 2.0 GHz)
    • Memory: 2 GB
    • Hard Drive: 20 GB Free Space
    • Video: NVIDIA GeForce 320m, Intel HD 3000
    Recommended:
    • OS: Mac OS X 10.9, 10.10, 10.11
    • Processor: Intel i7 Series @ 3.0 GHz or greater
    • Memory: 8 GB or higher
    • Hard Drive: 20 GB free space
    • Video: NVIDIA GeForce 675mx or better with at least 1 GB VRAM
Vásárlói értékelések Tovább
Mostanában:
Vegyes (211 értékelés)
Összesítve:
Nagyon pozitív (6,121 értékelés)
Értékeléstípus


Vásárlástípus


Nyelv


Mutatás mint:


(mi ez?)
11 értékelés felel meg a fenti szűrőknek ( Vegyes)
Nincs több értékelés, amely megfelel a fent beállított szűrőknek
Állíts a fenti szűrőkön, hogy más értékeléseket láss.
Értékelések betöltése...