예제 #1
0
 /**
  * Mark events as read for a given user
  *
  * @param int $user_id
  * @return void
  */
 private function readEvents($user_id)
 {
     DatabaseConnection::getInstance();
     $statement = DatabaseConnection::$pdo->prepare("UPDATE events SET unread = 0 WHERE send_to = :to");
     $statement->bindValue(':to', $user_id);
     $statement->execute();
 }
예제 #2
0
 /**
  * For events, attacks, kills, invites, etc, and no user-created messages
  *
  * @param int $from_id
  * @param int $to_id
  * @param String $message
  * @return void
  * @throws Exception
  */
 public static function create($from_id, $to_id, $message)
 {
     if (!is_numeric($from_id) || !is_numeric($to_id)) {
         throw new \Exception('A player id wasn\'t sent in to the Event::create function.');
     }
     DatabaseConnection::getInstance();
     $statement = DatabaseConnection::$pdo->prepare("INSERT INTO events (event_id, send_from, send_to, message, date)\n            VALUES (default, :from, :to, :message, now())");
     $statement->bindValue(':from', $from_id);
     $statement->bindValue(':to', $to_id);
     $statement->bindValue(':message', $message);
     $statement->execute();
 }
예제 #3
0
 public static function sendLogOfDuel($attacker, $defender, $won, $killpoints)
 {
     $killpoints = (int) $killpoints;
     DatabaseConnection::getInstance();
     $statement = DatabaseConnection::$pdo->prepare("INSERT INTO dueling_log values (default, :attacker, :defender, :won, :killpoints, now())");
     //Log of Dueling information.
     $statement->bindValue(':attacker', $attacker);
     $statement->bindValue(':defender', $defender);
     $statement->bindValue(':won', $won);
     $statement->bindValue(':killpoints', $killpoints);
     $statement->execute();
 }
예제 #4
0
 /**
  * Stats on recent activity and other aggregate counts/information.
  *
  * @return array
  */
 private function membershipAndCombatStats()
 {
     DatabaseConnection::getInstance();
     $viciousResult = DatabaseConnection::$pdo->query('SELECT stat_result from past_stats where id = 4');
     $todaysViciousKiller = $viciousResult->fetchColumn();
     $stats = [];
     $stats['vicious_killer'] = $todaysViciousKiller;
     $playerCount = DatabaseConnection::$pdo->query("SELECT count(player_id) FROM players WHERE active = 1");
     $stats['player_count'] = $playerCount->fetchColumn();
     $stats['active_chars'] = query_item("SELECT count(*) FROM ppl_online WHERE member = true AND activity > (now() - CAST('15 minutes' AS interval))");
     return $stats;
 }
예제 #5
0
 public function __construct()
 {
     $this->m_dbconn = DatabaseConnection::getInstance();
     $this->_vo_obj_name = 'SkillVO';
     $this->_vo_fields = array();
     $vo = new \ReflectionClass(new SkillVO());
     $vo = $vo->getProperties();
     foreach ($vo as $reflectionProperty) {
         $this->_vo_fields[] = $reflectionProperty->name;
     }
     $this->_id_field = 'skill_id';
     $this->_table = 'skill';
 }
예제 #6
0
 /**
  * Assigns and holds the connection to the db.
  */
 public function __construct()
 {
     $this->m_dbconn = DatabaseConnection::getInstance();
     $this->_vo_obj_name = 'PlayerVO';
     $this->_vo_fields = array();
     $vo = new \ReflectionClass(new PlayerVO());
     foreach ($vo->getProperties() as $reflectionProperty) {
         $this->_vo_fields[] = $reflectionProperty->name;
     }
     $this->_id_field = 'player_id';
     $this->_table = 'players JOIN class ON class_id = _class_id';
     $this->_table_for_saving = 'players';
     $this->setReadOnlyFields(['identity', 'class_name', 'theme']);
 }
예제 #7
0
/**
 * For events, attacks, kills, invites, etc, and no user-created messages
 *
 * @param int $fromId
 * @param int $toId
 * @param String $msg
 * @return void
 * @throws Exception
 */
