Network: unify flags docs and implementation
This commit is contained in:
		
							parent
							
								
									4841926f83
								
							
						
					
					
						commit
						5c1d2b3393
					
				| 
						 | 
				
			
			@ -710,7 +710,8 @@ def collect_hints(ctx: Context, team: int, slot: int, item: str) -> typing.List[
 | 
			
		|||
            if receiving_player == slot and item_id == seeked_item_id:
 | 
			
		||||
                found = location_id in ctx.location_checks[team, finding_player]
 | 
			
		||||
                entrance = ctx.er_hint_data.get(finding_player, {}).get(location_id, "")
 | 
			
		||||
                hints.append(NetUtils.Hint(receiving_player, finding_player, location_id, item_id, found, entrance, item_flags))
 | 
			
		||||
                hints.append(NetUtils.Hint(receiving_player, finding_player, location_id, item_id, found, entrance,
 | 
			
		||||
                                           item_flags))
 | 
			
		||||
 | 
			
		||||
    return hints
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,8 @@ class JSONMessagePart(typing.TypedDict, total=False):
 | 
			
		|||
    color: str
 | 
			
		||||
    # owning player for location/item
 | 
			
		||||
    player: int
 | 
			
		||||
    # if type == item indicates item flags
 | 
			
		||||
    flags: int
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ClientStatus(enum.IntEnum):
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +213,7 @@ class JSONtoTextParser(metaclass=HandlerMeta):
 | 
			
		|||
        return self._handle_color(node)
 | 
			
		||||
 | 
			
		||||
    def _handle_item_name(self, node: JSONMessagePart):
 | 
			
		||||
        flags = node.get("item_flags", 0)
 | 
			
		||||
        flags = node.get("flags", 0)
 | 
			
		||||
        if flags == 0:
 | 
			
		||||
            node["color"] = 'cyan'
 | 
			
		||||
        elif flags & 1 << 0: # advancement
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +268,7 @@ def add_json_text(parts: list, text: typing.Any, **kwargs) -> None:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def add_json_item(parts: list, item_id: int, player: int = 0, item_flags: int = 0, **kwargs) -> None:
 | 
			
		||||
    parts.append({"text": str(item_id), "player": player, "item_flags": item_flags, "type": JSONTypes.item_id, **kwargs})
 | 
			
		||||
    parts.append({"text": str(item_id), "player": player, "flags": item_flags, "type": JSONTypes.item_id, **kwargs})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def add_json_location(parts: list, item_id: int, player: int = 0, **kwargs) -> None:
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +289,8 @@ class Hint(typing.NamedTuple):
 | 
			
		|||
            return self
 | 
			
		||||
        found = self.location in ctx.location_checks[team, self.finding_player]
 | 
			
		||||
        if found:
 | 
			
		||||
            return Hint(self.receiving_player, self.finding_player, self.location, self.item, found, self.entrance, self.item_flags)
 | 
			
		||||
            return Hint(self.receiving_player, self.finding_player, self.location, self.item, found, self.entrance,
 | 
			
		||||
                        self.item_flags)
 | 
			
		||||
        return self
 | 
			
		||||
 | 
			
		||||
    def __hash__(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -342,10 +342,10 @@ In JSON this may look like:
 | 
			
		|||
Flags are bit flags:
 | 
			
		||||
| Flag | Meaning |
 | 
			
		||||
| ----- | ----- |
 | 
			
		||||
| 0 | Indicates, indicates the item had no specail use in generation |
 | 
			
		||||
| 1 << 0 | If set, indicates the item can unlock advancement |
 | 
			
		||||
| 1 << 1 | If set, indicates the item is important but not necessarily unlocks advancement |
 | 
			
		||||
| 1 << 2 | If set, indicates the item is an trap |
 | 
			
		||||
| 0 | Nothing special about this item |
 | 
			
		||||
| 0b100 | If set, indicates the item can unlock logical advancement |
 | 
			
		||||
| 0b100 | If set, indicates the item is important but not in a way that unlocks advancement |
 | 
			
		||||
| 0b100 | If set, indicates the item is a trap |
 | 
			
		||||
 | 
			
		||||
### JSONMessagePart
 | 
			
		||||
Message nodes sent along with [PrintJSON](#PrintJSON) packet to be reconstructed into a legible message. The nodes are intended to be read in the order they are listed in the packet.
 | 
			
		||||
| 
						 | 
				
			
			@ -355,8 +355,8 @@ from typing import TypedDict, Optional
 | 
			
		|||
class JSONMessagePart(TypedDict):
 | 
			
		||||
    type: Optional[str]
 | 
			
		||||
    text: Optional[str]
 | 
			
		||||
    color: Optional[str] # only available if type is an color
 | 
			
		||||
    item_flags: Optional[int] # only available if type is an item
 | 
			
		||||
    color: Optional[str] # only available if type is a color
 | 
			
		||||
    flags: Optional[int] # only available if type is an item_id or item_name
 | 
			
		||||
    player: Optional[int] # only available if type is either item or location
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -371,7 +371,7 @@ Possible values for `type` include:
 | 
			
		|||
| item_id | Item ID, should be resolved to Item Name |
 | 
			
		||||
| item_name | Item Name, not currently used over network, but supported by reference Clients. |
 | 
			
		||||
| location_id | Location ID, should be resolved to Location Name |
 | 
			
		||||
| location_name |Location Name, not currently used over network, but supported by reference Clients. |
 | 
			
		||||
| location_name | Location Name, not currently used over network, but supported by reference Clients. |
 | 
			
		||||
| entrance_name | Entrance Name. No ID mapping exists. |
 | 
			
		||||
| color | Regular text that should be colored. Only `type` that will contain `color` data. |
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ Color options:
 | 
			
		|||
 | 
			
		||||
`text` is the content of the message part to be displayed.
 | 
			
		||||
`player` marks owning player id for location/item, 
 | 
			
		||||
`item_flags` contains the [NetworkItem](#NetworkItem) flags that belong to the item
 | 
			
		||||
`flags` contains the [NetworkItem](#NetworkItem) flags that belong to the item
 | 
			
		||||
 | 
			
		||||
### Client States
 | 
			
		||||
An enumeration containing the possible client states that may be used to inform the server in [StatusUpdate](#StatusUpdate).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue