-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Labels
Description
Issue: Incomplete Player System with Missing Core Gameplay Functions
Description:
The player system has significant gaps in implementation, particularly in core gameplay functions like damage dealing, player initialization, and object management. Many functions are incomplete or return placeholder values.
Problems Identified:
- Incomplete Player Initialization: The
new
function has a logic error that prevents proper player creation - Missing Damage Calculation Logic: Damage dealing functions exist but lack proper implementation
- Incomplete Object Management: Functions like
refresh
,transfer_objects
have placeholder implementations - Missing Guild System: Guild registration is completely unimplemented
- Broken Player State Management: Player state updates and validation are incomplete
Code Issues Found:
// In PlayerActions - Line 91: Logic error prevents player creation
fn new(ref self: ContractState, faction: felt252, session_id: felt252) {
let mut player: Player = world.read_model(caller);
if player.max_hp == 0 {
return; // This prevents new player creation!
}
player.init(faction);
}
// In PlayerActions - Line 336: Returns default instead of actual player
fn get_player(self: @TContractState, player_id: u256, session_id: felt252) -> Player {
// ... validation logic ...
Default::default() // Should return actual player data
}
// In PlayerActions - Line 342: Empty implementation
fn register_guild(ref self: ContractState, session_id: felt252) {
self.validate_session_for_action(session_id);
// TODO: Implement guild registration logic
}
Specific Problems:
- Player Creation Bug: New players can't be created due to the
max_hp == 0
check - No Damage System: Damage dealing exists but doesn't properly affect player health
- Broken Object Refresh: The
refresh
function has placeholder logic that doesn't work - Missing Guild Features: Guild system is completely unimplemented
- Incomplete Player Queries:
get_player
function doesn't return actual player data
Impact:
- Critical: Players can't be created or managed properly
- Core combat system doesn't work
- No progression or social features (guilds)
- Poor player experience due to broken fundamental systems
Recommended Solutions:
-
Fix Player Creation Logic:
fn new(ref self: ContractState, faction: felt252, session_id: felt252) { let mut player: Player = world.read_model(caller); // Fix the logic - create player if they don't exist if player.max_hp == 0 { player.init(faction); world.write_model(@player); let event = PlayerInitialized { player_id: caller, faction }; world.emit_event(@event); } }
-
Implement Proper Player Queries:
fn get_player(self: @TContractState, player_id: u256, session_id: felt252) -> Player { // ... validation logic ... let world = self.world_default(); world.read_model(player_id) // Return actual player data }
-
Complete Damage System:
fn deal_damage(ref self: ContractState, target: Array<u256>, target_types: Array<felt252>, with_items: Array<u256>, session_id: felt252) { // The damage logic exists but needs completion // Ensure damage properly affects player health // Implement proper armor and weapon damage calculations }
-
Implement Guild System:
fn register_guild(ref self: ContractState, session_id: felt252) { self.validate_session_for_action(session_id); let caller = get_caller_address(); // Implement actual guild registration logic // Create guild model // Set up guild permissions and structure }
-
Complete Object Management:
fn refresh(ref self: ContractState, player_id: u256, session_id: felt252) { // Implement actual object refresh logic // Sync player inventory with ERC1155 tokens // Update player state properly }
Files Affected:
src/systems/player.cairo
- Main player system implementationsrc/models/player.cairo
- Player models and data structuressrc/interfaces/player.cairo
- Player interface definitions