diff --git a/src/content/docs/script/learn-lua/from-lsl.mdx b/src/content/docs/script/learn-lua/from-lsl.mdx index 0888bcc..2ad0239 100644 --- a/src/content/docs/script/learn-lua/from-lsl.mdx +++ b/src/content/docs/script/learn-lua/from-lsl.mdx @@ -83,7 +83,7 @@ local items: {number} = {1, 2, 3} -- tables, not lists | Operation | LSL | Lua | Notes | |-----------|-----|------|-------| -| Not equal | `!=` | `~=` | Different operator | +| Not equal | `!=` | `~=` | **Different operator** | | Logical AND | `&&` | `and` | Word, not symbol | | Logical OR | `\|\|` | `or` | Word, not symbol | | Logical NOT | `!` | `not` | Word, not symbol | @@ -93,6 +93,19 @@ local items: {number} = {1, 2, 3} -- tables, not lists | Power | `llPow(2, 3)` | `2 ^ 3` | Native operator | | Integer division | `7 / 4` → `1` | `7 // 4` → `1` | Use `//` not `/` | | String length | `llStringLength(s)` | `#s` | Native operator | +| Bitwise AND | `llGetAgentInfo(id) & AGENT_TYPING` | `bit32.btest(ll.GetAgentInfo(id), AGENT_TYPING)` | No `&` operator [(1)](#band) | +| Bitwise OR | `PASSIVE \| SCRIPTED` | `bit32.bor(PASSIVE, SCRIPTED)` | No `\|` operator | +| Bitwise NOT | `~0` | `bit32.bnot(0)` | No `~` operator [(2)](#s32) | +| Bitwise eXclusive OR | `6 ^ 3` | `bit32.bxor(6, 3)` | `^` means Power instead [(2)](#s32) | +| Bitwise Shift Left | `1 << 2` | `bit32.lshift(1, 2)` | No `<<` operator [(2)](#s32) | +| Bitwise Shift Right | `0x80000000 >> 2` | `bit32.arshift(0x80000000, 2)` | No `>>` operator [(2)](#s32) | + +Notes: +1. `bit32.btest` returns a boolean; `bit32.band` returns an integer. Both match the behavior of LSL `&`. + Integers (`bit32.band`) don't work inside `if` statements, unlike LSL. Use whichever is most appropriate. +2. Hexadecimal numbers `0x8000000` and above are positive in Lua, but negative in LSL, + due to different number formats (signed 32-bit int vs 64-bit float). Use `bit32.s32` to wrap large numbers + down to the 32-bit signed integer range for LSL compatability. ### Control Flow