channel

package
v0.0.38 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 30, 2025 License: MIT Imports: 36 Imported by: 3

Documentation

Index

Constants

View Source
const (
	// Byte 1 (bits 0..7)
	BuffWeaponAttack  = 0
	BuffWeaponDefense = 1
	BuffMagicAttack   = 2
	BuffMagicDefense  = 3

	BuffAccuracy     = 4
	BuffAvoidability = 5
	BuffHands        = 6
	BuffSpeed        = 7

	// Byte 2 (bits 8..15)
	BuffJump       = 8
	BuffMagicGuard = 9
	BuffDarkSight  = 10
	BuffBooster    = 11
	BuffPowerGuard = 12
	BuffMaxHP      = 13
	BuffMaxMP      = 14
	BuffInvincible = 15

	// Byte 3 (bits 16..23)
	BuffSoulArrow   = 16
	BuffStun        = 17
	BuffPoison      = 18
	BuffSeal        = 19
	BuffDarkness    = 20
	BuffComboAttack = 21
	BuffCharges     = 22
	BuffDragonBlood = 23

	// Byte 4 (bits 24..31)
	BuffHolySymbol       = 24
	BuffMesoUP           = 25
	BuffShadowPartner    = 26
	BuffPickPocketMesoUP = 27
	BuffMesoGuard        = 28
	BuffThaw             = 29
	BuffWeakness         = 30
	BuffCurse            = 31
)

BuffValueTypes now represent bit positions, not bitmasks.

View Source
const (
	Ver_1  = 32
	Ver_14 = 64

	Default = Ver_14 // Most common versions used are UINT128.
)

Version/collection bit lengths

Variables

This section is empty.

Functions

func AddSkillBuff

func AddSkillBuff(skillID int32, bits ...int)

AddSkillBuff registers one or more Flag bit positions for a skill.

func GenerateCashID added in v0.0.38

func GenerateCashID() int64

GenerateCashID generates a unique cash ID using crypto/rand

func LoadBuffs

func LoadBuffs()

LoadBuffs seeds known skill -> buff bit mappings.

func NewCharacterBuffs

func NewCharacterBuffs(p *Player)

func StopSaver

func StopSaver()

Types

type BuffSnapshot

type BuffSnapshot struct {
	SourceID    int32 // skillID or -itemID
	Level       byte  // 0 for Item buffs
	ExpiresAtMs int64 // 0 for toggles/indefinite
}

type CharacterBuffs

type CharacterBuffs struct {
	// contains filtered or unexported fields
}

func (*CharacterBuffs) AddBuff

func (cb *CharacterBuffs) AddBuff(charId, skillID int32, level byte, foreign bool, delay int16)

func (*CharacterBuffs) AddBuffFromCC

func (cb *CharacterBuffs) AddBuffFromCC(charId, skillID int32, expiresAtMs int64, level byte, foreign bool, delay int16)

func (*CharacterBuffs) AddItemBuff

func (cb *CharacterBuffs) AddItemBuff(meta nx.Item, sourceID int32)

durationSec is the client-visible remaining time in seconds. Source ID is encoded as -Item.ID.

func (*CharacterBuffs) AddItemBuffFromCC

func (cb *CharacterBuffs) AddItemBuffFromCC(itemID int32, expiresAtMs int64)

func (*CharacterBuffs) AddMobDebuff

func (cb *CharacterBuffs) AddMobDebuff(skillID, level byte, durationSec int16)

AddMobDebuff applies a debuff from a mob skill to the player

func (*CharacterBuffs) AuditAndExpireStaleBuffs

func (cb *CharacterBuffs) AuditAndExpireStaleBuffs()

func (*CharacterBuffs) HasGMHide

func (cb *CharacterBuffs) HasGMHide() bool

func (*CharacterBuffs) HasHolySymbol added in v0.0.20

func (cb *CharacterBuffs) HasHolySymbol(memberCount int) (bool, int)

func (*CharacterBuffs) RestoreFromSnapshot

func (cb *CharacterBuffs) RestoreFromSnapshot(snaps []BuffSnapshot)

func (*CharacterBuffs) Snapshot

func (cb *CharacterBuffs) Snapshot() []BuffSnapshot

type DirtyBits

type DirtyBits uint64

DirtyBits mark which character columns need persisting.

