π’ Server Code Updates - 26/02/26
Prison Priest only revives User (#1215) β ReyarB
The Prison Priest now only revives the corresponding user (User#1215 β ReyarB). It does not modify any other status or affect other characters.
Refactor unused parameters (#1195) β Centorios
-
Removed the [c]MapNumber[/c] parameter from [c]UserDisconnected[/c].
-
Added explicit [c]Integer[/c] typing to the [c]UserConnected[/c] parameter.
-
Updated the [c]SaveUser[/c] call to match the new [c]UserDisconnected[/c] signature (now only receives [c]UserIndex[/c]).
This simplifies the user connection/disconnection interfaces and ensures consistent parameter types.
Item damage in combat against NPCs (#1190) β aledg994
Added support for NPC-specific damage ranges using new item properties:
-
[c]MinHitToNPC[/c]
-
[c]MaxHitToNPC[/c]
Weapons and ammunition can now define an alternative damage range that applies only when the target is an NPC, while maintaining the current behavior against users.
Technical changes
-
[c]GetUserDamage[/c] now receives the target type ([c]TargetType[/c]).
-
[c]GetUserDamageWithItem[/c] incorporates differentiated logic based on the target.
-
All calls to [c]GetUserDamageWithItem[/c] were updated accordingly.
Added helper [c]GetHitRangeValues[/c], which:
-
Uses [c]MinHitToNPC[/c] / [c]MaxHitToNPC[/c] when the target is an NPC.
-
Allows partial overrides (min only or max only).
-
Validates invalid ranges ([c]MaxHit < MinHit[/c]).
-
Applies to both weapons and ammunition.
If a weapon or ammunition does not define [c]MinHitToNPC[/c] and/or [c]MaxHitToNPC[/c], traditional values are used automatically.
Refactor SaveCharacterDB into orchestration + focused DB helpers (#1218) β Morgolock
[c]SaveCharacterDB[/c] was converted into an orchestrator while preserving:
-
Original login validation
-
[c]PerformanceTestStart[/c] timing
-
Call order
-
Invocation of [c]SaveCharacterQuestsDB[/c]
-
[c]InitUserPersistSnapshot[/c]
-
[c]LogSaveCharacterDuration[/c]
-
Original error handler text
Database operations were extracted into private helpers:
-
[c]SaveCharacterMainDB[/c]
-
[c]SaveCharacterSpellsDB[/c]
-
[c]SaveCharacterInventoryDB[/c]
-
[c]SaveCharacterBankInventoryDB[/c]
-
[c]SaveCharacterSkillsDB[/c]
-
[c]SaveCharacterPetsDB[/c]
-
[c]SaveCharacterQuestsDoneDB[/c]
-
[c]SaveCharacterInventorySkinsDB[/c]
Each helper:
-
Receives [c]ByRef[/c] parameters
-
Follows the [c]GetTickCountRaw + Execute + AppendQueryDuration[/c] pattern
-
Preserves the original timing labels
Parameter order and SQL constants were preserved (no query strings were modified), as well as the exact pet-type selection logic and quest builder/cleanup behavior.
[c]SaveInventorySkins[/c] was encapsulated within [c]SaveCharacterInventorySkinsDB[/c] to keep the "save inventory skins" timing label unchanged.
Stop updating immutable identity fields on character save (#1219) β Morgolock
Removed [c]name = ?[/c], [c]genre_id = ?[/c], [c]race_id = ?[/c], and [c]class_id = ?[/c] from the [c]QUERY_UPDATE_MAINPJ[/c] builder in [c]Codigo/Database_Queries.bas[/c], so [c]UPDATE user SET ... WHERE id = ?[/c] no longer modifies identity fields.
Also:
-
Removed packing of corresponding VB parameters from:
-
[c]SaveCharacterMainDB[/c]
-
[c]SaveChangesInUser[/c]
-
-
Adjusted [c]ReDim Params[/c] from 65 to 61 to match the new placeholder count.
-
Added [c]Debug.Assert i = UBound(Params) + 1[/c] immediately before [c]Execute(QUERY_UPDATE_MAINPJ, Params)[/c] in both save paths to detect future mismatches between SQL placeholders and packed parameters.
New [c]DisabledInBattleServer[/c] flag for NPCs (#1223, #1224) β Temis-gt
Introduces a new NPC configuration field: [c]DisabledInBattleServer As Integer[/c].
Configuration
Read from config file:
[c]DisabledInBattleServer = Val(LeerNPCs.GetValue(SectionName, "DISABLEDINBATTLESERVER"))[/c]
Conditional check in BattleServer mode:
#If BATTLESERVER = 1 Then
If Info.DisabledInBattleServer > 0 Then Exit Function
#End If
Impact
-
Normal servers (BattleServer = 0): No changes. All NPCs load normally.
-
BattleServer (BattleServer = 1): NPCs with [c]DisabledInBattleServer = 1[/c] are not loaded or listed.
This prevents irrelevant or restricted NPCs from appearing in BattleServer mode and maintains gameplay consistency.
Fix: Net fishing not allowed from the shore (#1226) β ReyarB
Fixed a bug that allowed fishing nets to be used from the shore when it should not have been possible.
Hit Probability Limit Adjustment (5%β95%) (#1203) β Temis-gt
The hit probability calculation in combat (against both NPCs and players) has been adjusted.
Before: Minimum 10% β Maximum 90%
Now: Minimum 5% β Maximum 95%
This adjustment smooths extreme cases:
-
In extreme disadvantage situations, a minimum 5% chance is allowed (instead of 10%), keeping the possibility of a lucky hit.
-
In extreme advantage situations, the cap is raised to 95% (instead of 90%), slightly reducing misses when the attacker has a clear advantage.
This change only affects extreme cases and does not modify intermediate values, preserving overall combat balance.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ 0
ΠΠΎΡΡΠ΅Π²ΡΠ΅ Π½ΠΈΠΊΠ½Π΅ΠΉΠΌΡ Π½Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ Π»ΠΈΡΠ½ΠΎΡΡΡ. ΠΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΡΠ°ΠΉΡΠ°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΅ΡΡ Π½Π΅ Π½Π°ΡΠ°Π»ΠΎΡΡ.