function send_event($fromId, $toId, $msg)
{
    if (!$toId) {
        $toId = self_char_id();
    }
    if (!is_numeric($fromId) || !is_numeric($toId)) {
        throw new \Exception('A player id wasn\'t sent in to the send_event function.');
    }
    DatabaseConnection::getInstance();
    $statement = DatabaseConnection::$pdo->prepare("INSERT INTO events (event_id, send_from, send_to, message, date)\n        VALUES (default, :from, :to, :message, now())");
    $statement->bindValue(':from', $fromId);
    $statement->bindValue(':to', $toId);
    $statement->bindValue(':message', $msg);
    $statement->execute();
}
예제 #8
0
function send_chat($user_id, $msg)
{
    DatabaseConnection::getInstance();
    $msg = trim($msg);
    if ($msg) {
        $statement = DatabaseConnection::$pdo->prepare("SELECT message FROM chat WHERE sender_id = :sender ORDER BY date DESC LIMIT 1");
        $statement->bindValue(':sender', $user_id);
        $statement->execute();
        $prevMsg = trim($statement->fetchColumn());
        if ($prevMsg != $msg) {
            $statement = DatabaseConnection::$pdo->prepare("INSERT INTO chat (chat_id, sender_id, message, date) VALUES (default, :sender, :message, now())");
            $statement->bindValue(':sender', $user_id);
            $statement->bindValue(':message', $msg);
            $statement->execute();
            return true;
        }
    }
    return false;
    // could add channels later.
}
예제 #9
0
/**
 * Update the information of a viewing observer, or player.
 */
function update_activity_info()
{
    // ******************** Usage Information of the browser *********************
    Request::setTrustedProxies(Constants::$trusted_proxies);
    $request = Request::createFromGlobals();
    $remoteAddress = '' . $request->getClientIp();
    $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? substr($_SERVER['HTTP_USER_AGENT'], 0, 250) : NULL;
    // Truncated at 250 char.
    $referer = isset($_SERVER['HTTP_REFERER']) ? substr($_SERVER['HTTP_REFERER'], 0, 250) : '';
    // Truncated at 250 char.
    // ************** Setting anonymous and player usage information
    DatabaseConnection::getInstance();
    $session = SessionFactory::getSession();
    if (!$session->has('online')) {
        // *** Completely new session, update latest activity log. ***
        if ($remoteAddress) {
            // *** Delete prior to trying to re-insert into the people online. ***
            $statement = DatabaseConnection::$pdo->prepare('DELETE FROM ppl_online WHERE ip_address = :ip OR session_id = :sessionID');
            $statement->bindValue(':ip', $remoteAddress);
            $statement->bindValue(':sessionID', $session->getId());
            $statement->execute();
        }
        // *** Update viewer data. ***
        $statement = DatabaseConnection::$pdo->prepare('INSERT INTO ppl_online (session_id, activity, ip_address, refurl, user_agent) VALUES (:sessionID, now(), :ip, :referer, :userAgent)');
        $statement->bindValue(':sessionID', $session->getId());
        $statement->bindValue(':ip', $remoteAddress);
        $statement->bindValue(':referer', $referer);
        $statement->bindValue(':userAgent', $userAgent);
        $statement->execute();
        $session->set('online', true);
    } else {
        // *** An already existing session. ***
        $statement = DatabaseConnection::$pdo->prepare('UPDATE ppl_online SET activity = now(), member = :member WHERE session_id = :sessionID');
        $statement->bindValue(':sessionID', $session->getId());
        $statement->bindValue(':member', is_logged_in(), PDO::PARAM_BOOL);
        $statement->execute();
    }
}
예제 #10
0
/**
 * Run bound queries on the database.
 *
 * Use: query('select all from players limit :count', array('count'=>10));
 * Or: query('select all from players limit :count', array('count'=>array(10, PDO::PARAM_INT)));
 *
 * Note that it returns foreachable resultset object unless an array is specifically requested.
 */
function query($sql, $bindings = array(), $return_resultset = true)
{
    DatabaseConnection::getInstance();
    $statement = DatabaseConnection::$pdo->prepare($sql);
    foreach ($bindings as $binding => $value) {
        if (is_array($value)) {
            $first = reset($value);
            $last = end($value);
            // Cast the bindings when something to cast to was sent in.
            $statement->bindValue($binding, $first, $last);
        } else {
            $statement->bindValue($binding, $value);
        }
    }
    $statement->execute();
    if ($return_resultset) {
        return $statement;
        // Returns a foreachable resultset
    } else {
        // Otherwise returns an associative array.
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }
}
예제 #11
0
function unconfirm_older_players_over_minimums($keep_players = 2300, $unconfirm_days_over = 90, $max_to_unconfirm = 30, $just_testing = true)
{
    $change_confirm_to = $just_testing ? '1' : '0';
    // Only unconfirm players when not testing.
    $minimum_days = 30;
    $max_to_unconfirm = is_numeric($max_to_unconfirm) ? $max_to_unconfirm : 30;
    DatabaseConnection::getInstance();
    $sel_cur = DatabaseConnection::$pdo->query("SELECT count(*) FROM players WHERE active = 1");
    $current_players = $sel_cur->fetchColumn();
    if ($current_players < $keep_players) {
        // *** If we're under the minimum, don't inactivate anyone.
        return false;
    }
    // *** Don't unconfirm anyone below the minimum floor.
    $unconfirm_days_over = max($unconfirm_days_over, $minimum_days);
    // Unconfirm at a maximum of 20 players at a time.
    $unconfirm_within_limits = "UPDATE players\n\t\tSET active = :active\n\t\tWHERE players.player_id\n\t\tIN (\n\t\t\tSELECT player_id FROM players\n\t\t\tWHERE active = 1\n\t\t\tAND days > :age\n\t\t\tORDER BY player_id DESC\tLIMIT :max)";
    $update = DatabaseConnection::$pdo->prepare($unconfirm_within_limits);
    $update->bindValue(':active', $change_confirm_to);
    $update->bindValue(':age', intval($unconfirm_days_over));
    $update->bindValue(':max', $max_to_unconfirm);
    $update->execute();
    return $update->rowCount();
}
예제 #12
0
 public function __construct()
 {
     $this->m_dbconn = DatabaseConnection::getInstance();
 }
예제 #13
0
 /**
  * Create a new account
  * @return int|false
  */
 public static function create($ninja_id, $email, $password_to_hash, $confirm, $type = 0, $active = 1, $ip = null)
 {
     DatabaseConnection::getInstance();
     $newID = query_item("SELECT nextval('accounts_account_id_seq')");
     $ins = "INSERT INTO accounts (account_id, account_identity, active_email, phash, type, operational, verification_number, last_ip)\n            VALUES (:acc_id, :email, :email2, crypt(:password, gen_salt('bf', 10)), :type, :operational, :verification_number, :ip)";
     $email = strtolower($email);
     $statement = DatabaseConnection::$pdo->prepare($ins);
     $statement->bindParam(':acc_id', $newID);
     $statement->bindParam(':email', $email);
     $statement->bindParam(':email2', $email);
     $statement->bindParam(':password', $password_to_hash);
     $statement->bindParam(':type', $type, PDO::PARAM_INT);
     $statement->bindParam(':operational', $active, PDO::PARAM_INT);
     $statement->bindParam(':verification_number', $confirm);
     $statement->bindParam(':ip', $ip);
     $statement->execute();
     // Create the link between account and player.
     $link_ninja = 'INSERT INTO account_players (_account_id, _player_id, last_login) VALUES (:acc_id, :ninja_id, default)';
     $statement = DatabaseConnection::$pdo->prepare($link_ninja);
     $statement->bindParam(':acc_id', $newID, PDO::PARAM_INT);
     $statement->bindParam(':ninja_id', $ninja_id, PDO::PARAM_INT);
     $statement->execute();
     $sel_ninja_id = 'SELECT player_id FROM players
         JOIN account_players ON player_id = _player_id
         JOIN accounts ON _account_id = account_id
         WHERE account_id = :acc_id ORDER BY level DESC LIMIT 1';
     $verify_ninja_id = query_item($sel_ninja_id, array(':acc_id' => array($newID, PDO::PARAM_INT)));
     return $verify_ninja_id != $ninja_id ? false : $newID;
 }
예제 #14
0
/**
 * Update activity for a logged in player.
 *
 * @return void
 */
function update_activity_log($p_playerID)
{
    // (See update_activity_info in lib_header for the function that updates all the detailed info.)
    DatabaseConnection::getInstance();
    Request::setTrustedProxies(Constants::$trusted_proxies);
    $request = Request::createFromGlobals();
    $user_ip = $request->getClientIp();
    query("UPDATE players SET days = 0 WHERE player_id = :player", [':player' => $p_playerID]);
    query("Update accounts set last_ip = :ip, last_login = now() where account_id = (select _account_id from account_players join players on _player_id = player_id where player_id = :pid)", array(':ip' => $user_ip, ':pid' => $p_playerID));
}
예제 #15
0
 private function jsonIndex()
 {
     DatabaseConnection::getInstance();
     $user_id = self_char_id();
     $player = new Player($user_id);
     $events = [];
     $messages = [];
     $unread_messages = null;
     $unread_events = null;
     $items = null;
     if ($user_id) {
         $events = DatabaseConnection::$pdo->prepare("SELECT event_id, message AS event, date, send_to, send_from, unread, uname AS sender FROM events JOIN players ON player_id = send_from WHERE send_to = :userID and unread = 1 ORDER BY date DESC");
         $events->bindValue(':userID', $user_id);
         $events->execute();
         $unread_events = $events->rowCount();
         $messages = DatabaseConnection::$pdo->prepare("SELECT message_id, message, date, send_to, send_from, unread, uname AS sender FROM messages JOIN players ON player_id = send_from WHERE send_to = :userID1 AND send_from != :userID2 and unread = 1 ORDER BY date DESC");
         $messages->bindValue(':userID1', $user_id);
         $messages->bindValue(':userID2', $user_id);
         $messages->execute();
         $unread_messages = $messages->rowCount();
         $items = query_array('SELECT item.item_display_name as item, amount FROM inventory join item on inventory.item_type = item.item_id WHERE owner = :user_id ORDER BY item_display_name', [':user_id' => $user_id]);
     }
     return ['player' => $player ? $player->publicData() : [], 'member_counts' => $this->memberCounts(), 'unread_messages_count' => $unread_messages, 'message' => !empty($messages) ? $messages->fetch() : null, 'inventory' => ['inv' => 1, 'items' => $items, 'hash' => md5(strtotime("now"))], 'unread_events_count' => $unread_events, 'event' => !empty($events) ? $events->fetch() : null];
 }
예제 #16
0
 /**
  * Deletes old chat messages.
  */
 public static function shortenChat($message_limit = 800)
 {
     DatabaseConnection::getInstance();
     // Find the latest 800 messages and delete all the rest;
     $deleted = DatabaseConnection::$pdo->prepare("DELETE FROM chat WHERE chat_id NOT IN (SELECT chat_id FROM chat ORDER BY date DESC LIMIT :msg_limit)");
     $deleted->bindValue(':msg_limit', $message_limit);
     $deleted->execute();
     return (int) $deleted->rowCount();
 }
예제 #17
0
function confirm_player($char_name, $confirmation = 0, $autoconfirm = false)
{
    DatabaseConnection::getInstance();
    // Preconfirmed or the email didn't send, so automatically confirm the player.
    $require_confirm = $autoconfirm ? '' : ' AND 
			(account.verification_number = :confirmation OR players.verification_number = :confirmation2) ';
    // Get the account_id for a player
    $params = array(':char_name' => $char_name);
    if ($require_confirm) {
        $params[':confirmation'] = $confirmation;
        $params[':confirmation2'] = $confirmation;
    }
    $info = query_row('select account_id, player_id from players 
		join account_players on _player_id = player_id 
		join accounts on account_id = _account_id 
		 where uname = :char_name ' . $require_confirm, $params);
    if (empty($info)) {
        return false;
    } else {
        $account_id = $info['account_id'];
        $player_id = $info['player_id'];
        if (!$account_id || !$player_id) {
            return false;
        }
    }
    query('update players set active = 1 where player_id = :player_id', array(':player_id' => $player_id));
    $up = "UPDATE accounts set operational = true, confirmed = 1 where account_id = :account_id";
    $params = array(':account_id' => $account_id);
    return (bool) rco(query($up, $params));
}
예제 #18
0
 /**
  * Get the rank integer for a certain character.
  */
 private function getRank($p_char_id)
 {
     DatabaseConnection::getInstance();
     $statement = DatabaseConnection::$pdo->prepare("SELECT rank_id FROM rankings WHERE player_id = :player");
     $statement->bindValue(':player', $p_char_id);
     $statement->execute();
     $rank = $statement->fetchColumn();
     return $rank > 0 ? $rank : 1;
     // Make rank default to 1 if no valid ones are found.
 }
예제 #19
0
 /**
  * Drop a certain enemy from the list.
  *
  * @param Player $p_player
  * @param Player $p_enemy
  * @return void
  */
 private function removeEnemyFromPlayer(Player $p_player, Player $p_enemy)
 {
     DatabaseConnection::getInstance();
     $query = 'DELETE FROM enemies WHERE _player_id = :pid AND _enemy_id = :eid';
     $statement = DatabaseConnection::$pdo->prepare($query);
     $statement->bindValue(':pid', $p_player->id());
     $statement->bindValue(':eid', $p_enemy->id());
     $statement->execute();
 }
예제 #20
0
<?php

require_once substr(__FILE__, 0, strpos(__FILE__, 'cron/')) . 'resources.php';
require_once dirname(__DIR__ . '..') . '/core/base.inc.php';
require_once LIB_ROOT . 'data/DatabaseConnection.php';
require_once LIB_ROOT . 'environment/lib_assert.php';
require_once LIB_ROOT . 'environment/status_defines.php';
// Status constant definitions.
require_once LIB_ROOT . 'environment/lib_error_reporting.php';
require_once LIB_ROOT . 'data/lib_db.php';
require_once LIB_ROOT . "control/lib_deity.php";
// Deity-specific functions
use NinjaWars\core\data\DatabaseConnection;
DatabaseConnection::getInstance();
DatabaseConnection::$pdo->query('BEGIN TRANSACTION');
DatabaseConnection::$pdo->query('TRUNCATE player_rank RESTART IDENTITY');
DatabaseConnection::$pdo->query("SELECT setval('player_rank_rank_id_seq', 1, false)");
$ranked_players = DatabaseConnection::$pdo->prepare('INSERT INTO player_rank (_player_id, score) SELECT player_id, ((level*:level_weight) + floor(gold/:gold_weight) + (CASE WHEN kills > (5*level) THEN 3000 + least(floor((kills - (5*level)) * .3), 2000) ELSE ((kills/(5*level))*3000) END) - (days*:inactivity_weight)) AS score FROM players WHERE active = 1 ORDER BY score DESC');
$ranked_players->bindValue(':level_weight', RANK_WEIGHT_LEVEL);
$ranked_players->bindValue(':gold_weight', RANK_WEIGHT_GOLD);
$ranked_players->bindValue(':inactivity_weight', RANK_WEIGHT_INACTIVITY);
$ranked_players->execute();
// *** Running from a cron script, we don't want any output unless we have an error ***
// Add 1 to player's ki when they've been active in the last 5 minutes.
$s = DatabaseConnection::$pdo->prepare("update players set ki = ki + :regen_rate where last_started_attack > (now() - :interval::interval)");
$s->bindValue(':interval', KI_REGEN_TIMEOUT);
$s->bindValue(':regen_rate', KI_REGEN_PER_TICK);
$s->execute();
DatabaseConnection::$pdo->query('COMMIT');
// Err on the side of low revives for this five minute tick.
$params = ['minor_revive_to' => MINOR_REVIVE_THRESHOLD, 'major_revive_percent' => MAJOR_REVIVE_PERCENT];
예제 #21
0
 /**
  * ????
  *
  * @todo Simplify this invite system.
  * @param int $user_id
  * @param int $clan_id
  * @return void
  */
 private function sendClanJoinRequest($user_id, $clan_id)
 {
     DatabaseConnection::getInstance();
     $clan_obj = new Clan($clan_id);
     $leader = $clan_obj->getLeaderInfo();
     $leader_id = $leader['player_id'];
     $username = get_char_name($user_id);
     $confirmStatement = DatabaseConnection::$pdo->prepare('SELECT verification_number FROM players WHERE player_id = :user');
     $confirmStatement->bindValue(':user', $user_id);
     $confirmStatement->execute();
     $confirm = $confirmStatement->fetchColumn();
     // These ampersands get encoded later.
     $url = "[href:clan/review/?joiner={$user_id}&confirmation={$confirm}|Confirm Request]";
     $join_request_message = 'CLAN JOIN REQUEST: ' . htmlentities($username) . " has sent a request to join your clan.\n            If you wish to allow this ninja into your clan click the following link:\n                {$url}";
     Message::create(['send_from' => $user_id, 'send_to' => $leader_id, 'message' => $join_request_message, 'type' => 0]);
 }
예제 #22
0
 /**
  * Revive x characters
  *
  * Use the order by clause to determine who revives, by time, days and 
  * then by level, using the limit set previously.
  *
  * Here is a runnable version:
  * select uname, player_id, level,floor(($major_revive_percent/100)*$total_active) days, resurrection_time from players where active = 1 AND health < 1 ORDER BY abs(8 - resurrection_time) asc, level desc, days asc
  * @return int
  */
 private static function performNecromancy($revive_amount, $maximum_heal, $game_hour)
 {
     $subselect = 'SELECT player_id FROM players WHERE active = 1 AND health < 1 ORDER BY abs(:time - resurrection_time) ASC, level DESC, days ASC LIMIT :amount';
     if (self::LEVEL_REVIVE_INCREASE) {
         $level_add = '+(level*3)';
     } else {
         $level_add = '';
     }
     $up_revive_players = 'UPDATE players SET status = 0, health =
         CASE WHEN level >= coalesce(class_skill_level, skill_level)
             THEN (:max_heal ' . $level_add . ')
             ELSE ((:max_heal_2 + :max_heal_3 * 0.5) ' . $level_add . ') END
                 FROM (SELECT * FROM skill LEFT JOIN class_skill ON skill_id = _skill_id WHERE skill_id = :midnightHeal)
                 AS class_skill ';
     $up_revive_players .= ' WHERE player_id IN (' . $subselect . ') ';
     $up_revive_players .= ' AND coalesce(class_skill._class_id, players._class_id) = players._class_id';
     DatabaseConnection::getInstance();
     $update = DatabaseConnection::$pdo->prepare($up_revive_players);
     $update->bindValue(':amount', $revive_amount, PDO::PARAM_INT);
     $update->bindValue(':time', $game_hour, PDO::PARAM_INT);
     $update->bindValue(':midnightHeal', self::MIDNIGHT_HEAL_SKILL, PDO::PARAM_INT);
     $update->bindValue(':max_heal', $maximum_heal);
     $update->bindValue(':max_heal_2', $maximum_heal);
     $update->bindValue(':max_heal_3', $maximum_heal);
     $update->execute();
     $truly_revived = $update->rowCount();
     return $truly_revived;
     // Return the amount revived
 }
예제 #23
0
function removeItem($who, $item, $quantity = 1)
{
    DatabaseConnection::getInstance();
    $statement = DatabaseConnection::$pdo->prepare("UPDATE inventory SET amount = greatest(0, amount - :quantity) WHERE owner = :user AND item_type = (SELECT item_id FROM item WHERE lower(item_display_name) = lower(:item)) AND amount > 0");
    $statement->bindValue(':user', $who);
    $statement->bindValue(':item', $item);
    $statement->bindValue(':quantity', $quantity);
    $statement->execute();
}
예제 #24
0
 /**
  * Rename a clan
  *
  * @param int $p_clanID
  * @param String $p_newName
  * @return String
  * @note
  * Does not check for validity, simply renames the clan to the new name.
  */
 public static function renameClan($p_clanID, $p_newName)
 {
     DatabaseConnection::getInstance();
     $statement = DatabaseConnection::$pdo->prepare('UPDATE clan SET clan_name = :name WHERE clan_id = :clan');
     $statement->bindValue(':name', $p_newName);
     $statement->bindValue(':clan', $p_clanID);
     $statement->execute();
     return $p_newName;
 }
예제 #25
0
 /**
  * Drop a certain enemy from the list.
  *
  * @param int $p_playerId
  * @param int $p_enemyId
  * @return void
  */
 private function removeEnemyFromPlayer($p_playerId, $p_enemyId)
 {
     if (!is_numeric($p_enemyId)) {
         throw new \Exception('Enemy id to remove must be present to succeed.');
     }
     DatabaseConnection::getInstance();
     $query = 'DELETE FROM enemies WHERE _player_id = :pid AND _enemy_id = :eid';
     $statement = DatabaseConnection::$pdo->prepare($query);
     $statement->bindValue(':pid', $p_playerId);
     $statement->bindValue(':eid', $p_enemyId);
     $statement->execute();
 }