const (
	DirtyAP DirtyBits = 1 << iota
	DirtySP
	DirtyMesos
	DirtyHP
	DirtyMP
	DirtyMaxHP
	DirtyMaxMP
	DirtyEXP
	DirtyMap
	DirtyPrevMap
	DirtyJob
	DirtyLevel
	DirtyStr
	DirtyDex
	DirtyInt
	DirtyLuk
	DirtyFame
	DirtyInvSlotSizes
	DirtyMiniGame
	DirtyBuddySize
	DirtySkills
	DirtyNX
	DirtyMaplePoints
	DirtyPet
	DirtyTeleportRocks
)

type Flag

type Flag []uint32

Flag is a bitset stored as 32-bit words (most significant bits at lower indices).

func NewFlag

func NewFlag() *Flag

NewFlag returns a flag with Default bits (64).

func NewFlagBits

func NewFlagBits(uBits int) *Flag

NewFlagBits constructs a Flag with exactly uBits capacity.

func (*Flag) Data

func (f *Flag) Data() []uint32

Data returns the internal data slice (do not modify).

func (*Flag) IsZero

func (f *Flag) IsZero() bool

IsZero reports whether all bits are zero (or the flag has no words).

func (*Flag) SetBitNumber

func (f *Flag) SetBitNumber(uBit int, uValue int)

SetBitNumber sets a specific bit to 0 or 1. Bits are addressed MSB-first per 32-bit word.

func (*Flag) SetValue

func (f *Flag) SetValue(uValue uint32)

SetValue assigns a scalar 32-bit value to the least significant word, zeroing all higher words (mirrors Java).

func (*Flag) ToByteArray

func (f *Flag) ToByteArray(bNewVer bool) []byte

