Skip to content

feat: Incomplete Player System with Missing Core Gameplay Functions #140

@KevinMB0220

Description

@KevinMB0220

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:

  1. Incomplete Player Initialization: The new function has a logic error that prevents proper player creation
  2. Missing Damage Calculation Logic: Damage dealing functions exist but lack proper implementation
  3. Incomplete Object Management: Functions like refresh, transfer_objects have placeholder implementations
  4. Missing Guild System: Guild registration is completely unimplemented
  5. 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:

  1. Player Creation Bug: New players can't be created due to the max_hp == 0 check
  2. No Damage System: Damage dealing exists but doesn't properly affect player health
  3. Broken Object Refresh: The refresh function has placeholder logic that doesn't work
  4. Missing Guild Features: Guild system is completely unimplemented
  5. 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:

  1. 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);
        }
    }
  2. 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
    }
  3. 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
    }
  4. 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
    }
  5. 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 implementation
  • src/models/player.cairo - Player models and data structures
  • src/interfaces/player.cairo - Player interface definitions

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions