mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-15 10:21:45 -04:00
Merge branch master-MC1.7.10 into master-MC1.10
# Conflicts: # src/main/resources/assets/opencomputers/textures/items/WirelessNetworkCard.png # src/main/resources/assets/opencomputers/textures/items/WirelessNetworkCard1.png # src/main/resources/assets/opencomputers/textures/items/wlanCard.png # src/main/scala/li/cil/oc/Settings.scala # src/main/scala/li/cil/oc/common/Proxy.scala # src/main/scala/li/cil/oc/common/init/Items.scala # src/main/scala/li/cil/oc/common/tileentity/AccessPoint.scala # src/main/scala/li/cil/oc/common/tileentity/Relay.scala # src/main/scala/li/cil/oc/server/component/WirelessNetworkCard.scala
This commit is contained in:
commit
3b40a8e1b8
BIN
assets/items.psd
BIN
assets/items.psd
Binary file not shown.
@ -192,7 +192,7 @@ repositories {
|
||||
configurations {
|
||||
provided
|
||||
embedded
|
||||
compile.extendsFrom provided, embedded
|
||||
compile.extendsFrom embedded
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@ -285,6 +285,9 @@ dependencies {
|
||||
testCompile "org.scalatest:scalatest_2.11:2.2.6"
|
||||
}
|
||||
|
||||
// Add the "provided" dependencies to the compile (but NOT runtime) classpath.
|
||||
sourceSets.main.compileClasspath += [configurations.provided]
|
||||
|
||||
idea.module.scopes.PROVIDED.plus += [configurations.provided]
|
||||
// eclipse.classpath.plusConfigurations += [configurations.provided]
|
||||
|
||||
|
@ -145,11 +145,12 @@ opencomputers {
|
||||
eepromDataSize: 256
|
||||
|
||||
# The number of components the different CPU tiers support. This list
|
||||
# must contain exactly three entries, or it will be ignored.
|
||||
# must contain exactly four entries, or it will be ignored.
|
||||
cpuComponentCount: [
|
||||
8
|
||||
12
|
||||
16
|
||||
1024
|
||||
]
|
||||
|
||||
# The provided call budgets by the three tiers of CPU and memory. Higher
|
||||
@ -702,7 +703,8 @@ opencomputers {
|
||||
# 400 * `wirelessCostPerRange`. In other words, the higher this value,
|
||||
# the higher the cost of wireless messages.
|
||||
# See also: `maxWirelessRange`.
|
||||
wirelessCostPerRange: 0.05
|
||||
# These values are for the tier 1 and 2 wireless cards, in that order.
|
||||
wirelessCostPerRange: [0.05, 0.05]
|
||||
|
||||
# The cost of a single packet sent via StargateTech 2's abstract bus.
|
||||
abstractBusPacket: 1
|
||||
@ -1228,7 +1230,9 @@ opencomputers {
|
||||
|
||||
# The maximum number of ports a single network card can have opened at
|
||||
# any given time.
|
||||
maxOpenPorts: 16
|
||||
# Note that the order for this list is: Wired Network Card -> Tier 1 Wireless
|
||||
# Network Card -> Tier 2 Wireless Network Card
|
||||
maxOpenPorts: [16, 1, 16]
|
||||
|
||||
# The maximum distance a wireless message can be sent. In other words,
|
||||
# this is the maximum signal strength a wireless network card supports.
|
||||
@ -1236,7 +1240,8 @@ opencomputers {
|
||||
# which may or may not lead to performance issues for ridiculous ranges -
|
||||
# like, you know, more than the loaded area.
|
||||
# See also: `wirelessCostPerRange`.
|
||||
maxWirelessRange: 400
|
||||
# These values are for the tier 1 and 2 wireless cards, in that order.
|
||||
maxWirelessRange: [16, 400]
|
||||
|
||||
# The number of remote terminals supported by each server tier.
|
||||
terminalsPerTier: [2, 4, 8]
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
Das Relay kann verwendet werden um verschiedene Subnetzwerken das Senden von Nachrichten zueinander zu ermöglichen, ohne Komponenten Computern in anderen Netzen zugänglich zu machen. Grundsätzlich ist es eine gute Idee Komponenten lokal zu behalten, damit [Computer](../general/computer.md) nicht die falschen Komponenten ansprechen oder Komponenten-Overflows zu verursachen (welche dazu führen, dass Computer crashen und nicht hochfahren.)
|
||||
|
||||
Mit einer [Drahtlosnetzwerkkarte](../item/wlanCard.md) können auch kabellose Nachrichten weitergeleitet werden. Dann kann dieser Block als Repeater verwendet werden: Es kann Nachrichten aus verkabelten Netzwerken zu anderen Geräten in verkabelten Netzwerken weiterleiten, oder Nachrichten aus kabellosen Netzwerken zu verkabelten oder kabellosen Netzwerken.
|
||||
Mit einer [Drahtlosnetzwerkkarte](../item/wlanCard1.md) können auch kabellose Nachrichten weitergeleitet werden. Dann kann dieser Block als Repeater verwendet werden: Es kann Nachrichten aus verkabelten Netzwerken zu anderen Geräten in verkabelten Netzwerken weiterleiten, oder Nachrichten aus kabellosen Netzwerken zu verkabelten oder kabellosen Netzwerken.
|
||||
|
||||
Relays führen *kein Protokoll* über kürzlich versendete Nachrichten, also ist es wichtig, Kreisläufe im Netzwerk zu vermeiden, oder das selbe Paket kann mehrmals empfangen werden. Aufgrund der geringen Puffergröße von Switches kann Paketverlust zu einem Problem werden, wenn Netzwerknachrichten zu oft gesendet werden. Ein Upgrade für Switches und Access Points zur Beschleunigung der Nachrichtenweiterleitung ist möglich, genau wie die interne Nachrichtenqueue erweitert werden kann.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
Im Gegensatz zu [Computern](../general/computer.md) können Roboter sich bewegen und mit der Welt fast wie ein Spieler interagieren. Sie können jedoch *nicht* mit externen Komponenten interagieren. Wenn die Kommunikation mit einem Computer benötigt wird, muss eine [kabellose Netzwerkkarte](../item/wlanCard.md) verwendet werden, oder ein Low-Level-Protokoll mit Redstonesignalen erstellt werden.
|
||||
Im Gegensatz zu [Computern](../general/computer.md) können Roboter sich bewegen und mit der Welt fast wie ein Spieler interagieren. Sie können jedoch *nicht* mit externen Komponenten interagieren. Wenn die Kommunikation mit einem Computer benötigt wird, muss eine [kabellose Netzwerkkarte](../item/wlanCard1.md) verwendet werden, oder ein Low-Level-Protokoll mit Redstonesignalen erstellt werden.
|
||||
|
||||
Roboter werden gebaut, indem ein [Computergehäuse](case1.md) jeder Stufe in einer [Elektronik-Werkbank](assembler.md) verwendet werden. Hochstufige [Computergehäuse](case1.md) erlauben komplexere Roboter, da sie eine bessere [CPU](../item/cpu1.md) verwalten können. Die Komplexität des Roboters ist von den Stufen der verwendeten Komponenten und Upgrades abhängig, wobei hochstufige Komponenten komplexer sind als niedrigstufige Komponenten. Wenn der Roboter zu komplex ist, kann die [Elektronik-Werkbank](assembler.md) den Roboter nicht bauen.
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT componentBus1.md
|
@ -27,7 +27,7 @@ Je nach dem, welches Recipe Set verwendet wird können einzelne Items nicht verf
|
||||
* [Verknüpfte Karte](linkedCard.md)
|
||||
* [Netzwerkkarte](lanCard.md)
|
||||
* [Redstonekarte](redstoneCard1.md)
|
||||
* [Drahtlosnetzwerkkarte](wlanCard.md)
|
||||
* [Drahtlosnetzwerkkarte](wlanCard1.md)
|
||||
* [Weltsensorkarte](worldSensorCard.md)
|
||||
|
||||
### Upgrades
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Drahtlosnetzwerkkarte
|
||||
|
||||

|
||||

|
||||
|
||||
Die kabellose Netzwerkkarte ist eine aufgewertete [Netzwerkkarte](lanCard.md) die, zusätzlich zu verkabelten Nachrichten, zudem das Senden von Nachrichten über kabellose Netzwerke ermöglicht. Die Signalstärke kontrolliert die Distanz über die Nachrichten versendet werden können. Die Signalstärke gleicht der Distanz in Blöcken.
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT wlanCard1.md
|
@ -4,7 +4,7 @@
|
||||
|
||||
The relay can be used to allow different subnetworks to send network messages to each other, without exposing components to [computers](../general/computer.md) in other networks. Keeping components local is usually a good idea, to avoid [computers](../general/computer.md) using the wrong [screen](screen1.md) or to avoid component overflows to happen (causing [computers](../general/computer.md) to crash and refuse to boot up).
|
||||
|
||||
The relay can be upgraded by inserting a [wireless network card](../item/wlanCard.md) to also relay messages wirelessly. Wireless messages can be received and relayed by other relays with a wireless network card, or by [computers](../general/computer.md) with a wireless network card.
|
||||
The relay can be upgraded by inserting a [wireless network card](../item/wlanCard1.md) to also relay messages wirelessly. Wireless messages can be received and relayed by other relays with a wireless network card, or by [computers](../general/computer.md) with a wireless network card.
|
||||
|
||||
Alternatively the relay can be upgraded using [linked cards](../item/linkedCard.md). In this case it will forward messages through the tunnel provided by the linked card, too; at the usual cost, so make sure the relay is sufficiently powered.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
Unlike [computers](../general/computer.md), robots can move around and interact with the world much like a player can. They can *not* interact with external components, however! If you need to communicate with a [computer](../general/computer.md) or other robots, use a [wireless network card](../item/wlanCard.md), or create some low-level protocol using redstone signals via a [redstone card](../item/redstoneCard1.md), for example.
|
||||
Unlike [computers](../general/computer.md), robots can move around and interact with the world much like a player can. They can *not* interact with external components, however! If you need to communicate with a [computer](../general/computer.md) or other robots, use a [wireless network card](../item/wlanCard1.md), or create some low-level protocol using redstone signals via a [redstone card](../item/redstoneCard1.md), for example.
|
||||
|
||||
Robots are built by placing a [computer case](case1.md) of any tier in an [assembler](assembler.md). Higher tier [computer cases](case1.md) can build more complex robots, due to being able to hold a higher tier [CPU](../item/cpu1.md). Complexity of the robot (as shown in the [assembler](assembler.md)) is determined by the tier of the components and upgrades placed in the robot slots; higher tier components will increase the complexity more than a lower tier component. If the complexity of the robot is too high, the [assembler](assembler.md) will not build the robot.
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
The switch can be used to allow different subnetworks to send network messages to each other, without exposing components to [computers](../general/computer.md) in other networks. Keeping components local is usually a good idea, to avoid [computers](../general/computer.md) using the wrong [screen](screen1.md) or to avoid component overflows to happen (causing [computers](../general/computer.md) to crash and refuse to boot up).
|
||||
|
||||
There is also a wireless variation of this block, called the [access point](accessPoint.md), which will also relay messages wirelessly. Wireless messages can be received and relayed by other [access points](accessPoint.md), or by [computers](../general/computer.md) with a [wireless network card](../item/wlanCard.md).
|
||||
There is also a wireless variation of this block, called the [access point](accessPoint.md), which will also relay messages wirelessly. Wireless messages can be received and relayed by other [access points](accessPoint.md), or by [computers](../general/computer.md) with a [wireless network card](../item/wlanCard1.md).
|
||||
|
||||
Switches and [access points](accessPoint.md) do *not* keep track of which packets they relayed recently, so avoid cycles in your network or you may receive the same packet multiple times. Due to the limited buffer size of switches, sending messages too frequently will result in packet loss. You can upgrade your switches and [access points](accessPoint.md) to increase the speed with which they relay messages, as well as their internal message queue size.
|
||||
|
||||
|
@ -27,7 +27,7 @@ Keep in mind that some of these may not be available, depending on the recipe se
|
||||
* [Linked Card](linkedCard.md)
|
||||
* [Network Card](lanCard.md)
|
||||
* [Redstone Card](redstoneCard1.md)
|
||||
* [Wireless Network Card](wlanCard.md)
|
||||
* [Wireless Network Card](wlanCard1.md)
|
||||
* [World Sensor Card](worldSensorCard.md)
|
||||
|
||||
### Upgrades
|
||||
|
@ -10,7 +10,7 @@ Nanomachines provide a certain number of "inputs" that can be triggered, causing
|
||||
|
||||
Which input triggers what effect depends on the current configuration of the nanomachines, the actual "connections" being random per configuration. This means you'll have to try enabling different inputs to see what they do. If you're unhappy with a configuration, you can always reconfigure your nanomachines by injecting a new batch (just eat some more). To completely get rid of the nanomachines in you, consider drinking some [grog](acid.md). Beware that enabling too many inputs at a time has severe negative effects on you!
|
||||
|
||||
By default, the nanomachines will be on standby. You'll need to control them using wireless messages, so carrying a [tablet](tablet.md) with a [wireless network card](wlanCard.md) is strongly recommended. Nanomachines will only react to wireless signals emitted by devices no further than two meters away, but they will react to messages on any port, and from any device!
|
||||
By default, the nanomachines will be on standby. You'll need to control them using wireless messages, so carrying a [tablet](tablet.md) with a [wireless network card](wlanCard1.md) is strongly recommended. Nanomachines will only react to wireless signals emitted by devices no further than two meters away, but they will react to messages on any port, and from any device!
|
||||
|
||||
Nanomachines react to a simple, proprietary protocol: each packet must consist of multiple parts, the first of which is the "header" and must equal the string `nanomachines`. The second part must be the command name. Additional parts are parameters for the command. The following commands are available, formatted as `commandName(arg1, ...)`:
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# WLAN Card
|
||||
|
||||

|
||||

|
||||
|
||||
The wireless network card is an upgraded [network card](lanCard.md) that, in addition to wired network messages, can also send and receive wireless network messages. The signal strength directly controls the distance up to which a sent message can be received, where the strength is equal to the distance in blocks.
|
||||
The wireless network card is an upgraded [network card](lanCard.md) that can send and receive wireless network messages. Tier two cards can also send and receive wired messages. The signal strength directly controls the distance up to which a sent message can be received, where the strength is equal to the distance in blocks.
|
||||
|
||||
The higher the signal strength, the more energy it will take to send a single message. The terrain between the sender and receiver also determines whether a message will be successfully transmitted or not. To penetrate a block, the blocks hardness is subtracted from the signal strength - with the minimum being one for air blocks. If no strength remains to reach the receiver, the message will not be received. This is not an exact science however - sometimes messages may still reach the target. In general you will want to make sure the line of sight between the sender and receiver is clear.
|
@ -0,0 +1 @@
|
||||
#REDIRECT wlanCard1.md
|
@ -0,0 +1 @@
|
||||
#REDIRECT componentBus1.md
|
@ -2,6 +2,6 @@
|
||||
|
||||

|
||||
|
||||
Le projecteur d'hologramme est un afficheur volumétrique, c'est à dire qu'il fournit un tableau de voxels en trois dimensions qui peuvent être individuellement par un [ordinateur](../general/computer.md) auquel il serait connecté. Le deuxième niveau de projecteur, même s'il a la même résolution que le projecteur de niveau 1, gère l'affichage de chaque voxel avec trois couleurs définissable par l'utilisateur.
|
||||
Le projecteur d'hologramme est un afficheur volumétrique, c'est à dire qu'il fournit un tableau de voxels en trois dimensions qui peuvent être contrôlés individuellement par un [ordinateur](../general/computer.md) auquel il serait connecté. Le deuxième niveau de projecteur, même s'il a la même résolution que le projecteur de niveau 1, gère l'affichage de chaque voxel avec trois couleurs définissable par l'utilisateur.
|
||||
|
||||
Les hologrammes peuvent être pivotés sur leur axe vertical en les frappant sur le haut ou le bas du projecteur avec une [clé](../item/wrench.md). Cela peut économiser beaucoup d'efforts, pour que la sortie ne soit pas transformée côté programme. Les hologrammes peuvent également être redimensionnés à volonté.
|
||||
|
@ -18,7 +18,7 @@ Gardez en tête que certains d'entre eux ne sont pas disponibles, en fonction de
|
||||
* [Ecran](screen1.md)
|
||||
|
||||
### Stockage
|
||||
* [Lecteur de disquette](diskDrive.md)
|
||||
* [Lecteur de disquettes](diskDrive.md)
|
||||
* [RAID](raid.md)
|
||||
|
||||
### Extensions
|
||||
|
@ -8,4 +8,4 @@ Le RAID fonctionne uniquement (et se présente en tant que système de fichiers)
|
||||
|
||||
Faites attention, car l'ajout d'un [disque dur](../item/hdd1.md) au bloc de RAID effacera son contenu. Retirer un [disque dur](../item/hdd1.md) du RAID effacera le contenu complet du RAID. Remettre le disque en place *ne restaurera pas* les anciens fichiers; le RAID sera ré-initialisé en tant que système de fichiers vierge.
|
||||
|
||||
Casser un bloc de RAID gardera son contenu, dons il peut être déplacé en tout sécurité sans risque de perte de données.
|
||||
Casser un bloc de RAID gardera son contenu, il peut donc être déplacé en tout sécurité sans risque de perte de données.
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
Le relai peut être utilisé pour permettre à différents sous-réseaux de s'envoyer des messages réseau entre eux, sans exposer leurs composants aux [ordinateurs](../general/computer.md) des autres réseaux. Maintenir l'état "local" d'un composant est généralement une bonne idée, pour éviter aux [ordinateurs](../general/computer.md) d'utiliser le mauvais [écran](screen1.md) ou pour éviter qu'une surcharge de composants survienne (ce qui provoque le crash de l'[ordinateur](../general/computer.md) et l'empêche de démarrer).
|
||||
|
||||
Le relai peut être amélioré en insérant une [carte de réseau sans-fil](../item/wlanCard.md) pour relayer aussi des messages sans-fil. Les messages sans-fil peuvent être reçus et relayés par d'autres relais avec une carte de réseau sans-fil, ou par des ordinateurs équipés d'une carte réseau sans-fil.
|
||||
Le relai peut être amélioré en insérant une [carte de réseau sans-fil](../item/wlanCard1.md) pour relayer aussi des messages sans-fil. Les messages sans-fil peuvent être reçus et relayés par d'autres relais avec une carte de réseau sans-fil, ou par des ordinateurs équipés d'une carte réseau sans-fil.
|
||||
|
||||
Par ailleurs, le relai peut être amélioré en utilisé des [cartes liées](../item/linkedCard.md). Dans ce cas, il transmettra aussi les messages à travers le tunnel de la carte liée; ceci aura le coût habituel, donc assurez vous que le relai a suffisamment d'énergie.
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||

|
||||
|
||||
Contrairement aux [ordinateurs](../general/computer.md), les robots peuvent se déplacer et interagir avec le monde un peu comme un joueur. Ils *ne peuvent pas* interagir avec des composants externes, cependant ! Si vous avez besoin de communiquer avec un [ordinateur](../general/computer.md) ou d'autres robots, utilisez une [carte réseau sans-fil](../item/wlanCard.md), ou créez une sorte de protocle de bas niveau en utilisant les signaux de redstone via une [carte de redstone](../item/redstoneCard1.md), par exemple.
|
||||
Contrairement aux [ordinateurs](../general/computer.md), les robots peuvent se déplacer et interagir avec le monde un peu comme un joueur. Ils *ne peuvent pas* interagir avec des composants externes, cependant ! Si vous avez besoin de communiquer avec un [ordinateur](../general/computer.md) ou d'autres robots, utilisez une [carte réseau sans-fil](../item/wlanCard1.md), ou créez une sorte de protocle de bas niveau en utilisant les signaux de redstone via une [carte de redstone](../item/redstoneCard1.md), par exemple.
|
||||
|
||||
Les robots sont construits en plaçant un [boîtier d'ordinateur](case1.md) de n'importe quel niveau dans un [assembleur](assembler.md). Des [boîtiers](case1.md) de plus haut niveau permettent de construire des robots plus complexes, grâce à leur capacité à contenir un [processeur](../item/cpu1.md) plus puissant. La complexité du robot (affichée dans l'[assembleur](assembler.md)) est déterminée par le niveau des composants et améliorations placés dans les emplacements du robot; des composants de plus haut niveau augmenteront d'avantage la complexité qu'un composant de plus bas niveau. Si la complexité du robot est trop élevée, l'[assembleur](assembler.md) ne construira pas le robot.
|
||||
|
||||
De nombreuses améliorations peuvent être placées dans les robots pour augmenter les fonctionnalités. Cela inclut les amélioration d'[inventaire](../item/inventoryUpgrade.md) et de [contrôle d'inventaire](../item/inventoryControllerUpgrade.md), de [réservoir](../item/tankUpgrade.md), de [navigation](../item/navigationUpgrade.md), entre autres. Les conteneurs d'[amélioration](../item/upgradeContainer1.md) et de [carte](../item/cardContainer1.md) et de [carte](../item/cardContainer1.md) peuvent être placés dans le robot pour insérer et retirer des composants et des améliorations à la volée. Un [lecteur de disquettes](diskDrive.md) peut également être placé dans le robot pour permettre l'insertion de [disquettes](../item/floppy.md), ce qui vous permettra d'installer [OpenOS](../general/openOS.md) sur le robot (une alternative est d'installer [OpenOS](../general/openOS.md) sur un [disque dur](../item/hdd1.md) vierge en utilisant un [ordinateur](../general/computer.md), et d'utiliser le [disque dur](../item/hdd1.md) pré-installé comme un composant dans l'assembleur de robot).
|
||||
De nombreuses améliorations peuvent être placées dans les robots pour augmenter les fonctionnalités. Cela inclut les amélioration d'[inventaire](../item/inventoryUpgrade.md) et de [contrôle d'inventaire](../item/inventoryControllerUpgrade.md), de [réservoir](../item/tankUpgrade.md), de [navigation](../item/navigationUpgrade.md), entre autres. Les conteneurs d'[amélioration](../item/upgradeContainer1.md) et de [carte](../item/cardContainer1.md) peuvent être placés dans le robot pour insérer et retirer des composants et des améliorations à la volée. Un [lecteur de disquettes](diskDrive.md) peut également être placé dans le robot pour permettre l'insertion de [disquettes](../item/floppy.md), ce qui vous permettra d'installer [OpenOS](../general/openOS.md) sur le robot (une alternative est d'installer [OpenOS](../general/openOS.md) sur un [disque dur](../item/hdd1.md) vierge en utilisant un [ordinateur](../general/computer.md), et d'utiliser le [disque dur](../item/hdd1.md) pré-installé comme un composant dans l'assembleur de robot).
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Le routeur peut être utilisé pour permettre à différents sous-réseaux de s'envoyer des messages réseau entre eux, sans exposer leurs composants aux [ordinateurs](../general/computer.md) des autres réseaux. Maintenir l'état "local" d'un composant est généralement une bonne idée, pour éviter aux [ordinateurs](../general/computer.md) d'utiliser le mauvais [écran](screen1.md) ou pour éviter qu'une surcharge de composants survienne (ce qui provoque le crash de l'[ordinateur](../general/computer.md) et l'empêche de démarrer).
|
||||
|
||||
Il y a également une version sans-fil de ce bloc, appelée le [point d'accès](accessPoint.md), qui peut aussi relayer des messages sans-fil. Les messages sans-fil peuvent être reçus et relayés par d'autres [points d'accès](accessPoint.md), ou par des [ordinateurs](../general/computer.md) équipés d'une [carte réseau sans-fil](../item/wlanCard.md).
|
||||
Il y a également une version sans-fil de ce bloc, appelée le [point d'accès](accessPoint.md), qui peut aussi relayer des messages sans-fil. Les messages sans-fil peuvent être reçus et relayés par d'autres [points d'accès](accessPoint.md), ou par des [ordinateurs](../general/computer.md) équipés d'une [carte réseau sans-fil](../item/wlanCard1.md).
|
||||
|
||||
Les routeurs et [points d'accès](accessPoint.md) ne gardent *pas* de trace des paquets qu'ils ont récemment relayé, donc évitez les boucles dans votre réseau ou vous pourriez recevoir le même paquet plusieurs fois. A cause de la taille limitée de la mémoire tampon des routeurs, une perte des paquets peut survenir si vous essayez d'envoyer des messages réseau trop fréquemment. Vous pouvez améliorer vos routeurs et points d'accès pour augmenter la vitesse à laquelle ils relaient les messages, ainsi que la taille interne de la file des messages.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Lua
|
||||
|
||||
Le [manuel de référence](http://www.lua.org/manual/5.2/manual.html) en Lua et le livre [Programming Lua](http://www.lua.org/pil/) (la première édition est disponible gratuitement en ligne) sont un bon endroit pour démarrer avec les bases de Lua et se familiariser avec la synntaxe de base et les bibliothèques standard. [OpenOS](openOS.md) s'efforce d'émuler les bibliothèques standard au plus près, avec quelques écarts, comme la bibliothèque de débogage qui est principalement absente (pour des raisons de sécurité liées au mode "bac à sable"). Ces différences sont [documentées sur le wiki](http://ocdoc.cil.li/api:non-standard-lua-libs).
|
||||
Le [manuel de référence](http://www.lua.org/manual/5.2/manual.html) en Lua et le livre [Programming Lua](http://www.lua.org/pil/) (la première édition est disponible gratuitement en ligne) sont un bon endroit pour démarrer avec les bases de Lua et se familiariser avec la syntaxe de base et les bibliothèques standard. [OpenOS](openOS.md) s'efforce d'émuler les bibliothèques standard au plus près, avec quelques écarts, comme la bibliothèque de débogage qui est principalement absente (pour des raisons de sécurité liées au mode "bac à sable"). Ces différences sont [documentées sur le wiki](http://ocdoc.cil.li/api:non-standard-lua-libs).
|
||||
|
||||
Les bibliothèques non-standard devront être importées avec `require` pour les utiliser dans un script. Par exemple :
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||
OpenOS est un système d'exploitation basique disponible dans OpenComputers. Il est nécessaire pour faire démarrer un [ordinateur](computer.md) pour la première fois, et peut être fabriqué en plaçant une [disquette](../item/floppy.md) vide et un manuel d'OpenComputers dans une table de craft.
|
||||
|
||||
Une fois créée, la [disquette](../item/floppy.md) peut être placée dans un [lecteur de disquette](../block/diskDrive.md) connectée à un système [informatique](computer.md) [correctement configuré](quickstart.md), ce qui permettra à l'[ordinateur](computer.md) de lancer OpenOS.
|
||||
Une fois démarré, il est conseillé d'installer OpenOS sur un [disque dur](../item/hdd1.md) vierge, ce qui évite la nécessité d'une [disquette](../item/floppy.md) et donne accès à un système de fichiers en lecture/écriture (la [disquette](../item/floppy.md) d'OpenOS et les autres disquettes "trouvées" sont en lecture seule). Un [boîtier](../block/case3.md) de niveau 3 n'a pas besoin de [lecteur de disquette](../block/diskDrive.md), car il a un emplacement intégré pour les [disquettes](../item/floppy.md).
|
||||
Une fois créée, la [disquette](../item/floppy.md) peut être placée dans un [lecteur de disquettes](../block/diskDrive.md) connectée à un système [informatique](computer.md) [correctement configuré](quickstart.md), ce qui permettra à l'[ordinateur](computer.md) de lancer OpenOS.
|
||||
Une fois démarré, il est conseillé d'installer OpenOS sur un [disque dur](../item/hdd1.md) vierge, ce qui évite la nécessité d'une [disquette](../item/floppy.md) et donne accès à un système de fichiers en lecture/écriture (la [disquette](../item/floppy.md) d'OpenOS et les autres disquettes "trouvées" sont en lecture seule). Un [boîtier](../block/case3.md) de niveau 3 n'a pas besoin de [lecteur de disquettes](../block/diskDrive.md), car il a un emplacement intégré pour les [disquettes](../item/floppy.md).
|
||||
|
||||
OpenOS peut être installé en écrivant simplement `install`, et en suivant les informations affichées à l'écran pour finaliser l'installation. La [disquette](../item/floppy.md) peut être retirée une fois que le système a été redémarré. OpenOS peut être installé sur tous les appareils sauf les [drones](../item/drone.md) et les [micro-contrôleurs](../block/microcontroller.md) (ils nécessitent tous les deux une programmation manuelle d'une [EEPROM](../item/eeprom.md) pour fournir des fonctionnalités, parce qu'ils n'ont pas de système de fichiers intégré).
|
||||
|
||||
|
@ -32,8 +32,8 @@ Tous les appareils sont modulaires et peuvent être assemblés avec une grande v
|
||||
|
||||
Les appareils d'OpenComputers sont compatibles avec différents mods pour la manipulation de blocs et d'entités (à travers l'[adaptateur](block/adapter.md), ou des améliorations spécifiques d'un [robot](block/robot.md) ou d'un [drone](item/drone.md)). L'énergie peut être fournie grâce à une large gamme de mods, incluant, sans limitation, les Redstone Flux, les EU d'IndustrialCraft2, les Joules de Mekanism, l'énergie d'Applied Energistics 2 autant que la charge de Factorization.
|
||||
|
||||
Les appareils d'OpenComputers ont des fonctionnalités supplémentaires ainsi que quelques limitations. Les [ordinateurs](general/computer.md) sont la base, et sont capables de contenir un bon nombre de composants, contrôlés par le niveau du processeur utilisé. Les [ordinateurs](general/computer.md) ont également accès aux composants par leurs six faces. Les [serveurs](item/server1.md) sont capables de se connecter à plus de composants (en interne ou en externe) qu'un [ordinateur](general/computer.md), en utilisant des [bus de composants](item/componentBus1.md); cependant, à cause du [support de serveur](block/serverRack.md), le [serveur](item/server1.md) est seulement capable d'accéder aux composants par une unique face du [support de serveur](block/serverRack.md), tel que configuré dans l'interface du [server rack](block/serverRack.md). Les [micro-contrôleurs](block/microcontroller.md) sont encore plus limités (comparés aux [ordinateurs](general/computer.md)) par leur manque d'emplacements de [disque dur](item/hdd1.md) et de [lecteur de disquette](block/diskDrive.md), ce qui veut dire qu'[OpenOS](general/openOS.md) ne peut pas être installé sur un [micro-contrôleur](block/microcontroller.md). Les [micro-contrôleurs](block/microcontroller.md) ont un emplacement pour une [EEPROM](item/eeprom.md), et peuvent être programmés avec un système d'exploitation plus spécifique pour un ensemble limité de tâches.
|
||||
Les appareils d'OpenComputers ont des fonctionnalités supplémentaires ainsi que quelques limitations. Les [ordinateurs](general/computer.md) sont la base, et sont capables de contenir un bon nombre de composants, contrôlés par le niveau du processeur utilisé. Les [ordinateurs](general/computer.md) ont également accès aux composants par leurs six faces. Les [serveurs](item/server1.md) sont capables de se connecter à plus de composants (en interne ou en externe) qu'un [ordinateur](general/computer.md), en utilisant des [bus de composants](item/componentBus1.md); cependant, à cause du [support de serveur](block/serverRack.md), le [serveur](item/server1.md) est seulement capable d'accéder aux composants par une unique face du [support de serveur](block/serverRack.md), tel que configuré dans l'interface du [server rack](block/serverRack.md). Les [micro-contrôleurs](block/microcontroller.md) sont encore plus limités (comparés aux [ordinateurs](general/computer.md)) par leur manque d'emplacements de [disque dur](item/hdd1.md) et de [lecteur de disquettes](block/diskDrive.md), ce qui veut dire qu'[OpenOS](general/openOS.md) ne peut pas être installé sur un [micro-contrôleur](block/microcontroller.md). Les [micro-contrôleurs](block/microcontroller.md) ont un emplacement pour une [EEPROM](item/eeprom.md), et peuvent être programmés avec un système d'exploitation plus spécifique pour un ensemble limité de tâches.
|
||||
|
||||
Les [robots](block/robot.md) sont des [ordinateurs](general/computer.md) mobiles, et sont capables d'interagir avec le monde (mais ne peuvent pas interagir avec d'autres blocs d'OpenComputers). Contrairement aux [ordinateurs](general/computer.md), une fois qu'un robot est construit, les composants à l'intérieur du [robot](block/robot.md) ne peuvent pas être retirés. Pour contourner cette limitation, les [robots](block/robot.md) peuvent être construits avec des conteneurs d'[amélioration](item/upgradeContainer1.md) ou de [carte](item/cardContainer1.md), ce qui permettra d'échanger à la volée des cartes ou des améliorations, si nécessaire. [OpenOS](general/openOS.md) peut être installé sur les [robots](block/robot.md) en plaçant un [lecteur de disquette](block/diskDrive.md) dans un emplacement de conteneur, ce qui permettra l'insertion de [disquettes](item/floppy.md), ou en plaçant un [disque dur](item/hdd1.md) avec [OpenOS](general/openOS.md) pré-installé dans l'un des emplacements de [disque dur](item/hdd1.md). Pour complètement reconfigurer un [robot](block/robot.md), il devra être [désassemblé](block/disassembler.md) avant. Les [drones](item/drone.md) sont une version limitée des [robots](block/robot.md). Ils se déplacent différemment, ont moins d'emplacements d'inventaire, et n'ont pas de système d'exploitation (à l'instar des [micro-contrôleurs](block/microcontroller.md), les [drones](item/drone.md) peuvent être configurés avec une [EEPROM](item/eeprom.md) programmée pour un ensemble limité de tâches). Pour la plupart, les [robots](block/robot.md) et les [drones](item/drone.md) partagent les mêmes améliorations et composants; cependant, les améliorations se comportent différemment avec les [drones](item/drone.md), comme les [améliorations d'inventaire](item/inventoryUpgrade.md) qui fournissent seulement 4 emplacements par amélioration, pour un total de 8 emplacements, tandis que les [robots](block/robot.md) sont capables d'accepter plus d'[améliorations d'inventaire](item/inventoryUpgrade.md) (pour un total de 4) ainsi que l'obtention de plus d'emplacements par amélioration (16 emplacements par amélioration).
|
||||
Les [robots](block/robot.md) sont des [ordinateurs](general/computer.md) mobiles, et sont capables d'interagir avec le monde (mais ne peuvent pas interagir avec d'autres blocs d'OpenComputers). Contrairement aux [ordinateurs](general/computer.md), une fois qu'un robot est construit, les composants à l'intérieur du [robot](block/robot.md) ne peuvent pas être retirés. Pour contourner cette limitation, les [robots](block/robot.md) peuvent être construits avec des conteneurs d'[amélioration](item/upgradeContainer1.md) ou de [carte](item/cardContainer1.md), ce qui permettra d'échanger à la volée des cartes ou des améliorations, si nécessaire. [OpenOS](general/openOS.md) peut être installé sur les [robots](block/robot.md) en plaçant un [lecteur de disquettes](block/diskDrive.md) dans un emplacement de conteneur, ce qui permettra l'insertion de [disquettes](item/floppy.md), ou en plaçant un [disque dur](item/hdd1.md) avec [OpenOS](general/openOS.md) pré-installé dans l'un des emplacements de [disque dur](item/hdd1.md). Pour complètement reconfigurer un [robot](block/robot.md), il devra être [désassemblé](block/disassembler.md) avant. Les [drones](item/drone.md) sont une version limitée des [robots](block/robot.md). Ils se déplacent différemment, ont moins d'emplacements d'inventaire, et n'ont pas de système d'exploitation (à l'instar des [micro-contrôleurs](block/microcontroller.md), les [drones](item/drone.md) peuvent être configurés avec une [EEPROM](item/eeprom.md) programmée pour un ensemble limité de tâches). Pour la plupart, les [robots](block/robot.md) et les [drones](item/drone.md) partagent les mêmes améliorations et composants; cependant, les améliorations se comportent différemment avec les [drones](item/drone.md), comme les [améliorations d'inventaire](item/inventoryUpgrade.md) qui fournissent seulement 4 emplacements par amélioration, pour un total de 8 emplacements, tandis que les [robots](block/robot.md) sont capables d'accepter plus d'[améliorations d'inventaire](item/inventoryUpgrade.md) (pour un total de 4) ainsi que l'obtention de plus d'emplacements par amélioration (16 emplacements par amélioration).
|
||||
|
||||
Ce manuel contient des informations détaillées concernant tous les blocs et objets, comment mettre en place différents types de systèmes et d'appareils, ainsi qu'une introduction à la programmation.
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT componentBus1.md
|
@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
L'amélioration de base de données peut être configurée pour stocker un liste de représentation de groupes d'objets, qui peuvent ensuite être utilisés par d'autres composants. C'est particulièrement utile pour les objets qui sont uniquement distinguables par leurs données NBT, ce qui ne fait pas partie des données affichées de base pour un groupe d'objets.
|
||||
L'amélioration de base de données peut être configurée pour stocker une liste de représentations de groupes d'objets, qui peuvent ensuite être utilisés par d'autres composants. C'est particulièrement utile pour les objets qui sont uniquement distinguables par leurs données NBT, ce qui ne fait pas partie des données affichées de base pour un groupe d'objets.
|
||||
|
||||
Pour configurer une base de données, ouvrez la en faisant un clic droit avec la base de données dans la main. Placez les objets avec lesquels vous souhaitez la configurer dans l'inventaire du haut. Cela stockera un "objet fantôme", ce qui veut dire qu'aucun objet "réel" n'est stocké dans la base de données.
|
||||
|
||||
|
@ -2,4 +2,4 @@
|
||||
|
||||

|
||||
|
||||
Le disque dur est un moyen de stockage de données de haut niveau dans OpenComputers. Tous les moyens de stockage de données fonctionnent à la même vitesse ; un moyen de stockage de plus haut niveau fournit juste plus d'espace. Il y a également quelques appareils qui peuvent seulement utiliser les disques durs (bien que les serveurs pourraient utiliser un [lecteur de disquette](../block/diskDrive.md) externe, par exemple). Les disques durs peuvent être placés dans un [raid](../block/raid.md), ce qui permet à plusieurs disques de partager le même système de fichiers. Remarquez que placer un disque dur dans un [raid](../block/raid.md) efface le contenu du disque.
|
||||
Le disque dur est un moyen de stockage de données de haut niveau dans OpenComputers. Tous les moyens de stockage de données fonctionnent à la même vitesse ; un moyen de stockage de plus haut niveau fournit juste plus d'espace. Il y a également quelques appareils qui peuvent seulement utiliser les disques durs (bien que les serveurs pourraient utiliser un [lecteur de disquettes](../block/diskDrive.md) externe, par exemple). Les disques durs peuvent être placés dans un [raid](../block/raid.md), ce qui permet à plusieurs disques de partager le même système de fichiers. Remarquez que placer un disque dur dans un [raid](../block/raid.md) efface le contenu du disque.
|
||||
|
@ -27,7 +27,7 @@ Gardez en tête que certains d'entre eux ne sont pas disponibles, en fonction de
|
||||
* [Carte liée](linkedCard.md)
|
||||
* [Carte réseau](lanCard.md)
|
||||
* [Carte de Redstone](redstoneCard1.md)
|
||||
* [Carte de réseau sans-fil](wlanCard.md)
|
||||
* [Carte de réseau sans-fil](wlanCard1.md)
|
||||
* [Carte de capteur du monde](worldSensorCard.md)
|
||||
|
||||
### Améliorations
|
||||
|
@ -2,6 +2,6 @@
|
||||
|
||||

|
||||
|
||||
L'amélioration du contrôleur d'inventaire permet aux [robots](../block/robot.md) et aux [drones](drone.md) des capacités d'interaction étendues avec les inventaires. Elle permet à un appareil de viser spécifiquement un emplacement dans un inventaire externe quand il lâche ou ramasse un objet. Elle permet également à un appareil de lire des informations détaillées à propos d'un objet. Enfin, elle fournit aux [robots](../block/robot.md) un moyen de changer leur outil équipé sans aide extérieure.
|
||||
L'amélioration du contrôleur d'inventaire donne aux [robots](../block/robot.md) et aux [drones](drone.md) des capacités d'interactions étendues avec les inventaires. Elle permet à un appareil de viser spécifiquement un emplacement dans un inventaire externe quand il lâche ou ramasse un objet. Elle permet également à un appareil de lire des informations détaillées à propos d'un objet. Enfin, elle fournit aux [robots](../block/robot.md) un moyen de changer leur outil équipé sans aide extérieure.
|
||||
|
||||
Cette amélioration peut également être placée dans un [adaptateur](../block/adapter.md), ce qui lui permet d'utiliser des méthodes d'inspection d'inventaires adjacents similaires à celles des [robots](../block/robot.md). Cependant, elle ne permet pas à l'[adaptateur](../block/adapter.md) de déplacer des objets hors et vers ces inventaires. Cette fonctionnalité est seulement disponible pour les [robots](../block/robot.md) et les [drones](drone.md).
|
||||
|
@ -10,7 +10,7 @@ Les nanomachines fournissent un certain nombre "d'entrées" qui peuvent être ac
|
||||
|
||||
En fonction de la configuration des nanomachines, les entrées déclenchent différents effets, les "connexions" étant aléatoires par configuration. Cela signifie que vous devrez essayer d'activer différentes entrées pour découvrir ce qu'elles activent. Si vous n'êtes pas satisfaits d'une configuration, vous pouvez reconfigurer vos nanomachines en en injectant d'autres (mangez en d'autres). Pour vous débarrasser complètement des nanomachines en vous, buvez du [grog](acid.md). Faites attention, activer trop d'entrées à la fois peut avoir de sérieuses conséquences sur votre organisme !
|
||||
|
||||
Par défaut, les nanomachines seront passives. Vous devrez les contrôler en utilisant des messages sans fil, donc transporter une [tablette](tablet.md) avec une [carte de réseau sans-fil](wlanCard.md) est vivement recommandé. Les nanomachines réagiront seulement aux signaux sans fil émis par des appareils situés à moins de 2 mètres, mais elles réagiront aux messages provenant de n'importe quel port, et de n'importe quel appareil !
|
||||
Par défaut, les nanomachines seront passives. Vous devrez les contrôler en utilisant des messages sans fil, donc transporter une [tablette](tablet.md) avec une [carte de réseau sans-fil](wlanCard1.md) est vivement recommandé. Les nanomachines réagiront seulement aux signaux sans fil émis par des appareils situés à moins de 2 mètres, mais elles réagiront aux messages provenant de n'importe quel port, et de n'importe quel appareil !
|
||||
|
||||
Les nanomachines réagissent à un protocole propriétaire très simple : chaque paquet doit être constitué de plusieurs parties, la première étant le "header" (en-tête) et qui doit valoir `nanomachines`. La deuxième partie doit être le nom de la commande. Les parties supplémentaires sont les paramètres de la commande. Les commandes suivantes sont disponibles, avec le format `nomDeLaCommande(argument1, ...)` :
|
||||
|
||||
|
@ -4,6 +4,6 @@
|
||||
|
||||
La carte de redstone permet aux [ordinateurs](../general/computer.md) de lire et émettre des signaux de redstone analogiques dans les blocs adjacents. Quand la force d'un signal entrant change, un signal est injecté dans l'[ordinateur](../general/computer.md).
|
||||
|
||||
Si un des mods supportés fournissant des câbles empaquetés (bundled) est présent, comme RedLogic, Project:Red ou Minefactory Reloaded; ou un mod qui fournit des capacités de signal sans fil, comme WirelessRedstone-ChickenBonesEdition (WR-CBE), ou le Slimevoid's Wireless mod, un carte de redstone de niveau 2 est disponible pour interagir avec ces systèmes.
|
||||
Si un des mods supportés fournissant des câbles empaquetés (bundled) est présent, comme RedLogic, Project:Red ou Minefactory Reloaded; ou un mod qui fournit des capacités de signal sans fil, comme WirelessRedstone-ChickenBonesEdition (WR-CBE), ou le Slimevoid's Wireless mod, une carte de redstone de niveau 2 est disponible pour interagir avec ces systèmes.
|
||||
|
||||
Le côté renseigné dans les méthodes de la carte est relatif à l'orientation du [boîtier d'ordinateur](../block/case1.md) / [robot](../block/robot.md) / [support de serveur](../block/serverRack.md). Cela signifie que quand vous regardez l'avant d'un ordinateur, le côté `sides.right` est à votre gauche, et inversement.
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Carte de réseau sans-fil
|
||||
|
||||

|
||||

|
||||
|
||||
La carte de réseau sans fil est une [carte réseau](lanCard.md) améliorée qui, en plus de gérer les messages réseaux filaires, peut également envoyer et recevoir des messages réseaux sans fil. La force du signal contrôle directement la distance jusqu'à laquelle un message peut être reçu, avec cette force étant égale à la distance en blocs.
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT wlanCard1.md
|
@ -4,7 +4,7 @@
|
||||
|
||||
Ретранслятор используется для передачи сообщений между несколькими подсетями без предоставления компонентов [компьютерам](../general/computer.md) в других подсетях. Как правило, изоляция компонентов - хорошая идея, чтобы не позволить [компьютерам](../general/computer.md) использовать не тот [монитор](screen1.md) или избежать достижения лимита компонентов (в результате чего [компьютеры](../general/computer.md) выключатся и отказываются загружаться).
|
||||
|
||||
Может быть улучшен добавлением [беспроводной сетевой карты](../item/wlanCard.md), что позволит ретранслировать беспроводные сообщения. Сообщения, переданные по беспроводной линии, могут быть получены или перенаправлены другими ретрансляторами или [компьютерами](../general/computer.md) с [беспроводной сетевой картой](../item/wlanCard.md).
|
||||
Может быть улучшен добавлением [беспроводной сетевой карты](../item/wlanCard1.md), что позволит ретранслировать беспроводные сообщения. Сообщения, переданные по беспроводной линии, могут быть получены или перенаправлены другими ретрансляторами или [компьютерами](../general/computer.md) с [беспроводной сетевой картой](../item/wlanCard1.md).
|
||||
|
||||
Также ретранслятор может быть улучшен с помощью [соединенной карты](../item/linkedCard.md). Это позволит передавать сообщения внутри туннеля, предоставленного картой, с соответствующими затратами энергии, поэтому убедитесь, что ретранслятору поступает достаточное количество энергии.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
В отличие от [компьютеров](../general/computer.md), роботы могут двигаться и взаимодействовать с игровым миром, как и игроки. Но они *не* могут взаимодействовать с внешними компонентами! Если вам нужно связать робота с [компьютером](../general/computer.md) или другими роботами, используйте [беспроводные сетевые карты](../item/wlanCard.md) или, например, создайте низкоуровневый протокол на основе красных сигналов и [плат на красном камне](../item/redstoneCard1.md).
|
||||
В отличие от [компьютеров](../general/computer.md), роботы могут двигаться и взаимодействовать с игровым миром, как и игроки. Но они *не* могут взаимодействовать с внешними компонентами! Если вам нужно связать робота с [компьютером](../general/computer.md) или другими роботами, используйте [беспроводные сетевые карты](../item/wlanCard1.md) или, например, создайте низкоуровневый протокол на основе красных сигналов и [плат на красном камне](../item/redstoneCard1.md).
|
||||
|
||||
Роботы создаются путем помещения [системного блока](case1.md) любого уровня в [сборщик](assembler.md). Чем выше уровень [системного блока](case1.md), тем более сложных роботов можно построить, благодаря возможности использовать [процессоры](../item/cpu1.md) высокого уровня. Сложность робота (показываемая в [сборщике](assembler.md)) определяется уровнем компонентов и улучшений, помещенных в слоты робота; компонент более высокого уровня увеличивает сложность больше, чем компонент уровня ниже. Если сложность робота превысила предел, тогда [сборщик](assembler.md) не сможет создать робота.
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Коммутатор используется для передачи сообщений между несколькими подсетями, без предоставления компонентов [компьютерам](../general/computer.md) в других подсетях. Как правило, изоляция компонентов - хорошая идея, чтобы не позволить [компьютерам](../general/computer.md) использовать не тот [монитор](screen1.md) или избежать достижения лимита компонентов (в результате чего [компьютеры](../general/computer.md) выключатся и отказываются загружаться).
|
||||
|
||||
Также есть беспроводная версия коммутатора, называемая [точкой доступа](accessPoint.md). С ее помощью сообщения передаются по беспроводному каналу. Беспроводные сообщения могут быть получены или перенаправлены другими [точками доступа](accessPoint.md) или [компьютерами](../general/computer.md) с [беспроводной сетевой картой](../item/wlanCard.md).
|
||||
Также есть беспроводная версия коммутатора, называемая [точкой доступа](accessPoint.md). С ее помощью сообщения передаются по беспроводному каналу. Беспроводные сообщения могут быть получены или перенаправлены другими [точками доступа](accessPoint.md) или [компьютерами](../general/computer.md) с [беспроводной сетевой картой](../item/wlanCard1.md).
|
||||
|
||||
Коммутаторы и [точки доступа](accessPoint.md) *не* отслеживают, какие пакеты и куда они передали, поэтому для в сети могут образовываться петли или вы можете получать одно сообщение несколько раз. Из-за ограниченного буфера сообщений коммутатора пакеты могут теряться, если их отсылать слишком часто. Вы можете улучшить коммутатор или [точку доступа](accessPoint.md) для увеличения скорости обработки сообщений, а также увеличения размера буфера сообщений.
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT componentBus1.md
|
@ -27,7 +27,7 @@
|
||||
* [Связанная карта](linkedCard.md)
|
||||
* [Сетевая карта](lanCard.md)
|
||||
* [Карта на красном камне](redstoneCard1.md)
|
||||
* [Беспроводная сетевая карта](wlanCard.md)
|
||||
* [Беспроводная сетевая карта](wlanCard1.md)
|
||||
* [Карта-мировой сенсор](worldSensorCard.md)
|
||||
|
||||
### Улучшения
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
Какой эффект получится при активации контакта, зависит от текущей конфигурации нанороботов, где сами связи между контактами и эффектами случайны для каждой конфигурации. Это означает, что потребуется активировать различные контакты, чтобы узнать, что они делают. Если вам не повезло с конфигурацией, вы всегда можете переконфигурировать ваших нанороботов, съев еще. Если вы захотите избавиться от них, выпейте [кислоту](acid.md). Помните, что большое количество одновременно активных контактов будет давать серьезные отрицательные эффекты!
|
||||
|
||||
По умолчанию нанороботы находятся в режиме ожидания. Вы можете контролировать их с помощью беспроводных сообщений, поэтому рекомендуется носить с собою [планшет](tablet.md) с [беспроводной сетевой картой](wlanCard.md). Нанороботы реагируют только на беспроводные сигналы, источник которых находится не дальше двух метров, но они реагируют на все сообщения на любом порту и с любых устройств!
|
||||
По умолчанию нанороботы находятся в режиме ожидания. Вы можете контролировать их с помощью беспроводных сообщений, поэтому рекомендуется носить с собою [планшет](tablet.md) с [беспроводной сетевой картой](wlanCard1.md). Нанороботы реагируют только на беспроводные сигналы, источник которых находится не дальше двух метров, но они реагируют на все сообщения на любом порту и с любых устройств!
|
||||
|
||||
Нанороботы работают по простому проепритарному протоколу: каждый пакет должен состоять из множества частей, где первый - это "заголовок", и он должен быть строкой с текстом `nanomachines`. Вторая часть должна быть именем команды. Остальные части - это параметры для команды. Доступны следующие команды (форматировано как `имякоманды(параметр1, ...)`):
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Беспроводная сетевая карта
|
||||
|
||||

|
||||

|
||||
|
||||
Беспроводная сетевая карта - это улучшенная версия [сетевой карты](lanCard.md), которая в дополнение к сообщениям по проводной линии также может принимать сообщения и по беспроводной сети. Сила сигнала напрямую контролирует, на каком расстоянии может быть получено отправленное сообщение, и равна расстоянию в блоках.
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT wlanCard1.md
|
@ -1,6 +1,6 @@
|
||||
# Robot
|
||||

|
||||
和电脑不同 ,机器人可以如同实体那样在地图上移动,但机器人无法和外界组件交互,但!如果要和电脑或者其他机器人通讯,请安装 [无线网卡](../item/wlanCard.md),或者是通过[红石卡](../item/redstoneCard1.md)收发红石信号建立底层的协议
|
||||
和电脑不同 ,机器人可以如同实体那样在地图上移动,但机器人无法和外界组件交互,但!如果要和电脑或者其他机器人通讯,请安装 [无线网卡](../item/wlanCard1.md),或者是通过[红石卡](../item/redstoneCard1.md)收发红石信号建立底层的协议
|
||||
|
||||
把[任意机箱](case1.md)放进[组装机](assembler.md)就可以制作机器人.
|
||||
高级的机箱由于有更高级的[CPU](../item/cpu1.md),可以制造更复杂的机器人. 机器人的复杂度 (显示在 [组装机](assembler.md)GUI) 由槽内安装的组件和升级决定;
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
可避免电脑链接到错误的屏幕,或者避免组件崩溃(可能崩掉电脑,并使之无法启动).
|
||||
|
||||
中继器可以安装[无线网卡](../item/wlanCard.md),发送无线消息.其他的中继器可接受并转发,或者是被有无线网卡的电脑收到.
|
||||
中继器可以安装[无线网卡](../item/wlanCard1.md),发送无线消息.其他的中继器可接受并转发,或者是被有无线网卡的电脑收到.
|
||||
|
||||
中继器也可以安装[连接卡](../item/linkedCard.md).消息被转发到链接卡的信道里面, 记得保持中继器能源.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
机器人不像 [电脑](../general/computer.md), 他们是可以像一个玩家一样去和世界交互的. 不过它们不能直接和其他设备交互! 如果需要和 [电脑](../general/computer.md) 和其他机器人通讯, 那么用[无线网卡](../item/wlanCard.md), 或者通过[红石卡](../item/redstoneCard1.md)实现更底层的协议去通信.
|
||||
机器人不像 [电脑](../general/computer.md), 他们是可以像一个玩家一样去和世界交互的. 不过它们不能直接和其他设备交互! 如果需要和 [电脑](../general/computer.md) 和其他机器人通讯, 那么用[无线网卡](../item/wlanCard1.md), 或者通过[红石卡](../item/redstoneCard1.md)实现更底层的协议去通信.
|
||||
|
||||
机器人通过将任意等级[机箱](case1.md) 放入 [组装机](assembler.md)制作的. 更高规格的[机箱](case1.md) 可以做出更复杂的机器人. 机器人的复杂度会显示在 [组装机](assembler.md),复杂度取决于携带和安装的卡片和扩展数量; 级别越高,数量越多,越复杂,达到一定程度组装机将罢工.
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
The switch can be used to allow different subnetworks to send network messages to each other, without exposing components to [computers](../general/computer.md) in other networks. Keeping components local is usually a good idea, to avoid [computers](../general/computer.md) using the wrong [screen](screen1.md) or to avoid component overflows to happen (causing [computers](../general/computer.md) to crash and refuse to boot up).
|
||||
|
||||
There is also a wireless variation of this block, called the [access point](accessPoint.md), which will also relay messages wirelessly. Wireless messages can be received and relayed by other [access points](accessPoint.md), or by [computers](../general/computer.md) with a [wireless network card](../item/wlanCard.md).
|
||||
There is also a wireless variation of this block, called the [access point](accessPoint.md), which will also relay messages wirelessly. Wireless messages can be received and relayed by other [access points](accessPoint.md), or by [computers](../general/computer.md) with a [wireless network card](../item/wlanCard1.md).
|
||||
|
||||
Switches and [access points](accessPoint.md) do *not* keep track of which packets they relayed recently, so avoid cycles in your network or you may receive the same packet multiple times. Due to the limited buffer size of switches, sending messages too frequently will result in packet loss. You can upgrade your switches and [access points](accessPoint.md) to increase the speed with which they relay messages, as well as their internal message queue size.
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT componentBus1.md
|
@ -27,7 +27,7 @@
|
||||
* [连接卡](linkedCard.md)
|
||||
* [网卡](lanCard.md)
|
||||
* [红石卡](redstoneCard1.md)
|
||||
* [无线网卡](wlanCard.md)
|
||||
* [无线网卡](wlanCard1.md)
|
||||
* [世界传感器卡](worldSensorCard.md)
|
||||
|
||||
### 升级
|
||||
|
@ -1,6 +1,6 @@
|
||||
# WLAN Card
|
||||
|
||||

|
||||

|
||||
|
||||
无线网卡是 [网卡](lanCard.md) 的升级, 添加了收发无线信号的能力.无线信号发射强度决定了信息可以传多远, 信号强度等于方块距离.
|
||||
|
@ -0,0 +1 @@
|
||||
#REDIRECT wlanCard1.md
|
@ -186,8 +186,8 @@
|
||||
00B9:00307030303030300000000000000000
|
||||
00BA:0000003C6666663C007E000000000000
|
||||
00BB:0000000000CC663366CC000000000000
|
||||
00BC:000066E66C6C18183032666ACFC20000
|
||||
00BD:000066E66C6C181830306C66CCCE0000
|
||||
00BC:000046C64C4C58183032666ACFC20000
|
||||
00BD:000046C64C4C581830306C66CCCE0000
|
||||
00BE:0000C6266C2CD8183032666ACFC20000
|
||||
00BF:0018180000183030606066663C000000
|
||||
00C0:301800183C6666667E66666666000000
|
||||
@ -910,13 +910,14 @@
|
||||
201D:66CC0000000000000000000000000000
|
||||
2020:00001818187E18181818181818000000
|
||||
2021:00001818187E1818187E181818000000
|
||||
2022:0000000018183C3C3C3C181800000000
|
||||
2022:000000000000183C3C18000000000000
|
||||
2024:00000000000000000000181818000000
|
||||
2025:00000000000000000000666666660000
|
||||
2026:00000000000000000000009292000000
|
||||
2030:0000C6C6CCCC18186060DBDBDBDB0000
|
||||
2031:0000C6C6CCCC18186060D5D5D5D50000
|
||||
203C:66666666666666666666000066660000
|
||||
2044:000006060C0C181830306060C0C00000
|
||||
2047:CCCC66666666CCCCCCCC0000CCCC0000
|
||||
2048:E6E6363636366666C6C60000C6C60000
|
||||
2049:DCDCC6C6C6C6CCCCD8D80000D8D80000
|
||||
@ -928,11 +929,31 @@
|
||||
2078:00386C6C386C6C380000000000000000
|
||||
2079:00386C6C3C0C0C380000000000000000
|
||||
207F:000000786C6C6C6C0000000000000000
|
||||
20A3:00007E6060607C6060F8606060000000
|
||||
20A4:0000386C6C60F060F0606666FC000000
|
||||
20A7:00FC66667C62666F666666F300000000
|
||||
20AA:000000FA8AAAAAAAAAA2BE0000000000
|
||||
20AC:00003C666660FC60F86066663C000000
|
||||
2117:7E7E8181B9B9A5A5B9B9A1A181817E7E
|
||||
2120:006A8E8E4A2A2ACA0000000000000000
|
||||
2122:00EA4E4E4A4A4A4A0000000000000000
|
||||
2150:000046C64C4C581830376162C2C20000
|
||||
2151:000046C64C4C581830366967C1C60000
|
||||
2152:000046C64C4C581A36326062C5C20000
|
||||
2153:000046C64C4C581830366162C1C60000
|
||||
2154:0000C6264C8CF81830366162C1C60000
|
||||
2155:000046C64C4C5818303E686CC2CC0000
|
||||
2156:0000C6264C8CF818303E686CC2CC0000
|
||||
2157:0000C6266C2CD818303E686CC2CC0000
|
||||
2158:00002666ACFC3818303E686CC2CC0000
|
||||
2159:000046C64C4C58183036686EC9C60000
|
||||
215A:0000E686CC2CD8183036686EC9C60000
|
||||
215B:000046C64C4C581830366966C9C60000
|
||||
215C:0000C6266C2CD81830366966C9C60000
|
||||
215D:0000E686CC2CD81830366966C9C60000
|
||||
215E:0000E6264C4C581830366966C9C60000
|
||||
215F:000046C64C4C581830306060C0C00000
|
||||
2189:000046A6ACAC581830366162C1C60000
|
||||
2190:000000000010307F7F30100000000000
|
||||
2191:183C7E18181818181818181818181818
|
||||
2192:0000000000080CFEFE0C080000000000
|
||||
@ -943,26 +964,53 @@
|
||||
2199:000004040E0E1C1CB8B8F0F0E0E0F0F0
|
||||
21A5:183C7E181818181818181818187E3C18
|
||||
21A8:183C7E1818181818181818187E3C18FF
|
||||
21E6:181838386F6FC1C1C1C16F6F38381818
|
||||
21E7:18183C3C6666C3C3E7E7242424243C3C
|
||||
21E8:18181C1CF6F683838383F6F61C1C1818
|
||||
21E9:3C3C24242424E7E7C3C366663C3C1818
|
||||
21E6:0000000018386FC1C16F381800000000
|
||||
21E7:00000000183C66C3E724243C00000000
|
||||
21E8:00000000181CF68383F61C1800000000
|
||||
21E9:000000003C2424E7C3663C1800000000
|
||||
220E:00000000007E7E7E7E7E7E0000000000
|
||||
2211:0000FEC06030180C183060C0FE000000
|
||||
2212:000000000000007E0000000000000000
|
||||
2218:000000003C3C666666663C3C00000000
|
||||
2213:000000007E001818187E181818000000
|
||||
2214:0000001818001818187E181818000000
|
||||
2215:000006060C0C181830306060C0C00000
|
||||
2218:0000000000003C66663C000000000000
|
||||
2219:000000000000183C3C18000000000000
|
||||
221A:0003030606060606CCCC6C3818000000
|
||||
221B:0063132616660606CCCC6C3818000000
|
||||
221C:002363A6F6262606CCCC6C3818000000
|
||||
221E:000000000076DBDBDB6E000000000000
|
||||
221F:000000000000FE060606060000000000
|
||||
2223:00001818181818181818181818000000
|
||||
2224:000018181A1C18183858181818000000
|
||||
2225:00006C6C6C6C6C6C6C6C6C6C6C000000
|
||||
2226:00006C6C6E6C6C7C6C6CEC6C6C000000
|
||||
2229:0000003C666666666666666600000000
|
||||
222A:00000066666666666666663C00000000
|
||||
222B:00000E1B18181818181818D870000000
|
||||
2248:0000000072D69C0072D69C0000000000
|
||||
2261:000000007E00007E00007E0000000000
|
||||
2264:000000000C18306030180C007E000000
|
||||
2265:0000000030180C060C1830007E000000
|
||||
2295:0000000000385492FE92543800000000
|
||||
2296:0000000000384482FE82443800000000
|
||||
2297:00000000003844AA92AA443800000000
|
||||
2298:000000000038448A92A2443800000000
|
||||
2299:00000000003844829282443800000000
|
||||
229A:0000000000384492AA92443800000000
|
||||
229C:00000000003844BA82BA443800000000
|
||||
229D:0000000000384482BA82443800000000
|
||||
229E:0000000000FE9292FE9292FE00000000
|
||||
229F:0000000000FE8282FE8282FE00000000
|
||||
22A0:0000000000FEC6AA92AAC6FE00000000
|
||||
22A1:0000000000FE8282928282FE00000000
|
||||
22C5:00000000181818180000000000000000
|
||||
2320:00000E1B1B1B18181818181818181818
|
||||
2321:181818181818181818D8D8D870000000
|
||||
23E9:000000008888CCCCEEEECCCC88880000
|
||||
23EA:0000000022226666EEEE666622220000
|
||||
23EB:101038387C7C0000101038387C7C0000
|
||||
23EC:000000008888CCCCEEEECCCC88880000
|
||||
23EC:7C7C3838101000007C7C383810100000
|
||||
2500:00000000000000FFFF00000000000000
|
||||
2501:000000000000FFFFFFFF000000000000
|
||||
2502:18181818181818181818181818181818
|
||||
@ -1123,20 +1171,20 @@
|
||||
259D:0F0F0F0F0F0F0F0F0000000000000000
|
||||
259E:0F0F0F0F0F0F0F0FF0F0F0F0F0F0F0F0
|
||||
259F:0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFF
|
||||
25A0:00007E7E7E7E7E7E7E7E7E7E7E7E0000
|
||||
25A1:00007E7E66666666666666667E7E0000
|
||||
25A2:7C7CC6C6C6C6C6C6C6C6C6C67C7C0000
|
||||
25A3:FEFE8282BABABABABABA8282FEFE0000
|
||||
25A0:00000000007E7E7E7E7E7E0000000000
|
||||
25A1:00000000007E666666667E0000000000
|
||||
25A2:000000007CC6C6C6C6C67C0000000000
|
||||
25A3:00000000FE82BABABA82FE0000000000
|
||||
25A4:FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
25A5:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
25A6:44FF444444FF444444FF444444FF4444
|
||||
25A7:88884444222211118888444422221111
|
||||
25A8:11112222444488881111222244448888
|
||||
25A9:AAAA4444AAAA1111AAAA4444AAAA1111
|
||||
25AA:00000000383838383838000000000000
|
||||
25AB:00000000383828283838000000000000
|
||||
25AC:00000000000000007E7E7E7E7E7E0000
|
||||
25AD:00000000000000007E7E66667E7E0000
|
||||
25AA:00000000000038383800000000000000
|
||||
25AB:00000000000038283800000000000000
|
||||
25AC:0000000000000000007E7E7E00000000
|
||||
25AD:0000000000000000007E667E00000000
|
||||
25AE:3C3C3C3C3C3C3C3C3C3C3C3C3C3C0000
|
||||
25AF:3C3C242424242424242424243C3C0000
|
||||
25B0:00000000000000003F3F7E7EFCFC0000
|
||||
@ -1147,8 +1195,8 @@
|
||||
25B5:000010103828286C4444C68282FE0000
|
||||
25B6:80C0E0F0F8FCFEFFFEFCF8F0E0C08000
|
||||
25B7:80C0E0F0D8CCC6C3C6CCD8F0E0C08000
|
||||
25B8:00000000406070787C78706040000000
|
||||
25B9:00000000406050484448506040000000
|
||||
25B8:000000002030383C3E3C383020000000
|
||||
25B9:00000000203028242224283020000000
|
||||
25BA:00000000C0F0FCFFFCF0C00000000000
|
||||
25BB:00000000C0F0DCC7DCF0C00000000000
|
||||
25BC:FEFEFEFE7C7C7C7C3838383810101010
|
||||
@ -1164,25 +1212,25 @@
|
||||
25C6:18183C3C7E7EFFFFFFFF7E7E3C3C1818
|
||||
25C7:18183C3C6666C3C3C3C366663C3C1818
|
||||
25C8:181824245A5ABDBDBDBD5A5A24241818
|
||||
25C9:3C3C6666C3C3DBDBDBDBC3C366663C3C
|
||||
25C9:000000003C66C3DBDBC3663C00000000
|
||||
25CA:101038386C6CC6C6C6C66C6C38381010
|
||||
25CB:00003C3C66664242424266663C3C0000
|
||||
25CC:10104444000082820000444410100000
|
||||
25CD:000038386C6CAAAAAAAA6C6C38380000
|
||||
25CE:383844449292AAAA9292444438380000
|
||||
25CF:00003C3C7E7E7E7E7E7E7E7E3C3C0000
|
||||
25D0:3C3C7676F3F3F3F3F3F3F3F376763C3C
|
||||
25D1:3C3C6E6ECFCFCFCFCFCFCFCF6E6E3C3C
|
||||
25D2:3C3C6666C3C3C3C3FFFFFFFF7E7E3C3C
|
||||
25D3:3C3C7E7EFFFFFFFFC3C3C3C366663C3C
|
||||
25D4:3C3C6E6ECFCFCFCFC3C3C3C366663C3C
|
||||
25D5:3C3C6E6ECFCFCFCFFFFFFFFF7E7E3C3C
|
||||
25CB:00000000003C664242663C0000000000
|
||||
25CC:00000000104400820044100000000000
|
||||
25CD:0000000000386CAAAA6C380000000000
|
||||
25CE:00000000384492AA9244380000000000
|
||||
25CF:00000000003C7E7E7E7E3C0000000000
|
||||
25D0:000000003C76F3F3F3F3763C00000000
|
||||
25D1:000000003C6ECFCFCFCF6E3C00000000
|
||||
25D2:000000003C66C3C3FFFF7E3C00000000
|
||||
25D3:000000003C7EFFFFC3C3663C00000000
|
||||
25D4:000000003C6ECFCFC3C3663C00000000
|
||||
25D5:000000003C6ECFCFFFFF7E3C00000000
|
||||
25D6:00030F1F1F3F3F3F3F3F1F1F0F030000
|
||||
25D7:00C0F0F8F8FCFCFCFCFCF8F8F0C00000
|
||||
25D8:FFFFFFFFE7E7C3C3C3C3E7E7FFFFFFFF
|
||||
25D9:FFFFC3C39999BDBDBDBD9999C3C3FFFF
|
||||
25DA:FFFFC3C39999BDBD0000000000000000
|
||||
25DB:0000000000000000BDBD9999C3C3FFFF
|
||||
25D8:FFFFFFFFFFFFE7C3C3E7FFFFFFFFFFFF
|
||||
25D9:FFFFFFFFFFC399BDBD99C3FFFFFFFFFF
|
||||
25DA:FFFFFFFFFFC399BD0000000000000000
|
||||
25DB:0000000000000000BD99C3FFFFFFFFFF
|
||||
25DC:38386060C0C0C0C00000000000000000
|
||||
25DD:1C1C0606030303030000000000000000
|
||||
25DE:00000000000000000303030306061C1C
|
||||
@ -1193,32 +1241,38 @@
|
||||
25E3:8080C0C0E0E0F0F0F8F8FCFCFEFEFFFF
|
||||
25E4:FFFFFEFEFCFCF8F8F0F0E0E0C0C08080
|
||||
25E5:FFFF7F7F3F3F1F1F0F0F070703030101
|
||||
25E6:00000000181824242424181800000000
|
||||
25E7:FFFFF3F3F3F3F3F3F3F3F3F3F3F3FFFF
|
||||
25E8:FFFFCFCFCFCFCFCFCFCFCFCFCFCFFFFF
|
||||
25E9:FFFFFFFFFFFFFBFBF3F3E3E3C3C3FFFF
|
||||
25EA:FFFFC3C3C7C7CFCFDFDFFFFFFFFFFFFF
|
||||
25EB:FFFFDBDBDBDBDBDBDBDBDBDBDBDBFFFF
|
||||
25E6:00000000000018242418000000000000
|
||||
25E7:00000000FFF3F3F3F3F3F3FF00000000
|
||||
25E8:00000000FFCFCFCFCFCFCFFF00000000
|
||||
25E9:00000000FFFFFFFBF3E3C3FF00000000
|
||||
25EA:00000000FFC3C7CFDFFFFFFF00000000
|
||||
25EB:00000000FFDBDBDBDBDBDBFF00000000
|
||||
25EC:18181818242442425A5A99998181FFFF
|
||||
25ED:181818183C3C76767676F3F3F3F3FFFF
|
||||
25EE:181818183C3C6E6E6E6ECFCFCFCFFFFF
|
||||
25EF:3C3C6666C3C3C3C3C3C3C3C366663C3C
|
||||
25F0:FFFFDBDBDBDBDBDBFBFBC3C3C3C3FFFF
|
||||
25F1:FFFFC3C3C3C3C3C3FBFBDBDBDBDBFFFF
|
||||
25F2:FFFFC3C3C3C3C3C3DFDFDBDBDBDBFFFF
|
||||
25F3:FFFFDBDBDBDBDBDBDFDFC3C3C3C3FFFF
|
||||
25F4:3C3C7E7EDBDBDBDBFBFBC3C366663C3C
|
||||
25F5:3C3C6666C3C3FBFBDBDBDBDB7E7E3C3C
|
||||
25F6:3C3C6666C3C3DFDFDBDBDBDB7E7E3C3C
|
||||
25F7:3C3C7E7EDBDBDBDBDFDFC3C366663C3C
|
||||
25EF:000000003C66C3C3C3C3663C00000000
|
||||
25F0:00000000FFDBDBDBFBC3C3FF00000000
|
||||
25F1:00000000FFC3C3C3FBDBDBFF00000000
|
||||
25F2:00000000FFC3C3C3DFDBDBFF00000000
|
||||
25F3:00000000FFDBDBDBDFC3C3FF00000000
|
||||
25F4:000000003C7EDBDBFBC3663C00000000
|
||||
25F5:000000003C66C3FBDBDB7E3C00000000
|
||||
25F6:000000003C66C3DFDBDB7E3C00000000
|
||||
25F7:000000003C7EDBDBDFC3663C00000000
|
||||
25F8:FFFFC6C6CCCCD8D8F0F0E0E0C0C08080
|
||||
25F9:FFFF636333331B1B0F0F070703030101
|
||||
25FA:0101030307070F0F1B1B33336363FFFF
|
||||
25FB:00007C7C6C6C6C6C6C6C7C7C00000000
|
||||
25FC:00007C7C7C7C7C7C7C7C7C7C00000000
|
||||
25FD:000000003C3C242424243C3C00000000
|
||||
25FE:000000003C3C3C3C3C3C3C3C00000000
|
||||
25FF:8080C0C0E0E0F0F0D8D8CCCCC6C6FFFF
|
||||
25FA:8080C0C0E0E0F0F0D8D8CCCCC6C6FFFF
|
||||
25FB:00000000007C6C6C6C7C000000000000
|
||||
25FC:00000000007C7C7C7C7C000000000000
|
||||
25FD:0000000000003C24243C000000000000
|
||||
25FE:0000000000003C3C3C3C000000000000
|
||||
25FF:0101030307070F0F1B1B33336363FFFF
|
||||
2605:000001000380038007C03FF87FFC3FF80FE00FE01FF03C783018000000000000
|
||||
2606:000001000380038006C03C78600C38380C600C601BB03C783018000000000000
|
||||
2609:00000000003C425A5A423C0000000000
|
||||
2610:00000000FE8282828282FE0000000000
|
||||
2611:00000000FE868AAA9282FE0000000000
|
||||
2612:00000000FE82AA92AA82FE0000000000
|
||||
2625:00007CC6C66C38FE3838383838000000
|
||||
2628:000018183C18187E1818181818000000
|
||||
262F:0000003C428D81B3FFCF7E3C00000000
|
||||
@ -1230,9 +1284,12 @@
|
||||
2635:00000000C6C60000FEFE0000C6C60000
|
||||
2636:00000000FEFE0000C6C60000C6C60000
|
||||
2637:00000000C6C60000C6C60000C6C60000
|
||||
2639:00003C4281A5818199BD81423C000000
|
||||
263A:00003C4281A58181BD9981423C000000
|
||||
263B:00003C7EFFDBFFFFC3E7FF7E3C000000
|
||||
2639:0000007E81A5A5818199BD817E000000
|
||||
263A:0000007E81A5A58181BD99817E000000
|
||||
263B:0000007EFFDBDBFFFFC3E7FF7E000000
|
||||
2640:0000003C6666663C187E181800000000
|
||||
2641:00000018187E183C6666663C00000000
|
||||
2642:0000001E0E1A78CCCCCCCC7800000000
|
||||
2660:00000010387CFEFEFE38387C00000000
|
||||
2661:0000006CFEC6C6C66C6C381000000000
|
||||
2662:0000001038386CC66C38381000000000
|
||||
@ -1251,9 +1308,9 @@
|
||||
268D:0000000000000000C6C60000FEFE0000
|
||||
268E:0000000000000000FEFE0000C6C60000
|
||||
268F:0000000000000000C6C60000C6C60000
|
||||
26AA:000000003C3C4242424242423C3C0000
|
||||
26AB:000000003C3C7E7E7E7E7E7E3C3C0000
|
||||
26AC:000038387C7C6C6C7C7C383800000000
|
||||
26AA:0000000000003C4242423C0000000000
|
||||
26AB:0000000000003C7E7E7E3C0000000000
|
||||
26AC:0000000000387C6C7C38000000000000
|
||||
2708:303038389C9CFFFFFFFF9C9C38383030
|
||||
2734:929254543838FEFE3838545492920000
|
||||
2800:00000000000000000000000000000000
|
||||
@ -1513,10 +1570,17 @@
|
||||
28FE:0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
28FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
2913:181818181818181818181818187E3C18
|
||||
2A00:000007C01C7030183018600C638C638C638C600C301830181C7007C000000000
|
||||
2A01:000007C01D7031183118610C610C7FFC610C610C311831181D7007C000000000
|
||||
2A02:000007C01C70301838386C6C66CC638C66CC6C6C383830181C7007C000000000
|
||||
2A03:44444444444454544444444438380000
|
||||
2A04:4444444454547C7C5454444438380000
|
||||
2A05:7C7C4444444444444444444444440000
|
||||
2A06:4444444444444444444444447C7C0000
|
||||
2B1D:00000000000018181818000000000000
|
||||
2B24:3C3C7E7EFFFFFFFFFFFFFFFF7E7E3C3C
|
||||
2B55:3C3C7E7EE7E7C3C3C3C3E7E77E7E3C3C
|
||||
2B58:00003C3C7E7E666666667E7E3C3C0000
|
||||
2B24:000000003C7EFFFFFFFF7E3C00000000
|
||||
2B55:000000003C7EE7C3C3E77E3C00000000
|
||||
2B58:00000000003C7E66667E3C0000000000
|
||||
2E2E:3C3C6666666630301818000018180000
|
||||
3000:0000000000000000000000000000000000000000000000000000000000000000
|
||||
3001:0000000000000000000000000000000000000000000000002000100008000800
|
||||
@ -8509,125 +8573,6 @@ EC03:000052523434060660602C2C4A4A0000
|
||||
EC04:000010102C2C3A3A5C5C343404040000
|
||||
EC05:525244442D2DC4C41111B4B423234A4A
|
||||
EC06:9191525200000303C0C000004A4A8989
|
||||
EC07:00003C7EFF99FFFFC3BDFF7E3C000000
|
||||
EC08:7E7EC3C3D3D3D3D3DBDBC3C3C3C37E7E
|
||||
EC09:18183C3C3C3C3C3C7E7E101038381010
|
||||
EC0A:0505050505050D0D0D0D191979797171
|
||||
EC0B:A0A0A0A0A0A0B0B0B0B098989E9E8E8E
|
||||
EC0C:10105454545454545454545454549292
|
||||
EC0D:7070C6C6C4C4C0C0C4C4C6C670700000
|
||||
EC0E:181818183C3C7E7EFFFFDBDB18183C3C
|
||||
EC0F:3C3C1818DBDBFFFF7E7E3C3C18181818
|
||||
EC10:0C0C1C1C3939FFFFFFFF39391C1C0C0C
|
||||
EC11:BABAEEEEAAAA38383838BABAFEFEBABA
|
||||
EC12:BABAFEFEBABA38383838AAAAEEEEBABA
|
||||
EC13:E7E74242FFFFF9F9FFFF4242E7E70000
|
||||
EC14:E7E74242FFFF9F9FFFFF4242E7E70000
|
||||
EC15:22226363F7F7B7B7FFFF7E7E3C3C3C3C
|
||||
EC16:3C3C7E7EFFFFBFBFFFFF7E7E3C3C3C3C
|
||||
EC17:3C3C3C3C18183C3C3C3C3C3C3C3C1818
|
||||
EC18:18183C3C3C3C3C3C3C3C18183C3C3C3C
|
||||
EC19:000000007B7BFFFFFFFF7B7B00000000
|
||||
EC1A:00000000DEDEFFFFFFFFDEDE00000000
|
||||
EC1B:2020606020202020303028283C3C3C3C
|
||||
EC1C:000030305858FDFDFFFF797930300000
|
||||
EC1D:00000C0C1A1ABFBFFFFF9E9E0C0C0000
|
||||
EC1E:000030305858FDFD3F3FF9F930300000
|
||||
EC1F:00000C0C1A1ABFBFFCFC9F9F0C0C0000
|
||||
EC20:101028286868BCBCFCFC787810103838
|
||||
EC21:00000000FCFC1C1C7F7F63633E3E0000
|
||||
EC22:3838383892927C7C1010282828282828
|
||||
EC23:383838381010FEFE1010282844448282
|
||||
EC24:8282444428281010FEFE101038383838
|
||||
EC25:11111212D4D4F8F8D4D4121211110000
|
||||
EC26:888848482B2B1F1F2B2B484888880000
|
||||
EC27:3838383812127C7C9090282824242222
|
||||
EC28:3838383890907C7C1212282848488888
|
||||
EC29:383838381010FEFE101038387C7CFEFE
|
||||
EC2A:8181C3C3E7E7FFFFFFFF99992424C3C3
|
||||
EC2B:00007C7CD6D67C7C3838545492920000
|
||||
EC2C:0000000038385454FEFE000000000000
|
||||
EC2D:3C3C5A5AFFFFE7E77E7E242442428181
|
||||
EC2E:3C3C5A5AFFFFE7E77E7E242424246666
|
||||
EC2F:08081C1C2A2A7F7F77773E3E36366363
|
||||
EC30:08081C1C2A2A7F7F77773E3E36361414
|
||||
EC31:4141A2A23C3C5A5A7E7EFFFF42426363
|
||||
EC32:828245453C3C5A5A7E7EFFFF4242C6C6
|
||||
EC33:00005A5ABDBD99992424424224240000
|
||||
EC34:8181A5A55A5A181818182424C3C30000
|
||||
EC35:000024247E7EBDBD7E7E24242424E7E7
|
||||
EC36:24247E7EBDBD7E7E242442424242C3C3
|
||||
EC37:3C3C5A5AFFFFABABD5D5FFFFDDDD8989
|
||||
EC38:3C3C5A5AFFFFABABD5D5FFFF77772222
|
||||
EC39:3C3C4242A5A5818199998181D5D5AAAA
|
||||
EC3A:3C3C4242A5A5818199998181ABAB5555
|
||||
EC3B:181824247E7EFFFF5A5A242400000000
|
||||
EC3C:3C3CFFFFFFFF18180C0C181830301818
|
||||
EC3D:3C3C4242ABABD5D51010101014140808
|
||||
EC3E:0000C0C0C8C854545454555522220000
|
||||
EC3F:FFFF89899191C5C5A3A389899191FFFF
|
||||
EC40:FFFFC3C3A5A599999999A5A5C3C3FFFF
|
||||
EC41:FFFF99999999FFFFFFFF99999999FFFF
|
||||
EC42:FFFF8181A5A581818181A5A58181FFFF
|
||||
EC43:E7E7818181810000000081818181E7E7
|
||||
EC44:92925454383810101010101010101010
|
||||
EC45:38381010383810103838101038381010
|
||||
EC46:000000000000AAAAFFFFAAAA00000000
|
||||
EC47:7E7E42427E7E42427E7E42427E7E4242
|
||||
EC48:0000FFFF5555555555555555FFFF0000
|
||||
EC49:000000000000C0C0B0B08C8C8383FFFF
|
||||
EC4A:00000000000003030D0D3131C1C1FFFF
|
||||
EC4B:0F0F303040404E4E8A8A8E8E80808181
|
||||
EC4C:F0F00C0C020272725151717101018181
|
||||
EC4D:0F0F3030404040408E8E808080808181
|
||||
EC4E:F0F00C0C020202027171010101018181
|
||||
EC4F:81818080888884844343404030300F0F
|
||||
EC50:8181010111112121C2C202020C0CF0F0
|
||||
EC51:81818080808087874040404030300F0F
|
||||
EC52:818101010101E1E1020202020C0CF0F0
|
||||
EC53:81818080838384844343404030300F0F
|
||||
EC54:81810101C1C12121C2C202020C0CF0F0
|
||||
EC55:81818080878788884848404030300F0F
|
||||
EC56:81810101E1E11111121202020C0CF0F0
|
||||
EC57:07070F0F1F1F1818181810101E1E1717
|
||||
EC58:F0F0F8F8ECEC0404040404043C3C5454
|
||||
EC59:11110B0B0D0D060607072E2E39393838
|
||||
EC5A:04042828D8D82828D0D01010E0E00000
|
||||
EC5B:00000303040408083F3F7F7FFFFF3F3F
|
||||
EC5C:0000C0C020201010FCFCFEFEFFFFFCFC
|
||||
EC5D:03030C0C3F3F3F3FFFFF7F7F37371F1F
|
||||
EC5E:C0C03030B8B8DCDCEEEEF6F6FBFBFBFB
|
||||
EC5F:04044E4EE4E446466F6F7F7F60603F3F
|
||||
EC60:2020727227276262F6F6FEFE0606FCFC
|
||||
EC61:3B3B31311B1B1F1F10101F1F0F0F0707
|
||||
EC62:DCDC8C8CD8D8F8F80808F8F8F0F0E0E0
|
||||
EC63:010133337B7B59598C8CDFDF7F7F3F3F
|
||||
EC64:8080CCCCDEDE9A9A3131FBFBFEFEFCFC
|
||||
EC65:01010303070706060E0E3E3E70703030
|
||||
EC66:8080C0C0E0E0606070707C7C0E0E0C0C
|
||||
EC67:787870706060E0E0C0C0ECECFEFED1D1
|
||||
EC68:1E1E0E0E06060707030337377F7F8B8B
|
||||
EC69:3F3F1F1F1F1F0F0F0F0F7F7F0000FFFF
|
||||
EC6A:FCFCF8F8F8F8F0F0F0F0FEFE0000FFFF
|
||||
EC6B:0000010102020404020201011F1F1F1F
|
||||
EC6C:000080804040202040408080F8F8F8F8
|
||||
EC6D:02020202020202021F1F20207F7F0000
|
||||
EC6E:4040404040404040F8F80404FEFE0000
|
||||
EC6F:7373737373737F7F3F3F1F1F0F0F0F0F
|
||||
EC70:CECECECECECEFEFEFCFCF8F8F0F0F0F0
|
||||
EC71:0F0F0F0F0F0F18187F7F40407F7FFFFF
|
||||
EC72:F0F0F0F0F0F01818FEFE0202FEFEFFFF
|
||||
EC73:F8F8444442422121212142424444F8F8
|
||||
EC74:FFFF050507070000000007070505FFFF
|
||||
EC75:FCFC868682828181818182828686FCFC
|
||||
EC76:00000000808040407F7F808000000000
|
||||
EC77:0000010106061D1D2A2A2A2A2A2A1F1F
|
||||
EC78:1B1B8F8F65651111C9C9A9A9B1B1F3F3
|
||||
EC79:4C4CF7F7F0F01818070702023E3EFEFE
|
||||
EC7A:7F7F9F9F3131414181818181F9F9FDFD
|
||||
EC7B:5F5F60606363626264647B7B60605F5F
|
||||
EC7C:FFFF04040303FCFC0202FCFC0404F8F8
|
||||
EC7D:FCFC0202FCFC00000000000000000000
|
||||
FE81:7E801010101010101010000000000000
|
||||
FE82:3C401010101010101F0F000000000000
|
||||
FE84:30403840101010101F0F000000000000
|
||||
@ -8781,7 +8726,9 @@ FF37:00000000781E781E781E781E781E799E7BDE7FFE7E7E7C3E781E000000000000
|
||||
FF38:00000000F00F781E3C3C1E780FF007E00FF01E783C3C781EF00F000000000000
|
||||
FF39:00000000F00F781E3C3C1E780FF007E003C003C003C003C003C0000000000000
|
||||
FF3A:000000003FFC003C007800F001E003C007800F001E003C003FFC000000000000
|
||||
FF3B:00000FF00F000F000F000F000F000F000F000F000F000F000F000FF000000000
|
||||
FF3C:F00078003C001E000F00078003C001E000F00078003C001E000F000700000000
|
||||
FF3D:00000FF000F000F000F000F000F000F000F000F000F000F000F00FF000000000
|
||||
FF3E:000003C007E00FF01E783C3C781E000000000000000000000000000000000000
|
||||
FF3F:0000000000000000000000000000000000000000000000000000000000007FFE
|
||||
FF40:000003C001E000F0003C00000000000000000000000000000000000000000000
|
||||
@ -8811,9 +8758,12 @@ FF57:000000000000000000000000781E781E799E7BDE7FFE3FFC1E78000000000000
|
||||
FF58:000000000000000000000000781E3C3C1E780FF01E783C3C781E000000000000
|
||||
FF59:0000000000000000000000003C3C3C3C3C3C3C3C3C3C3C3C0FFC003C003C0FF0
|
||||
FF5A:0000000000000000000000003FFC003C00F003C00F003C003FFC000000000000
|
||||
FF5C:0000007E01E001E001E001E003C07F8003C001E001E001E001E0007E00000000
|
||||
FF5B:0000007E01E001E001E001E003C07F8003C001E001E001E001E0007E00000000
|
||||
FF5C:03C003C003C003C003C003C003C003C003C003C003C003C003C003C000000000
|
||||
FF5D:00007E00078007800780078003C001FE03C007800780078007807E0000000000
|
||||
FF5E:00001F867BDE60F8000000000000000000000000000000000000000000000000
|
||||
FF5F:00000330066006600CC00CC00CC00CC00CC00CC00CC006600660033000000000
|
||||
FF60:00000CC0066006600330033003300330033003300330066006600CC000000000
|
||||
FF61:000000000000000000386C6C38000000
|
||||
FF62:001E1818181800000000000000000000
|
||||
FF63:00000000000000000018181818780000
|
||||
@ -8964,7 +8914,3 @@ FF9F:00386C6C380000000000000000000000
|
||||
1D354:929200009292000092920000FEFE0000
|
||||
1D355:929200009292000092920000C6C60000
|
||||
1D356:92920000929200009292000092920000
|
||||
1F34E:080810106C6CFEFEFCFCFCFC7E7E6C6C
|
||||
1F34F:080810106C6C82828484848452526C6C
|
||||
1F352:00000606080810103030787878783030
|
||||
1F860:1010383838383838383838387C7CD6D6
|
||||
|
@ -153,7 +153,8 @@ item.oc.UpgradeTank.name=Tank-Upgrade
|
||||
item.oc.UpgradeTankController.name=Tankbedienungs-Upgrade
|
||||
item.oc.UpgradeTractorBeam.name=Traktorstrahl-Upgrade
|
||||
item.oc.UpgradeTrading.name=Handels-Upgrade
|
||||
item.oc.WirelessNetworkCard.name=Drahtlosnetzwerkkarte
|
||||
item.oc.WirelessNetworkCard0.name=Drahtlosnetzwerkkarte (Stufe 1)
|
||||
item.oc.WirelessNetworkCard1.name=Drahtlosnetzwerkkarte (Stufe 2)
|
||||
item.oc.WorldSensorCard.name=Weltsensorkarte
|
||||
item.oc.wrench.name=Schraubenziehschlüssel
|
||||
|
||||
|
@ -57,6 +57,7 @@ item.oc.CircuitBoard.name=Circuit Board
|
||||
item.oc.ComponentBus0.name=Component Bus (Tier 1)
|
||||
item.oc.ComponentBus1.name=Component Bus (Tier 2)
|
||||
item.oc.ComponentBus2.name=Component Bus (Tier 3)
|
||||
item.oc.ComponentBus3.name=Component Bus (Creative)
|
||||
item.oc.ControlUnit.name=Control Unit (CU)
|
||||
item.oc.CPU0.name=Central Processing Unit (CPU) (Tier 1)
|
||||
item.oc.CPU1.name=Central Processing Unit (CPU) (Tier 2)
|
||||
@ -153,7 +154,8 @@ item.oc.UpgradeTank.name=Tank Upgrade
|
||||
item.oc.UpgradeTankController.name=Tank Controller Upgrade
|
||||
item.oc.UpgradeTractorBeam.name=Tractor Beam Upgrade
|
||||
item.oc.UpgradeTrading.name=Trading Upgrade
|
||||
item.oc.WirelessNetworkCard.name=Wireless Network Card
|
||||
item.oc.WirelessNetworkCard0.name=Wireless Network Card (Tier 1)
|
||||
item.oc.WirelessNetworkCard1.name=Wireless Network Card (Tier 2)
|
||||
item.oc.WorldSensorCard.name=World Sensor Card
|
||||
item.oc.wrench.name=Scrench
|
||||
|
||||
|
@ -144,7 +144,8 @@ item.oc.UpgradeSolarGenerator.name=Amélioration du générateur solaire
|
||||
item.oc.UpgradeTank.name=Amélioration de réservoir
|
||||
item.oc.UpgradeTankController.name=Amélioration du contrôleur de réservoir
|
||||
item.oc.UpgradeTractorBeam.name=Amélioration du rayon tracteur
|
||||
item.oc.WirelessNetworkCard.name=Carte de réseau sans-fils
|
||||
item.oc.WirelessNetworkCard0.name=Carte de réseau sans-fils (Niveau 1)
|
||||
item.oc.WirelessNetworkCard1.name=Carte de réseau sans-fils (Niveau 2)
|
||||
item.oc.WorldSensorCard.name=Carte de capteur du monde
|
||||
item.oc.wrench.name=Crisseur
|
||||
|
||||
|
@ -107,7 +107,8 @@ item.oc.UpgradeSolarGenerator.name=Upgrade Panneli Solari
|
||||
item.oc.UpgradeTank.name=Upgrade Taniche
|
||||
item.oc.UpgradeTankController.name=Upgrade Controllore Taniche
|
||||
item.oc.UpgradeTractorBeam.name=Upgrade Raggio Traente
|
||||
item.oc.WirelessNetworkCard.name=Scheda di Rete Wireless
|
||||
item.oc.WirelessNetworkCard0.name=Scheda di Rete Wireless (Livello 1)
|
||||
item.oc.WirelessNetworkCard1.name=Scheda di Rete Wireless (Livello 2)
|
||||
|
||||
# GUI
|
||||
oc:gui.Analyzer.Address=§6Indirizzo§f: %s
|
||||
|
@ -151,7 +151,8 @@ item.oc.UpgradeTank.name=Aprimoramento de Tanque
|
||||
item.oc.UpgradeTankController.name=Aprimoramento de Controlador de Tanque
|
||||
item.oc.UpgradeTractorBeam.name=Aprimoramento de Raio Trator
|
||||
item.oc.UpgradeTrading.name=Aprimoramento de Troca
|
||||
item.oc.WirelessNetworkCard.name=Cartão de Rede Sem Fio
|
||||
item.oc.WirelessNetworkCard0.name=Cartão de Rede Sem Fio (Nível 1)
|
||||
item.oc.WirelessNetworkCard1.name=Cartão de Rede Sem Fio (Nível 2)
|
||||
item.oc.WorldSensorCard.name=Cartão de Sensor de Mundo
|
||||
item.oc.wrench.name=Chave de fenda-boca
|
||||
|
||||
|
@ -63,7 +63,8 @@ item.oc.UpgradeGenerator.name=Melhoramento: Gerador
|
||||
item.oc.UpgradeNavigation.name=Melhoramento: Navegação
|
||||
item.oc.UpgradeSign.name=Melhoramento: Escrita e Leitura de Placas
|
||||
item.oc.UpgradeSolarGenerator.name=Melhoramento: Gerador Solar
|
||||
item.oc.WirelessNetworkCard.name=Placa de Rede sem Fios
|
||||
item.oc.WirelessNetworkCard0.name=Placa de Rede sem Fios
|
||||
item.oc.WirelessNetworkCard1.name=Placa de Rede sem Fios
|
||||
|
||||
# GUI
|
||||
oc:gui.Analyzer.Address=§6Endereço§f: %s
|
||||
|
@ -153,7 +153,8 @@ item.oc.UpgradeTank.name=Улучшение "Бак для жидкостей"
|
||||
item.oc.UpgradeTankController.name=Улучшение "Контроллер бака"
|
||||
item.oc.UpgradeTractorBeam.name=Улучшение "Притягивающий луч"
|
||||
item.oc.UpgradeTrading.name=Улучшение "Торговля"
|
||||
item.oc.WirelessNetworkCard.name=Плата беспроводной сети
|
||||
item.oc.WirelessNetworkCard0.name=Плата беспроводной сети (1-ый уровень)
|
||||
item.oc.WirelessNetworkCard1.name=Плата беспроводной сети (2-ой уровень)
|
||||
item.oc.WorldSensorCard.name=Карта-мировой сенсор
|
||||
item.oc.wrench.name=Ключ
|
||||
|
||||
|
@ -152,7 +152,8 @@ item.oc.UpgradeTank.name=水箱升级
|
||||
item.oc.UpgradeTankController.name=高级水箱升级
|
||||
item.oc.UpgradeTractorBeam.name=牵引光束升级
|
||||
item.oc.UpgradeTrading.name=交易升级
|
||||
item.oc.WirelessNetworkCard.name=无线网卡
|
||||
item.oc.WirelessNetworkCard0.name=无线网卡
|
||||
item.oc.WirelessNetworkCard1.name=无线网卡
|
||||
item.oc.WorldSensorCard.name=世界感应卡
|
||||
item.oc.wrench.name=螺丝刀扳手
|
||||
|
||||
|
@ -147,7 +147,8 @@ item.oc.UpgradeSolarGenerator.name=太陽能發電升級
|
||||
item.oc.UpgradeTank.name=水箱升級
|
||||
item.oc.UpgradeTankController.name=高級水箱升級
|
||||
item.oc.UpgradeTractorBeam.name=牽引光束升級
|
||||
item.oc.WirelessNetworkCard.name=無線網卡
|
||||
item.oc.WirelessNetworkCard0.name=無線網卡
|
||||
item.oc.WirelessNetworkCard1.name=無線網卡
|
||||
item.oc.WorldSensorCard.name=世界傳感器卡
|
||||
item.oc.wrench.name=螺絲刀扳手
|
||||
|
||||
|
@ -16,7 +16,7 @@ manual {
|
||||
input: [book, "oc:circuitChip1"]
|
||||
}
|
||||
nanomachines {
|
||||
input: [["oc:chamelium", "oc:wlanCard", "oc:chamelium"]
|
||||
input: [["oc:chamelium", "oc:wlanCard2", "oc:chamelium"]
|
||||
["oc:cpu2", "oc:materialAcid", "oc:ram1"]
|
||||
["oc:chamelium", "oc:capacitor", "oc:chamelium"]]
|
||||
}
|
||||
@ -69,7 +69,7 @@ microcontrollerCase2 {
|
||||
}
|
||||
terminal {
|
||||
input: [[nuggetIron, "oc:solarGeneratorUpgrade", nuggetIron]
|
||||
["oc:circuitChip3", "oc:screen2", "oc:wlanCard"]
|
||||
["oc:circuitChip3", "oc:screen2", "oc:wlanCard2"]
|
||||
[nuggetIron, "oc:keyboard", nuggetIron]]
|
||||
}
|
||||
tabletCase1 {
|
||||
@ -104,8 +104,8 @@ server3 {
|
||||
[obsidian, "oc:materialCircuitBoardPrinted", obsidian]]
|
||||
}
|
||||
terminalServer {
|
||||
input: [[obsidian, "oc:wlanCard", obsidian]
|
||||
["oc:wlanCard", "oc:circuitChip2", "oc:wlanCard"]
|
||||
input: [[obsidian, "oc:wlanCard2", obsidian]
|
||||
["oc:wlanCard2", "oc:circuitChip2", "oc:wlanCard2"]
|
||||
[obsidian, "oc:materialCircuitBoardPrinted", obsidian]]
|
||||
}
|
||||
|
||||
@ -200,7 +200,11 @@ lanCard {
|
||||
input: [["oc:cable", "oc:circuitChip1", ""]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
wlanCard {
|
||||
wlanCard1 {
|
||||
input: [[torchRedstoneActive, "oc:circuitChip1", torchRedstoneActive]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
wlanCard2 {
|
||||
input: [[materialEnderPearl, "oc:circuitChip2", ""]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
@ -643,7 +647,7 @@ powerDistributor {
|
||||
[ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]]
|
||||
}
|
||||
rack {
|
||||
input: [[gemDiamond, "oc:wlanCard", gemDiamond]
|
||||
input: [[gemDiamond, "oc:wlanCard2", gemDiamond]
|
||||
[fenceIron, chest, fenceIron]
|
||||
["oc:relay", "oc:materialCircuitBoardPrinted", "oc:powerDistributor"]]
|
||||
}
|
||||
|
@ -124,7 +124,12 @@ lanCard {
|
||||
["oc:cable", "oc:materialCard", "oc:cable"]
|
||||
[screwStainlessSteel , craftingToolScrewdriver, screwStainlessSteel]]
|
||||
}
|
||||
wlanCard {
|
||||
wlanCard1 {
|
||||
input: [[screwAluminium , "oc:circuitChip2" , screwAluminium]
|
||||
[torchRedstoneActive, "oc:lanCard", torchRedstoneActive]
|
||||
[screwAluminium , craftingToolScrewdriver, screwAluminium]]
|
||||
}
|
||||
wlanCard2 {
|
||||
input: [[screwTitanium , "oc:circuitChip3" , screwTitanium]
|
||||
[materialEnderPearl, "oc:lanCard", materialEnderPearl]
|
||||
[screwTitanium , craftingToolScrewdriver, screwTitanium]]
|
||||
@ -312,7 +317,7 @@ powerDistributor {
|
||||
["oc:materialCircuitBoardPrinted", plateAluminium, craftingToolWrench]]
|
||||
}
|
||||
rack {
|
||||
input: [[craftingToolScrewdriver, "oc:wlanCard", craftingToolWrench]
|
||||
input: [[craftingToolScrewdriver, "oc:wlanCard2", craftingToolWrench]
|
||||
[{item="ic2.reactorVentDiamond", subID=1}, chest, {item="ic2.reactorVentDiamond", subID=1}]
|
||||
["oc:relay", "oc:materialCircuitBoardPrinted","oc:powerDistributor"]]
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ analyzer {
|
||||
}
|
||||
terminal {
|
||||
input: [[nuggetIron, "oc:solarGeneratorUpgrade", nuggetIron]
|
||||
["oc:circuitChip3", "oc:screen2", "oc:wlanCard"]
|
||||
["oc:circuitChip3", "oc:screen2", "oc:wlanCard2"]
|
||||
[nuggetIron, "oc:keyboard", nuggetIron]]
|
||||
}
|
||||
|
||||
@ -102,7 +102,7 @@ graphicsCard3 {
|
||||
}
|
||||
internetCard {
|
||||
input: [["oc:materialInterweb", "oc:circuitChip3", torchRedstoneActive]
|
||||
["", "oc:wlanCard", obsidian]]
|
||||
["", "oc:wlanCard2", obsidian]]
|
||||
}
|
||||
redstoneCard1 {
|
||||
input: [[torchRedstoneActive, "oc:circuitChip1", ""]
|
||||
@ -116,13 +116,17 @@ lanCard {
|
||||
input: [["oc:cable", "oc:circuitChip1", ""]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
wlanCard {
|
||||
wlanCard1 {
|
||||
input: [[torchRedstoneActive, "oc:circuitChip1", torchRedstoneActive]
|
||||
["", "oc:lanCard", ""]]
|
||||
}
|
||||
wlanCard2 {
|
||||
input: [[materialEnderPearl, "oc:circuitChip2", ""]
|
||||
["", "oc:lanCard", ""]]
|
||||
}
|
||||
linkedCard {
|
||||
input: [[eyeOfEnder, "", eyeOfEnder]
|
||||
["oc:wlanCard", "oc:materialInterweb", "oc:wlanCard"]
|
||||
["oc:wlanCard2", "oc:materialInterweb", "oc:wlanCard2"]
|
||||
["oc:circuitChip3", "", "oc:circuitChip3"]]
|
||||
output: 2 # Note: all resulting cards are linked to each other.
|
||||
}
|
||||
@ -372,7 +376,7 @@ powerDistributor {
|
||||
[ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]]
|
||||
}
|
||||
rack {
|
||||
input: [["oc:circuitChip3", "oc:wlanCard", "oc:circuitChip3"]
|
||||
input: [["oc:circuitChip3", "oc:wlanCard2", "oc:circuitChip3"]
|
||||
[fenceIron, chest, fenceIron]
|
||||
["oc:relay", "oc:materialCircuitBoardPrinted","oc:powerDistributor"]]
|
||||
}
|
||||
|
@ -4,7 +4,11 @@ redstoneCard2 {
|
||||
input: [[blockRedstone, "oc:circuitChip2", gemDiamond]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
wlanCard {
|
||||
wlanCard1 {
|
||||
input: [[torchRedstoneActive, "oc:circuitChip1", torchRedstoneActive]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
wlanCard2 {
|
||||
input: [[gemDiamond, "oc:circuitChip2", ""]
|
||||
["", "oc:materialCard", ""]]
|
||||
}
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 472 B After Width: | Height: | Size: 472 B |
Binary file not shown.
@ -73,6 +73,7 @@ object Constants {
|
||||
final val ComponentBusTier1 = "componentBus1"
|
||||
final val ComponentBusTier2 = "componentBus2"
|
||||
final val ComponentBusTier3 = "componentBus3"
|
||||
final val ComponentBusCreative = "componentBusCreative"
|
||||
final val CPUTier1 = "cpu1"
|
||||
final val CPUTier2 = "cpu2"
|
||||
final val CPUTier3 = "cpu3"
|
||||
@ -160,7 +161,8 @@ object Constants {
|
||||
final val UpgradeContainerTier1 = "upgradeContainer1"
|
||||
final val UpgradeContainerTier2 = "upgradeContainer2"
|
||||
final val UpgradeContainerTier3 = "upgradeContainer3"
|
||||
final val WirelessNetworkCard = "wlanCard"
|
||||
final val WirelessNetworkCardTier1 = "wlanCard1"
|
||||
final val WirelessNetworkCardTier2 = "wlanCard2"
|
||||
final val WorldSensorCard = "worldSensorCard"
|
||||
final val Wrench = "wrench"
|
||||
|
||||
|
@ -62,11 +62,11 @@ class Settings(val config: Config) {
|
||||
val eepromSize = config.getInt("computer.eepromSize") max 0
|
||||
val eepromDataSize = config.getInt("computer.eepromDataSize") max 0
|
||||
val cpuComponentSupport = Array(config.getIntList("computer.cpuComponentCount"): _*) match {
|
||||
case Array(tier1, tier2, tier3) =>
|
||||
Array(tier1: Int, tier2: Int, tier3: Int)
|
||||
case Array(tier1, tier2, tier3, tierCreative) =>
|
||||
Array(tier1: Int, tier2: Int, tier3: Int, tierCreative: Int)
|
||||
case _ =>
|
||||
OpenComputers.log.warn("Bad number of CPU component counts, ignoring.")
|
||||
Array(8, 12, 16)
|
||||
Array(8, 12, 16, 1024)
|
||||
}
|
||||
val callBudgets = Array(config.getDoubleList("computer.callBudgets"): _*) match {
|
||||
case Array(tier1, tier2, tier3) =>
|
||||
@ -191,7 +191,13 @@ class Settings(val config: Config) {
|
||||
val robotTurnCost = config.getDouble("power.cost.robotTurn") max 0
|
||||
val robotMoveCost = config.getDouble("power.cost.robotMove") max 0
|
||||
val robotExhaustionCost = config.getDouble("power.cost.robotExhaustion") max 0
|
||||
val wirelessCostPerRange = config.getDouble("power.cost.wirelessCostPerRange") max 0
|
||||
val wirelessCostPerRange = Array(config.getDoubleList("power.cost.wirelessCostPerRange"): _*) match {
|
||||
case Array(tier1, tier2) =>
|
||||
Array((tier1: Double) max 0.0, (tier2: Double) max 0.0)
|
||||
case _ =>
|
||||
OpenComputers.log.warn("Bad number of wireless card energy costs, ignoring.")
|
||||
Array(0.05, 0.05)
|
||||
}
|
||||
val abstractBusPacketCost = config.getDouble("power.cost.abstractBusPacket") max 0
|
||||
val geolyzerScanCost = config.getDouble("power.cost.geolyzerScan") max 0
|
||||
val robotBaseCost = config.getDouble("power.cost.robotAssemblyBase") max 0
|
||||
@ -332,8 +338,20 @@ class Settings(val config: Config) {
|
||||
val maxNetworkPacketSize = config.getInt("misc.maxNetworkPacketSize") max 0
|
||||
// Need at least 4 for nanomachine protocol. Because I can!
|
||||
val maxNetworkPacketParts = config.getInt("misc.maxNetworkPacketParts") max 4
|
||||
val maxOpenPorts = config.getInt("misc.maxOpenPorts") max 0
|
||||
val maxWirelessRange = config.getDouble("misc.maxWirelessRange") max 0
|
||||
val maxOpenPorts = Array(config.getIntList("misc.maxOpenPorts"): _*) match {
|
||||
case Array(wired, tier1, tier2) =>
|
||||
Array((wired: Int) max 0, (tier1: Int) max 0, (tier2: Int) max 0)
|
||||
case _ =>
|
||||
OpenComputers.log.warn("Bad number of max open ports, ignoring.")
|
||||
Array(16, 1, 16)
|
||||
}
|
||||
val maxWirelessRange = Array(config.getDoubleList("misc.maxWirelessRange"): _*) match {
|
||||
case Array(tier1, tier2) =>
|
||||
Array((tier1: Double) max 0.0, (tier2: Double) max 0.0)
|
||||
case _ =>
|
||||
OpenComputers.log.warn("Bad number of wireless card max ranges, ignoring.")
|
||||
Array(16.0, 400.0)
|
||||
}
|
||||
val rTreeMaxEntries = 10
|
||||
val terminalsPerServer = 4
|
||||
val updateCheck = config.getBoolean("misc.updateCheck")
|
||||
@ -517,6 +535,13 @@ object Settings {
|
||||
// Potion whitelist was fixed in 1.6.2.
|
||||
VersionRange.createFromVersionSpec("[0.0, 1.6.2)") -> Array(
|
||||
"nanomachines.potionWhitelist"
|
||||
),
|
||||
// Upgrading past version 1.7.1, changed wireless card stuff for t1 card.
|
||||
VersionRange.createFromVersionSpec("[0.0, 1.7.2)") -> Array(
|
||||
"power.cost.wirelessCostPerRange",
|
||||
"misc.maxWirelessRange",
|
||||
"misc.maxOpenPorts",
|
||||
"computer.cpuComponentCount"
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -17,7 +17,7 @@ public class FontParserHex implements IGlyphProvider {
|
||||
private static final byte[] OPAQUE = {(byte) 255, (byte) 255, (byte) 255, (byte) 255};
|
||||
private static final byte[] TRANSPARENT = {0, 0, 0, 0};
|
||||
|
||||
private final byte[][] glyphs = new byte[0x10000][];
|
||||
private final byte[][] glyphs = new byte[FontUtils.codepoint_limit()][];
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
@ -26,7 +26,6 @@ public class FontParserHex implements IGlyphProvider {
|
||||
}
|
||||
try {
|
||||
final InputStream font = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation(Settings.resourceDomain(), "font.hex")).getInputStream();
|
||||
OpenComputers.log().info("Initialized unicode glyph provider.");
|
||||
try {
|
||||
OpenComputers.log().info("Initializing unicode glyph provider.");
|
||||
final BufferedReader input = new BufferedReader(new InputStreamReader(font));
|
||||
|
@ -196,7 +196,8 @@ object Achievement {
|
||||
val WirelessNetworkCard = newAchievement("wirelessNetworkCard").
|
||||
at(2, -6).
|
||||
withParent(NetworkCard).
|
||||
whenCrafting(Constants.ItemName.WirelessNetworkCard).
|
||||
whenCrafting(Constants.ItemName.WirelessNetworkCardTier1).
|
||||
whenCrafting(Constants.ItemName.WirelessNetworkCardTier2).
|
||||
add()
|
||||
|
||||
val Cable = newAchievement("cable").
|
||||
|
@ -47,6 +47,9 @@ class Proxy {
|
||||
OreDictionary.registerOre("torchRedstoneActive", net.minecraft.init.Blocks.REDSTONE_TORCH)
|
||||
OreDictionary.registerOre("materialEnderPearl", net.minecraft.init.Items.ENDER_PEARL)
|
||||
|
||||
// Make mods that use old wireless card name not have broken recipes
|
||||
OreDictionary.registerOre("oc:wlanCard", Items.get(Constants.ItemName.WirelessNetworkCardTier2).createItemStack(1))
|
||||
|
||||
tryRegisterNugget[item.IronNugget](Constants.ItemName.IronNugget, "nuggetIron", net.minecraft.init.Items.IRON_INGOT, "ingotIron")
|
||||
tryRegisterNugget[item.DiamondChip](Constants.ItemName.DiamondChip, "chipDiamond", net.minecraft.init.Items.DIAMOND, "gemDiamond")
|
||||
|
||||
@ -147,7 +150,8 @@ class Proxy {
|
||||
// Example usage: OpenComputers.ID + ":tabletCase" -> "tabletCase1"
|
||||
private val itemRenames = Map[String, String](
|
||||
OpenComputers.ID + ":dataCard" -> Constants.ItemName.DataCardTier1,
|
||||
OpenComputers.ID + ":serverRack" -> Constants.BlockName.Rack
|
||||
OpenComputers.ID + ":serverRack" -> Constants.BlockName.Rack,
|
||||
OpenComputers.ID + ":wlanCard" -> Constants.ItemName.WirelessNetworkCardTier2
|
||||
)
|
||||
|
||||
def missingMappings(e: FMLMissingMappingsEvent) {
|
||||
|
@ -63,7 +63,7 @@ class TerminalServer(val rack: api.internal.Rack, val slot: Int) extends Environ
|
||||
keyboard
|
||||
}
|
||||
|
||||
var range = Settings.get.maxWirelessRange
|
||||
var range = Settings.get.maxWirelessRange(Tier.Two)
|
||||
val keys = mutable.ListBuffer.empty[String]
|
||||
|
||||
def address = rack.getMountableData(slot).getString("terminalAddress")
|
||||
|
@ -157,7 +157,7 @@ class TextBuffer(val host: EnvironmentHost) extends prefab.ManagedEnvironment wi
|
||||
}
|
||||
|
||||
this.synchronized {
|
||||
_pendingCommands.foreach(_.sendToPlayersNearHost(host, Option(Settings.get.maxWirelessRange * Settings.get.maxWirelessRange)))
|
||||
_pendingCommands.foreach(_.sendToPlayersNearHost(host, Option(Settings.get.maxWirelessRange(Tier.Two) * Settings.get.maxWirelessRange(Tier.Two))))
|
||||
_pendingCommands = None
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,8 @@ object Items extends ItemAPI {
|
||||
val names = mutable.Map.empty[Any, String]
|
||||
|
||||
val aliases = Map(
|
||||
"dataCard" -> Constants.ItemName.DataCardTier1
|
||||
"dataCard" -> Constants.ItemName.DataCardTier1,
|
||||
"wlanCard" -> Constants.ItemName.WirelessNetworkCardTier2
|
||||
)
|
||||
|
||||
override def get(name: String): ItemInfo = descriptors.get(name).orNull
|
||||
@ -210,7 +211,7 @@ object Items extends ItemAPI {
|
||||
safeGetStack(Constants.ItemName.TankControllerUpgrade),
|
||||
safeGetStack(Constants.ItemName.LeashUpgrade),
|
||||
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCard),
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCardTier2),
|
||||
|
||||
safeGetStack(Constants.ItemName.CPUTier3),
|
||||
safeGetStack(Constants.ItemName.RAMTier6),
|
||||
@ -230,7 +231,7 @@ object Items extends ItemAPI {
|
||||
safeGetStack(Constants.ItemName.PistonUpgrade),
|
||||
|
||||
safeGetStack(Constants.ItemName.RedstoneCardTier2),
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCard),
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCardTier2),
|
||||
|
||||
safeGetStack(Constants.ItemName.CPUTier3),
|
||||
safeGetStack(Constants.ItemName.RAMTier6),
|
||||
@ -261,7 +262,7 @@ object Items extends ItemAPI {
|
||||
|
||||
safeGetStack(Constants.ItemName.GraphicsCardTier3),
|
||||
safeGetStack(Constants.ItemName.RedstoneCardTier2),
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCard),
|
||||
safeGetStack(Constants.ItemName.WirelessNetworkCardTier2),
|
||||
safeGetStack(Constants.ItemName.InternetCard),
|
||||
|
||||
safeGetStack(Constants.ItemName.CPUTier3),
|
||||
@ -298,7 +299,7 @@ object Items extends ItemAPI {
|
||||
|
||||
Option(safeGetStack(Constants.ItemName.GraphicsCardTier2)),
|
||||
Option(safeGetStack(Constants.ItemName.RedstoneCardTier2)),
|
||||
Option(safeGetStack(Constants.ItemName.WirelessNetworkCard)),
|
||||
Option(safeGetStack(Constants.ItemName.WirelessNetworkCardTier2)),
|
||||
|
||||
Option(safeGetStack(Constants.ItemName.CPUTier3)),
|
||||
Option(safeGetStack(Constants.ItemName.RAMTier6)),
|
||||
@ -494,6 +495,10 @@ object Items extends ItemAPI {
|
||||
// 1.6
|
||||
Recipes.addSubItem(new item.UpgradeTrading(upgrades), Constants.ItemName.TradingUpgrade, "oc:tradingUpgrade")
|
||||
Recipes.addSubItem(new item.UpgradeMF(upgrades), Constants.ItemName.MFU, "oc:mfu")
|
||||
|
||||
// 1.7.2
|
||||
Recipes.addSubItem(new item.WirelessNetworkCard(multi, Tier.One), Constants.ItemName.WirelessNetworkCardTier1, "oc:wlanCard1")
|
||||
registerItem(new item.ComponentBus(multi, Tier.Four), Constants.ItemName.ComponentBusCreative)
|
||||
}
|
||||
|
||||
// Storage media of all kinds.
|
||||
|
@ -1,10 +1,20 @@
|
||||
package li.cil.oc.common.item
|
||||
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.util.Rarity
|
||||
import net.minecraft.item.EnumRarity
|
||||
import net.minecraft.item.ItemStack
|
||||
|
||||
class ComponentBus(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier {
|
||||
override val unlocalizedName = super.unlocalizedName + tier
|
||||
|
||||
// Because the driver considers the creative bus to be tier 3, the superclass
|
||||
// will believe it has T3 rarity. We override that here.
|
||||
override def rarity(stack: ItemStack): EnumRarity =
|
||||
if (tier == Tier.Four) Rarity.byTier(Tier.Four)
|
||||
else super.rarity(stack)
|
||||
|
||||
override protected def tooltipName = Option(super.unlocalizedName)
|
||||
|
||||
override protected def tooltipData = Seq(Settings.get.cpuComponentSupport(tier))
|
||||
|
@ -76,6 +76,7 @@ object Present {
|
||||
add(Constants.ItemName.Alu, 45)
|
||||
add(Constants.ItemName.BatteryUpgradeTier1, 43)
|
||||
add(Constants.ItemName.NetworkCard, 38)
|
||||
add(Constants.ItemName.WirelessNetworkCardTier1, 37)
|
||||
add(Constants.ItemName.HDDTier1, 36)
|
||||
add(Constants.ItemName.GeneratorUpgrade, 35)
|
||||
add(Constants.ItemName.CPUTier1, 31)
|
||||
@ -90,7 +91,7 @@ object Present {
|
||||
add(Constants.ItemName.ChipTier2, 15)
|
||||
add(Constants.ItemName.ComponentBusTier1, 13)
|
||||
add(Constants.ItemName.BatteryUpgradeTier2, 12)
|
||||
add(Constants.ItemName.WirelessNetworkCard, 11)
|
||||
add(Constants.ItemName.WirelessNetworkCardTier2, 11)
|
||||
add(Constants.ItemName.RAMTier3, 10)
|
||||
add(Constants.ItemName.ServerTier1, 10)
|
||||
add(Constants.ItemName.InternetCard, 9)
|
||||
|
@ -1,3 +1,9 @@
|
||||
package li.cil.oc.common.item
|
||||
|
||||
class WirelessNetworkCard(val parent: Delegator) extends traits.Delegate with traits.ItemTier
|
||||
import li.cil.oc.common.Tier
|
||||
|
||||
class WirelessNetworkCard(val parent: Delegator, var tier: Int) extends traits.Delegate with traits.ItemTier {
|
||||
override val unlocalizedName = super.unlocalizedName + tier
|
||||
|
||||
override protected def tooltipName = Option(super.unlocalizedName)
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import li.cil.oc.api.nanomachines.DisableReason
|
||||
import li.cil.oc.api.network.Packet
|
||||
import li.cil.oc.api.network.WirelessEndpoint
|
||||
import li.cil.oc.common.item.data.NanomachineData
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.integration.util.DamageSourceWithRandomCause
|
||||
import li.cil.oc.server.PacketSender
|
||||
import li.cil.oc.util.BlockPosition
|
||||
@ -151,7 +152,7 @@ class ControllerImpl(val player: EntityPlayer) extends Controller with WirelessE
|
||||
def respond(endpoint: WirelessEndpoint, data: Any*): Unit = {
|
||||
queuedCommand = Option(() => {
|
||||
if (responsePort > 0) {
|
||||
val cost = Settings.get.wirelessCostPerRange * CommandRange
|
||||
val cost = Settings.get.wirelessCostPerRange(Tier.Two) * CommandRange
|
||||
val epsilon = 0.1
|
||||
if (changeBuffer(-cost) > -epsilon) {
|
||||
val packet = api.Network.newPacket(uuid, null, responsePort, (Iterable("nanomachines") ++ data.map(_.asInstanceOf[AnyRef])).toArray)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package li.cil.oc.common.tileentity
|
||||
|
||||
import li.cil.oc.Constants
|
||||
import li.cil.oc.Localization
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.api
|
||||
@ -7,6 +8,7 @@ import li.cil.oc.api.machine.Arguments
|
||||
import li.cil.oc.api.machine.Callback
|
||||
import li.cil.oc.api.machine.Context
|
||||
import li.cil.oc.api.network._
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.util.ExtendedNBT._
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
@ -15,9 +17,9 @@ import net.minecraftforge.common.util.Constants.NBT
|
||||
import net.minecraftforge.fml.relauncher.Side
|
||||
import net.minecraftforge.fml.relauncher.SideOnly
|
||||
|
||||
// TODO Remove in 1.7
|
||||
// Removed in MC 1.11
|
||||
class AccessPoint extends Switch with WirelessEndpoint with traits.PowerAcceptor {
|
||||
var strength = Settings.get.maxWirelessRange
|
||||
var strength = Settings.get.maxWirelessRange(Tier.Two)
|
||||
|
||||
var isRepeater = true
|
||||
|
||||
@ -53,7 +55,7 @@ class AccessPoint extends Switch with WirelessEndpoint with traits.PowerAcceptor
|
||||
|
||||
@Callback(doc = """function(strength:number):number -- Set the signal strength (range) used when relaying messages.""")
|
||||
def setStrength(context: Context, args: Arguments): Array[AnyRef] = synchronized {
|
||||
strength = math.max(args.checkDouble(0), math.min(0, Settings.get.maxWirelessRange))
|
||||
strength = math.max(args.checkDouble(0), math.min(0, Settings.get.maxWirelessRange(Tier.Two)))
|
||||
result(strength)
|
||||
}
|
||||
|
||||
@ -75,7 +77,7 @@ class AccessPoint extends Switch with WirelessEndpoint with traits.PowerAcceptor
|
||||
override protected def relayPacket(sourceSide: Option[EnumFacing], packet: Packet) {
|
||||
super.relayPacket(sourceSide, packet)
|
||||
if (strength > 0 && (sourceSide.isDefined || isRepeater)) {
|
||||
val cost = Settings.get.wirelessCostPerRange
|
||||
val cost = Settings.get.wirelessCostPerRange(Tier.Two)
|
||||
val tryChangeBuffer = sourceSide match {
|
||||
case Some(side) =>
|
||||
(amount: Double) => plugs(side.ordinal).node.asInstanceOf[Connector].tryChangeBuffer(amount)
|
||||
@ -121,7 +123,7 @@ class AccessPoint extends Switch with WirelessEndpoint with traits.PowerAcceptor
|
||||
override def readFromNBTForServer(nbt: NBTTagCompound) = {
|
||||
super.readFromNBTForServer(nbt)
|
||||
if (nbt.hasKey(Settings.namespace + "strength")) {
|
||||
strength = nbt.getDouble(Settings.namespace + "strength") max 0 min Settings.get.maxWirelessRange
|
||||
strength = nbt.getDouble(Settings.namespace + "strength") max 0 min Settings.get.maxWirelessRange(Tier.Two)
|
||||
}
|
||||
if (nbt.hasKey(Settings.namespace + "isRepeater")) {
|
||||
isRepeater = nbt.getBoolean(Settings.namespace + "isRepeater")
|
||||
|
@ -18,6 +18,7 @@ import li.cil.oc.api.network.Visibility
|
||||
import li.cil.oc.api.network.WirelessEndpoint
|
||||
import li.cil.oc.common.InventorySlots
|
||||
import li.cil.oc.common.Slot
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.common.item
|
||||
import li.cil.oc.common.item.Delegator
|
||||
import li.cil.oc.integration.Mods
|
||||
@ -33,15 +34,24 @@ import net.minecraftforge.fml.relauncher.Side
|
||||
import net.minecraftforge.fml.relauncher.SideOnly
|
||||
|
||||
class Relay extends traits.SwitchLike with traits.ComponentInventory with traits.PowerAcceptor with Analyzable with WirelessEndpoint with QuantumNetwork.QuantumNode {
|
||||
lazy final val WirelessNetworkCard = api.Items.get(Constants.ItemName.WirelessNetworkCard)
|
||||
lazy final val WirelessNetworkCardTier1 = api.Items.get(Constants.ItemName.WirelessNetworkCardTier1)
|
||||
lazy final val WirelessNetworkCardTier2 = api.Items.get(Constants.ItemName.WirelessNetworkCardTier2)
|
||||
lazy final val LinkedCard = api.Items.get(Constants.ItemName.LinkedCard)
|
||||
|
||||
var strength = Settings.get.maxWirelessRange
|
||||
var wirelessTier = -1
|
||||
|
||||
override def isWirelessEnabled = wirelessTier >= Tier.One
|
||||
|
||||
def maxWirelessRange = if (wirelessTier == Tier.One || wirelessTier == Tier.Two)
|
||||
Settings.get.maxWirelessRange(wirelessTier) else 0
|
||||
|
||||
def wirelessCostPerRange = if (wirelessTier == Tier.One || wirelessTier == Tier.Two)
|
||||
Settings.get.wirelessCostPerRange(wirelessTier) else 0
|
||||
|
||||
var strength = maxWirelessRange
|
||||
|
||||
var isRepeater = true
|
||||
|
||||
var isWirelessEnabled = false
|
||||
|
||||
var isLinkedEnabled = false
|
||||
|
||||
var tunnel = "creative"
|
||||
@ -79,7 +89,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
|
||||
@Callback(doc = """function(strength:number):number -- Set the signal strength (range) used when relaying messages.""")
|
||||
def setStrength(context: Context, args: Arguments): Array[AnyRef] = synchronized {
|
||||
strength = math.max(args.checkDouble(0), math.min(0, Settings.get.maxWirelessRange))
|
||||
strength = math.max(args.checkDouble(0), math.min(0, maxWirelessRange))
|
||||
result(strength)
|
||||
}
|
||||
|
||||
@ -140,14 +150,14 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
}
|
||||
|
||||
if (isWirelessEnabled && strength > 0 && (sourceSide.isDefined || isRepeater)) {
|
||||
val cost = Settings.get.wirelessCostPerRange
|
||||
val cost = wirelessCostPerRange
|
||||
if (tryChangeBuffer(-strength * cost)) {
|
||||
api.Network.sendWirelessPacket(this, strength, packet)
|
||||
}
|
||||
}
|
||||
|
||||
if (isLinkedEnabled && sourceSide.isDefined) {
|
||||
val cost = packet.size / 32.0 + Settings.get.wirelessCostPerRange * Settings.get.maxWirelessRange * 5
|
||||
val cost = packet.size / 32.0 + wirelessCostPerRange * maxWirelessRange * 5
|
||||
if (tryChangeBuffer(-cost)) {
|
||||
val endpoints = QuantumNetwork.getEndpoints(tunnel).filter(_ != this)
|
||||
for (endpoint <- endpoints) {
|
||||
@ -207,9 +217,8 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
maxQueueSize = math.max(1, queueBaseSize + (driver.tier(stack) + 1) * queueSizePerUpgrade)
|
||||
case Some(driver) if driver.slot(stack) == Slot.Card =>
|
||||
val descriptor = api.Items.get(stack)
|
||||
if (descriptor == WirelessNetworkCard) {
|
||||
isWirelessEnabled = true
|
||||
}
|
||||
if (descriptor == WirelessNetworkCardTier1 || descriptor == WirelessNetworkCardTier2)
|
||||
wirelessTier = if (descriptor == WirelessNetworkCardTier1) Tier.One else Tier.Two
|
||||
if (descriptor == LinkedCard) {
|
||||
val data = DriverLinkedCard.dataTag(stack)
|
||||
if (data.hasKey(Settings.namespace + "tunnel")) {
|
||||
@ -229,7 +238,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
case driver if driver.slot(stack) == Slot.Memory => relayAmount = relayBaseAmount
|
||||
case driver if driver.slot(stack) == Slot.HDD => maxQueueSize = queueBaseSize
|
||||
case driver if driver.slot(stack) == Slot.Card =>
|
||||
isWirelessEnabled = false
|
||||
wirelessTier = -1
|
||||
isLinkedEnabled = false
|
||||
QuantumNetwork.remove(this)
|
||||
}
|
||||
@ -241,7 +250,8 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
Option(Driver.driverFor(stack, getClass)).fold(false)(driver => {
|
||||
val provided = InventorySlots.relay(slot)
|
||||
val tierSatisfied = driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
||||
val cardTypeSatisfied = if (provided.slot == Slot.Card) api.Items.get(stack) == WirelessNetworkCard || api.Items.get(stack) == LinkedCard else true
|
||||
val cardTypeSatisfied = if (provided.slot == Slot.Card) api.Items.get(stack) == WirelessNetworkCardTier1 ||
|
||||
api.Items.get(stack) == WirelessNetworkCardTier2 || api.Items.get(stack) == LinkedCard else true
|
||||
tierSatisfied && cardTypeSatisfied
|
||||
})
|
||||
|
||||
@ -258,7 +268,7 @@ class Relay extends traits.SwitchLike with traits.ComponentInventory with traits
|
||||
}
|
||||
|
||||
if (nbt.hasKey(StrengthTag)) {
|
||||
strength = nbt.getDouble(StrengthTag) max 0 min Settings.get.maxWirelessRange
|
||||
strength = nbt.getDouble(StrengthTag) max 0 min maxWirelessRange
|
||||
}
|
||||
if (nbt.hasKey(IsRepeaterTag)) {
|
||||
isRepeater = nbt.getBoolean(IsRepeaterTag)
|
||||
|
@ -15,15 +15,17 @@ object DriverComponentBus extends Item with Processor {
|
||||
override def worksWith(stack: ItemStack) = isOneOf(stack,
|
||||
api.Items.get(Constants.ItemName.ComponentBusTier1),
|
||||
api.Items.get(Constants.ItemName.ComponentBusTier2),
|
||||
api.Items.get(Constants.ItemName.ComponentBusTier3))
|
||||
api.Items.get(Constants.ItemName.ComponentBusTier3),
|
||||
api.Items.get(Constants.ItemName.ComponentBusCreative))
|
||||
|
||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = null
|
||||
|
||||
override def slot(stack: ItemStack) = Slot.ComponentBus
|
||||
|
||||
// Clamp item tier because the creative bus needs to fit into tier 3 slots.
|
||||
override def tier(stack: ItemStack) =
|
||||
Delegator.subItem(stack) match {
|
||||
case Some(bus: item.ComponentBus) => bus.tier
|
||||
case Some(bus: item.ComponentBus) => bus.tier min Tier.Three
|
||||
case _ => Tier.One
|
||||
}
|
||||
|
||||
|
@ -4,27 +4,41 @@ import li.cil.oc.Constants
|
||||
import li.cil.oc.api
|
||||
import li.cil.oc.api.driver.EnvironmentProvider
|
||||
import li.cil.oc.api.network.EnvironmentHost
|
||||
import li.cil.oc.common
|
||||
import li.cil.oc.common.Slot
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.common.item.Delegator
|
||||
import li.cil.oc.server.component
|
||||
import net.minecraft.item.ItemStack
|
||||
|
||||
object DriverWirelessNetworkCard extends Item {
|
||||
override def worksWith(stack: ItemStack) = isOneOf(stack,
|
||||
api.Items.get(Constants.ItemName.WirelessNetworkCard))
|
||||
api.Items.get(Constants.ItemName.WirelessNetworkCardTier1),
|
||||
api.Items.get(Constants.ItemName.WirelessNetworkCardTier2))
|
||||
|
||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||
if (host.world != null && host.world.isRemote) null
|
||||
else new component.WirelessNetworkCard(host)
|
||||
else tier(stack) match {
|
||||
case Tier.One => new component.WirelessNetworkCard.Tier1(host)
|
||||
case Tier.Two => new component.WirelessNetworkCard.Tier2(host)
|
||||
case _ => null
|
||||
}
|
||||
|
||||
override def slot(stack: ItemStack) = Slot.Card
|
||||
|
||||
override def tier(stack: ItemStack) = Tier.Two
|
||||
override def tier(stack: ItemStack) =
|
||||
Delegator.subItem(stack) match {
|
||||
case Some(card: common.item.WirelessNetworkCard) => card.tier
|
||||
case _ => Tier.One
|
||||
}
|
||||
|
||||
object Provider extends EnvironmentProvider {
|
||||
override def getEnvironment(stack: ItemStack) =
|
||||
if (worksWith(stack))
|
||||
classOf[component.WirelessNetworkCard]
|
||||
override def getEnvironment(stack: ItemStack): Class[_] =
|
||||
if (worksWith(stack)) tier(stack) match {
|
||||
case Tier.One => classOf[component.WirelessNetworkCard.Tier1]
|
||||
case Tier.Two => classOf[component.WirelessNetworkCard.Tier2]
|
||||
case _ => null
|
||||
}
|
||||
else null
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ import li.cil.oc.api.machine.Context
|
||||
import li.cil.oc.api.network._
|
||||
import li.cil.oc.api.driver.DeviceInfo
|
||||
import li.cil.oc.api.prefab
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.server.network.QuantumNetwork
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
|
||||
@ -47,7 +48,7 @@ class LinkedCard extends prefab.ManagedEnvironment with QuantumNetwork.QuantumNo
|
||||
val endpoints = QuantumNetwork.getEndpoints(tunnel).filter(_ != this)
|
||||
// Cast to iterable to use Scala's toArray instead of the Arguments' one (which converts byte arrays to Strings).
|
||||
val packet = Network.newPacket(node.address, null, 0, args.asInstanceOf[java.lang.Iterable[AnyRef]].toArray)
|
||||
if (node.tryChangeBuffer(-(packet.size / 32.0 + Settings.get.wirelessCostPerRange * Settings.get.maxWirelessRange * 5))) {
|
||||
if (node.tryChangeBuffer(-(packet.size / 32.0 + Settings.get.wirelessCostPerRange(Tier.Two) * Settings.get.maxWirelessRange(Tier.Two) * 5))) {
|
||||
for (endpoint <- endpoints) {
|
||||
endpoint.receivePacket(packet)
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import java.util
|
||||
|
||||
import com.google.common.base.Charsets
|
||||
import li.cil.oc.Constants
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute
|
||||
import li.cil.oc.api.driver.DeviceInfo.DeviceClass
|
||||
import li.cil.oc.Settings
|
||||
@ -37,6 +38,9 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
|
||||
|
||||
protected val openPorts = mutable.Set.empty[Int]
|
||||
|
||||
// wired network card is the 1st in the max ports list (before both wireless cards)
|
||||
protected def maxOpenPorts = Settings.get.maxOpenPorts(Tier.One)
|
||||
|
||||
protected var wakeMessage: Option[String] = None
|
||||
|
||||
protected var wakeMessageFuzzy = false
|
||||
@ -48,7 +52,9 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
|
||||
DeviceAttribute.Description -> "Ethernet controller",
|
||||
DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
|
||||
DeviceAttribute.Product -> "42i520 (MPN-01)",
|
||||
DeviceAttribute.Version -> "1.0",
|
||||
DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString,
|
||||
DeviceAttribute.Size -> maxOpenPorts.toString,
|
||||
DeviceAttribute.Width -> Settings.get.maxNetworkPacketParts.toString
|
||||
)
|
||||
|
||||
@ -60,7 +66,7 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
|
||||
def open(context: Context, args: Arguments): Array[AnyRef] = {
|
||||
val port = checkPort(args.checkInteger(0))
|
||||
if (openPorts.contains(port)) result(false)
|
||||
else if (openPorts.size >= Settings.get.maxOpenPorts) {
|
||||
else if (openPorts.size >= maxOpenPorts) {
|
||||
throw new java.io.IOException("too many open ports")
|
||||
}
|
||||
else result(openPorts.add(port))
|
||||
@ -85,9 +91,12 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
|
||||
result(openPorts.contains(port))
|
||||
}
|
||||
|
||||
@Callback(direct = true, doc = """function():boolean -- Whether this is a wireless network card.""")
|
||||
@Callback(direct = true, doc = """function():boolean -- Whether this card has wireless networking capability.""")
|
||||
def isWireless(context: Context, args: Arguments): Array[AnyRef] = result(false)
|
||||
|
||||
@Callback(direct = true, doc = """function():boolean -- Whether this card has wired networking capability.""")
|
||||
def isWired(context: Context, args: Arguments): Array[AnyRef] = result(true)
|
||||
|
||||
@Callback(doc = """function(address:string, port:number, data...) -- Sends the specified data to the specified target.""")
|
||||
def send(context: Context, args: Arguments): Array[AnyRef] = {
|
||||
val address = args.checkString(0)
|
||||
@ -107,7 +116,7 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
|
||||
result(true)
|
||||
}
|
||||
|
||||
// TODO 1.7 Remove, covered by device info now
|
||||
//Removed in MC 1.11
|
||||
@Callback(direct = true, doc = """function():number -- Gets the maximum packet size (config setting).""")
|
||||
def maxPacketSize(context: Context, args: Arguments): Array[AnyRef] = result(Settings.get.maxNetworkPacketSize)
|
||||
|
||||
|
@ -18,6 +18,7 @@ import li.cil.oc.api.network.EnvironmentHost
|
||||
import li.cil.oc.api.network._
|
||||
import li.cil.oc.api.prefab
|
||||
import li.cil.oc.common.item.data.NavigationUpgradeData
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.server.network.Waypoints
|
||||
import li.cil.oc.util.BlockPosition
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
@ -68,9 +69,9 @@ class UpgradeNavigation(val host: EnvironmentHost with Rotatable) extends prefab
|
||||
|
||||
@Callback(doc = """function(range:number):table -- Find waypoints in the specified range.""")
|
||||
def findWaypoints(context: Context, args: Arguments): Array[AnyRef] = {
|
||||
val range = args.checkDouble(0) max 0 min Settings.get.maxWirelessRange
|
||||
val range = args.checkDouble(0) max 0 min Settings.get.maxWirelessRange(Tier.Two)
|
||||
if (range <= 0) return result(Array.empty)
|
||||
if (!node.tryChangeBuffer(-range * Settings.get.wirelessCostPerRange * 0.25)) return result(Unit, "not enough energy")
|
||||
if (!node.tryChangeBuffer(-range * Settings.get.wirelessCostPerRange(Tier.Two) * 0.25)) return result(Unit, "not enough energy")
|
||||
context.pause(0.5)
|
||||
val position = BlockPosition(host)
|
||||
val positionVec = position.toVec3
|
||||
|
@ -7,6 +7,7 @@ import li.cil.oc.Constants
|
||||
import li.cil.oc.api.driver.DeviceInfo.DeviceAttribute
|
||||
import li.cil.oc.api.driver.DeviceInfo.DeviceClass
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.common.Tier
|
||||
import li.cil.oc.api
|
||||
import li.cil.oc.api.Network
|
||||
import li.cil.oc.api.network.EnvironmentHost
|
||||
@ -21,12 +22,13 @@ import net.minecraft.nbt.NBTTagCompound
|
||||
import scala.collection.convert.WrapAsJava._
|
||||
import scala.language.implicitConversions
|
||||
|
||||
class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with WirelessEndpoint {
|
||||
abstract class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with WirelessEndpoint {
|
||||
override val node = Network.newNode(this, Visibility.Network).
|
||||
withComponent("modem", Visibility.Neighbors).
|
||||
withConnector().
|
||||
create()
|
||||
|
||||
<<<<<<< HEAD
|
||||
var strength = Settings.get.maxWirelessRange
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
@ -45,6 +47,36 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
def position = BlockPosition(host)
|
||||
||||||| merged common ancestors
|
||||
var strength = Settings.get.maxWirelessRange
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
private final lazy val deviceInfo = Map(
|
||||
DeviceAttribute.Class -> DeviceClass.Network,
|
||||
DeviceAttribute.Description -> "Wireless ethernet controller",
|
||||
DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
|
||||
DeviceAttribute.Product -> "62i230 (MPW-01)",
|
||||
DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString,
|
||||
DeviceAttribute.Width -> Settings.get.maxWirelessRange.toString
|
||||
)
|
||||
|
||||
override def getDeviceInfo: util.Map[String, String] = deviceInfo
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
override def x = BlockPosition(host).x
|
||||
=======
|
||||
protected def wirelessCostPerRange: Double
|
||||
|
||||
protected def maxWirelessRange: Double
|
||||
|
||||
protected def shouldSendWiredTraffic: Boolean
|
||||
|
||||
var strength = maxWirelessRange
|
||||
|
||||
override def x = BlockPosition(host).x
|
||||
>>>>>>> master-MC1.7.10
|
||||
|
||||
override def x = position.x
|
||||
|
||||
@ -67,18 +99,21 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with
|
||||
|
||||
@Callback(doc = """function(strength:number):number -- Set the signal strength (range) used when sending messages.""")
|
||||
def setStrength(context: Context, args: Arguments): Array[AnyRef] = {
|
||||
strength = math.max(0, math.min(args.checkDouble(0), Settings.get.maxWirelessRange))
|
||||
strength = math.max(0, math.min(args.checkDouble(0), maxWirelessRange))
|
||||
result(strength)
|
||||
}
|
||||
|
||||
override def isWireless(context: Context, args: Arguments): Array[AnyRef] = result(true)
|
||||
|
||||
override def isWired(context: Context, args: Arguments): Array[AnyRef] = result(shouldSendWiredTraffic)
|
||||
|
||||
override protected def doSend(packet: Packet) {
|
||||
if (strength > 0) {
|
||||
checkPower()
|
||||
api.Network.sendWirelessPacket(this, strength, packet)
|
||||
}
|
||||
super.doSend(packet)
|
||||
if (shouldSendWiredTraffic)
|
||||
super.doSend(packet)
|
||||
}
|
||||
|
||||
override protected def doBroadcast(packet: Packet) {
|
||||
@ -86,11 +121,12 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with
|
||||
checkPower()
|
||||
api.Network.sendWirelessPacket(this, strength, packet)
|
||||
}
|
||||
super.doBroadcast(packet)
|
||||
if (shouldSendWiredTraffic)
|
||||
super.doBroadcast(packet)
|
||||
}
|
||||
|
||||
private def checkPower() {
|
||||
val cost = Settings.get.wirelessCostPerRange
|
||||
val cost = wirelessCostPerRange
|
||||
if (cost > 0 && !Settings.get.ignorePower) {
|
||||
if (!node.tryChangeBuffer(-strength * cost)) {
|
||||
throw new IOException("not enough energy")
|
||||
@ -130,7 +166,7 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with
|
||||
override def load(nbt: NBTTagCompound) {
|
||||
super.load(nbt)
|
||||
if (nbt.hasKey(StrengthTag)) {
|
||||
strength = nbt.getDouble(StrengthTag) max 0 min Settings.get.maxWirelessRange
|
||||
strength = nbt.getDouble(StrengthTag) max 0 min maxWirelessRange
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,3 +175,57 @@ class WirelessNetworkCard(host: EnvironmentHost) extends NetworkCard(host) with
|
||||
nbt.setDouble(StrengthTag, strength)
|
||||
}
|
||||
}
|
||||
|
||||
object WirelessNetworkCard {
|
||||
class Tier1(host: EnvironmentHost) extends WirelessNetworkCard(host) {
|
||||
override protected def wirelessCostPerRange = Settings.get.wirelessCostPerRange(Tier.One)
|
||||
|
||||
override protected def maxWirelessRange = Settings.get.maxWirelessRange(Tier.One)
|
||||
|
||||
// wired network card is before wireless cards in max port list
|
||||
override protected def maxOpenPorts = Settings.get.maxOpenPorts(Tier.One + 1)
|
||||
|
||||
override protected def shouldSendWiredTraffic = false
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
private final lazy val deviceInfo = Map(
|
||||
DeviceAttribute.Class -> DeviceClass.Network,
|
||||
DeviceAttribute.Description -> "Wireless ethernet controller",
|
||||
DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
|
||||
DeviceAttribute.Product -> "39i110 (LPPW-01)",
|
||||
DeviceAttribute.Version -> "1.0",
|
||||
DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString,
|
||||
DeviceAttribute.Size -> maxOpenPorts.toString,
|
||||
DeviceAttribute.Width -> maxWirelessRange.toString
|
||||
)
|
||||
|
||||
override def getDeviceInfo: util.Map[String, String] = deviceInfo
|
||||
}
|
||||
|
||||
class Tier2(host: EnvironmentHost) extends Tier1(host) {
|
||||
override protected def wirelessCostPerRange = Settings.get.wirelessCostPerRange(Tier.Two)
|
||||
|
||||
override protected def maxWirelessRange = Settings.get.maxWirelessRange(Tier.Two)
|
||||
|
||||
// wired network card is before wireless cards in max port list
|
||||
override protected def maxOpenPorts = Settings.get.maxOpenPorts(Tier.Two + 1)
|
||||
|
||||
override protected def shouldSendWiredTraffic = true
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
private final lazy val deviceInfo = Map(
|
||||
DeviceAttribute.Class -> DeviceClass.Network,
|
||||
DeviceAttribute.Description -> "Wireless ethernet controller",
|
||||
DeviceAttribute.Vendor -> Constants.DeviceInfo.DefaultVendor,
|
||||
DeviceAttribute.Product -> "62i230 (MPW-01)",
|
||||
DeviceAttribute.Version -> "2.0",
|
||||
DeviceAttribute.Capacity -> Settings.get.maxNetworkPacketSize.toString,
|
||||
DeviceAttribute.Size -> maxOpenPorts.toString,
|
||||
DeviceAttribute.Width -> maxWirelessRange.toString
|
||||
)
|
||||
|
||||
override def getDeviceInfo: util.Map[String, String] = deviceInfo
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +1,182 @@
|
||||
package li.cil.oc.util
|
||||
|
||||
import java.io.IOException
|
||||
import java.io.{BufferedReader, InputStreamReader}
|
||||
import java.nio.charset.StandardCharsets
|
||||
import scala.collection.mutable.BitSet
|
||||
|
||||
import li.cil.oc.OpenComputers
|
||||
|
||||
object FontUtils {
|
||||
// Note: we load the widths from a file (one byte per width) because the Scala
|
||||
// compiler craps its pants when we try to have it as an array in the source
|
||||
// file... seems having an array with 0x10000 entries leads to stack overflows,
|
||||
// who would have known!
|
||||
private val widths = {
|
||||
val ba = Array.fill[Byte](0x10000)(-1)
|
||||
// Note to self: NOT VIA THE FUCKING RESOURCE SYSTEM BECAUSE IT'S FUCKING CLIENT ONLY YOU IDIOT.
|
||||
val is = FontUtils.getClass.getResourceAsStream("/assets/opencomputers/wcwidth.bin")
|
||||
if (is != null) {
|
||||
try {
|
||||
is.read(ba)
|
||||
is.close()
|
||||
} catch {
|
||||
case e: IOException => OpenComputers.log.warn("Failed loading character widths. Font rendering will probably be derpy as all hell.", e)
|
||||
}
|
||||
}
|
||||
ba
|
||||
}
|
||||
private val defined_double_wide: BitSet = BitSet()
|
||||
|
||||
def wcwidth(ch: Int) = if (ch < 0 || ch >= widths.length) -1 else widths(ch)
|
||||
// font.hex actually has some codepoints larger than 0x10000
|
||||
// but, UnicodeAPI.scala is using java's Integer.ToChar which only supports the utf-16 range
|
||||
// and thus will truncate any incoming codepoint, forcing it below 0x10000
|
||||
// I believe the solution is to use StringBuffer.appendCodePoint
|
||||
// but that change would deserve a bit of testing first, postponing for a later update
|
||||
// review http://www.oracle.com/us/technologies/java/supplementary-142654.html
|
||||
val codepoint_limit: Int = 0x10000
|
||||
def wcwidth(charCode: Int): Int = if (defined_double_wide(charCode)) 2 else 1
|
||||
|
||||
{
|
||||
val table = Array[Int](
|
||||
16,16,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,16,16,32,16,16,16,33,34,35,
|
||||
36,37,38,39,16,16,40,16,16,16,16,16,16,16,16,16,16,16,41,42,16,16,43,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,44,16,45,46,47,48,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,49,16,16,50,51,16,52,16,16,
|
||||
16,16,16,16,16,16,53,16,16,16,16,16,54,55,16,16,16,16,56,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,57,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,58,59,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,3,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,191,
|
||||
182,0,0,0,0,0,0,0,31,0,255,7,0,0,0,0,0,248,255,255,0,0,1,0,0,0,0,0,0,0,0,0,0,
|
||||
0,192,191,159,61,0,0,0,128,2,0,0,0,255,255,255,7,0,0,0,0,0,0,0,0,0,0,192,255,
|
||||
1,0,0,0,0,0,0,248,15,0,0,0,192,251,239,62,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,240,255,255,127,7,0,0,0,0,0,0,20,254,33,254,0,12,0,0,0,2,0,0,0,0,0,
|
||||
0,16,30,32,0,0,12,0,0,0,6,0,0,0,0,0,0,16,134,57,2,0,0,0,35,0,6,0,0,0,0,0,0,16,
|
||||
190,33,0,0,12,0,0,0,2,0,0,0,0,0,0,144,30,32,64,0,12,0,0,0,4,0,0,0,0,0,0,0,1,
|
||||
32,0,0,0,0,0,0,0,0,0,0,0,0,0,192,193,61,96,0,12,0,0,0,0,0,0,0,0,0,0,144,64,48,
|
||||
0,0,12,0,0,0,0,0,0,0,0,0,0,0,30,32,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,4,92,0,0,0,
|
||||
0,0,0,0,0,0,0,0,242,7,128,127,0,0,0,0,0,0,0,0,0,0,0,0,242,27,0,63,0,0,0,0,0,0,
|
||||
0,0,0,3,0,0,160,2,0,0,0,0,0,0,254,127,223,224,255,254,255,255,255,31,64,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,224,253,102,0,0,0,195,1,0,30,0,100,32,0,32,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
28,0,0,0,28,0,0,0,12,0,0,0,12,0,0,0,0,0,0,0,176,63,64,254,15,32,0,0,0,0,0,56,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,1,4,
|
||||
14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,0,0,0,0,0,64,
|
||||
127,229,31,248,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,208,23,4,0,0,
|
||||
0,0,248,15,0,3,0,0,0,60,11,0,0,0,0,0,0,64,163,3,0,0,0,0,0,0,240,207,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,255,253,33,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,255,255,255,255,127,0,0,240,0,248,0,0,0,124,0,0,0,0,0,0,31,
|
||||
252,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,247,63,0,0,0,128,0,0,0,0,0,
|
||||
0,0,0,0,0,3,0,68,8,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,255,
|
||||
255,3,0,0,0,0,0,192,63,0,0,128,255,3,0,0,0,0,0,7,0,0,0,0,0,200,19,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,126,102,0,8,16,0,0,0,0,0,0,0,0,0,0,0,0,157,193,2,0,0,0,0,48,64,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,33,0,0,0,0,0,64,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,127,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,32,110,240,0,0,0,0,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,255,127,0,0,0,0,0,0,0,3,0,0,0,0,0,120,38,0,0,
|
||||
0,0,0,0,0,0,7,0,0,0,128,239,31,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,192,127,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,191,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,128,3,248,255,231,15,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
)
|
||||
val wtable = Array[Int](
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,19,16,16,16,16,16,16,16,16,16,16,20,21,22,23,24,17,
|
||||
17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,25,
|
||||
17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
|
||||
17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
|
||||
17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
|
||||
17,17,17,17,17,17,17,17,26,16,16,16,16,27,16,16,17,17,17,17,17,17,17,17,17,17,
|
||||
17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
|
||||
17,17,17,17,17,17,17,28,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,16,16,16,29,30,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,31,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
|
||||
16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,
|
||||
0,248,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,251,255,255,255,
|
||||
255,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,255,15,
|
||||
255,255,255,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,127,
|
||||
254,255,255,255,255,255,255,255,255,255,255,255,255,224,255,255,255,255,63,
|
||||
254,255,255,255,255,255,255,255,255,255,255,127,255,255,255,255,255,7,255,255,
|
||||
255,255,15,0,255,255,255,255,255,127,255,255,255,255,255,0,255,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,255,255,31,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,
|
||||
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,
|
||||
255,127,248,255,255,255,255,255,15,0,0,255,3,0,0,255,255,255,255,247,255,127,
|
||||
15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,255,255,255,255,
|
||||
255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,255,255,255,255,255,7,255,1,3,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
)
|
||||
def c_wcwidth(charCode: Int): Int = {
|
||||
if (charCode < 0xFF) {
|
||||
if (((charCode + 1) & 0x7F) >= 0x21) 1
|
||||
else if (charCode > 0) -1
|
||||
else 0
|
||||
}
|
||||
else if ((charCode & 0xfffeffff) < 0xfffe) {
|
||||
if (((table(table(charCode >> 8) * 32 + ((charCode & 0xFF) >> 3)) >> (charCode & 7)) & 1) == 1) 0
|
||||
else if (((wtable(wtable(charCode >> 8) * 32 + ((charCode & 0xFF) >> 3)) >> (charCode & 7)) & 1) == 1) 2
|
||||
else 1
|
||||
}
|
||||
else if ((charCode & 0xfffe) == 0xfffe) -1
|
||||
else if ((charCode - 0x20000) < 0x20000) 2
|
||||
else if ((charCode == 0xe0001) || ((charCode - 0xe0020) < 0x5f) || ((charCode - 0xe0100) < 0xef)) 0
|
||||
else 1
|
||||
}
|
||||
OpenComputers.log.info("Initializing unicode wcwidth.")
|
||||
for (i <- 0 until codepoint_limit) {
|
||||
if (c_wcwidth(i) == 2)
|
||||
defined_double_wide += i
|
||||
}
|
||||
try {
|
||||
OpenComputers.log.info("Initializing font glyph widths.")
|
||||
val font = FontUtils.getClass.getResourceAsStream("/assets/opencomputers/font.hex")
|
||||
try {
|
||||
var line: String = null
|
||||
val input = new BufferedReader(new InputStreamReader(font, StandardCharsets.UTF_8))
|
||||
while ({line = input.readLine; line != null}) {
|
||||
val info = line.split(":")
|
||||
val charCode = Integer.parseInt(info(0), 16)
|
||||
if (charCode >= 0 && charCode < codepoint_limit) {
|
||||
info(1).trim.length match {
|
||||
case 64 => defined_double_wide += charCode
|
||||
case 32 => defined_double_wide -= charCode
|
||||
case n => OpenComputers.log.warn(s"Invalid glyph size detected in font.hex. Expected 64 or 32, got: $n")
|
||||
}
|
||||
} else {
|
||||
OpenComputers.log.warn(f"Invalid glyph char code detected in font.hex. Expected 0<= charCode <$codepoint_limit%X, got: $charCode%X")
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
font.close()
|
||||
} catch {
|
||||
case ex: Throwable => OpenComputers.log.error(s"Error closing font.hex: $ex")
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
case ex: Throwable => OpenComputers.log.error(s"Error parsing glyphs to determine widths: $ex")
|
||||
}
|
||||
OpenComputers.log.info("glyph width ready.")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user