ToByteArray returns the byte representation identical to the Java code. If bNewVer is false, it writes bytes in a "reverse fill" big-endian order across the entire array (matching Java's decrementing uLen fill). If bNewVer is true, it writes each 32-bit word in little-endian order, from last word to first.

func (*Flag) ToByteArrayEx

func (f *Flag) ToByteArrayEx() []byte

ToByteArrayEx is the "reverse" of ToByteArray: it outputs per-word little-endian bytes, iterating from the end towards the beginning.

type Item

type Item struct {
	ID int32
	// contains filtered or unexported fields
}

func CreateItemFromDBValues added in v0.0.38

func CreateItemFromDBValues(itemID int32, slotID int16, amount int16, flag int16, upgradeSlots, scrollLevel byte,
	str, dex, intt, luk, hp, mp, watk, matk, wdef, mdef, accuracy, avoid, hands, speed, jump int16,
	expireTime int64, creatorName string) (Item, error)

CreateItemFromDBValues creates an Item from database values, used for loading saved items This preserves all stat modifications, scrolls, etc. from the database

func CreateItemFromID

func CreateItemFromID(id int32, amount int16) (Item, error)

func (Item) GetAmount added in v0.0.38

func (v Item) GetAmount() int16

func (Item) GetCashID added in v0.0.38

func (v Item) GetCashID() int64

func (Item) GetCashSN added in v0.0.38

func (v Item) GetCashSN() int32

GetCashSN returns the commodity serial number

func (Item) GetExpireTime added in v0.0.38

func (v Item) GetExpireTime() int64

func (Item) InventoryBytes

func (v Item) InventoryBytes() []byte

InventoryBytes to display in character inventory window

func (Item) SaveToCashShopStorage added in v0.0.38

func (v Item) SaveToCashShopStorage(tx *sql.Tx, accountID int32, slotNumber int16) error

func (*Item) SetCashID added in v0.0.38

func (v *Item) SetCashID(cashID int64)

SetCashID sets the cash shop storage ID for tracking items from cash shop

func (*Item) SetCashSN added in v0.0.38

func (v *Item) SetCashSN(sn int32)

SetCashSN sets the commodity serial number for cash shop items

func (Item) ShortBytes added in v0.0.38

func (v Item) ShortBytes() []byte

ShortBytes e.g. inventory operation, storage window

func (Item) StorageBytes added in v0.0.38

func (v Item) StorageBytes() []byte

type Player

type Player struct {
	Conn mnet.Client

	ID int32 // Unique identifier of the character

	ChannelID byte

	Name string

	UpdatePartyInfo updatePartyInfoFunc
	// contains filtered or unexported fields
}

func LoadPlayerFromID

func LoadPlayerFromID(id int32, conn mnet.Client) Player

func (*Player) CanReceiveItems added in v0.0.31

func (p *Player) CanReceiveItems(items []Item) bool

CanReceiveItems reports whether the player has enough free slots for all given items.

func (*Player) FlushNow

func (d *Player) FlushNow()

func (*Player) GetAccountName

func (d *Player) GetAccountName() string

func (*Player) GetItem added in v0.0.38

func (d *Player) GetItem(invID byte, slotID int16) (Item, error)

GetItem retrieves an item from the player's inventory (exported for use by other packages)

func (*Player) GetItemByCashID added in v0.0.38

func (d *Player) GetItemByCashID(invID byte, cashID int64) (Item, int16, error)

GetItemByCashID finds an item in the specified inventory by its cash shop ID

func (*Player) GetMaplePoints

func (d *Player) GetMaplePoints() int32

func (*Player) GetNX

func (d *Player) GetNX() int32

func (*Player) GetSlotSize added in v0.0.15

func (d *Player) GetSlotSize(invID byte) int16

func (*Player) GiveItem

func (d *Player) GiveItem(newItem Item) (error, Item)

GiveItem grants the given item to a player and returns the item

func (*Player) IncreaseSlotSize added in v0.0.15

func (d *Player) IncreaseSlotSize(invID, amount byte) error

func (Player) Logout

func (d Player) Logout()

Logout flushes coalesced state and does a full checkpoint save.

func (*Player) MarkDirty

func (d *Player) MarkDirty(bits DirtyBits, debounce time.Duration)

Helper: mark dirty and schedule debounced save.

func (*Player) SeedRNGDeterministic

func (d *Player) SeedRNGDeterministic()

SeedRNGDeterministic seeds the per-Player RNG using stable identifiers so gain sequences are reproducible across restarts and processes.

func (*Player) Send

func (d *Player) Send(packet mpacket.Packet)

Send the Data a packet

func (*Player) SetMaplePoints

func (d *Player) SetMaplePoints(points int32)

func (*Player) SetNX

func (d *Player) SetNX(nx int32)

func (*Player) SetPos

func (d *Player) SetPos(pos pos)

SetPos of Data

func (*Player) TakeItemForStorage added in v0.0.38

func (d *Player) TakeItemForStorage(id int32, slot int16, amount int16, invID byte) (Item, error)

func (*Player) UpdateMovement

func (d *Player) UpdateMovement(frag movementFrag)

UpdateMovement - update Data from position data

func (*Player) WriteCharacterInfoPacket

func (plr *Player) WriteCharacterInfoPacket(p *mpacket.Packet)

type Players added in v0.0.5

type Players struct {
	// contains filtered or unexported fields
}

func NewPlayers added in v0.0.5

func NewPlayers() Players

func (*Players) Add added in v0.0.5

func (p *Players) Add(plr *Player)

func (Players) Flush added in v0.0.5

func (p Players) Flush()

func (Players) GetFromConn added in v0.0.5

func (p Players) GetFromConn(conn mnet.Client) (*Player, error)

func (Players) GetFromID added in v0.0.5

func (p Players) GetFromID(id int32) (*Player, error)

func (Players) GetFromName added in v0.0.5

func (p Players) GetFromName(name string) (*Player, error)

func (*Players) RemoveFromConn added in v0.0.5

func (p *Players) RemoveFromConn(conn mnet.Client) error

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server state

func (*Server) CheckpointAll

func (server *Server) CheckpointAll()

CheckpointAll now uses the saver to flush debounced/coalesced deltas for every Player.

func (*Server) ClientDisconnected

func (server *Server) ClientDisconnected(conn mnet.Client)

ClientDisconnected from server

func (*Server) HandleClientPacket

func (server *Server) HandleClientPacket(conn mnet.Client, reader mpacket.Reader)

func (*Server) HandleServerPacket

func (server *Server) HandleServerPacket(conn mnet.Server, reader mpacket.Reader)

func (*Server) Initialise

func (server *Server) Initialise(work chan func(), dbuser, dbpassword, dbaddress, dbport, dbdatabase, dropsJson, reactorJson, reactorDropsJson string)

Initialise the server

func (*Server) RegisterWithWorld

func (server *Server) RegisterWithWorld(conn mnet.Server, ip []byte, port int16, maxPop int16)

RegisterWithWorld server

func (*Server) SendCountdownToPlayers

func (server *Server) SendCountdownToPlayers(t int32)

SendCountdownToPlayers - Send a countdown to players that appears as a clock

func (*Server) SendLostWorldConnectionMessage

func (server *Server) SendLostWorldConnectionMessage()

SendLostWorldConnectionMessage - Send message to players alerting them of whatever they do it won't be saved

func (*Server) StartAutosave

func (server *Server) StartAutosave(ctx context.Context)

startAutosave periodically flushes deltas via the saver.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL