[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите! Fatal error...
Nickky
Добрый вечер, очень нужна помощь!
Закинул скриптик одной игрушки, все бы нормально было бы, если бы не ошибка, выдаваемая после проведенного автобоя, выскакивает такое:
Цитата
Fatal error: Call to a member function autoexecute() on a non-object in E:\VertrigoServ\www\test\lib\functions.php on line 66


Откопал кусок кода, с которым связана эта самая строка 66.
61		//Insert a log message into the user logs
62 function addlog($id, $msg, &$db) {
63 $insert['player_id'] = $id;
64 $insert['msg'] = $msg;
65 $insert['time'] = time();
66 $query = $db->autoexecute('user_log', $insert, 'INSERT');
67 }


Как я понял, функция не может связаться с БД, из-за этого не идет сообщение о победе/поражении в лог. Не знаю, что нужно сделать...



Спустя 20 минут, 44 секунды (30.01.2011 - 18:03) Oyeme написал(а):
Like it says - your code has tried to treat something which is not an object
as if it were (typically by calling $not_an_object->method())

Спустя 20 минут, 14 секунд (30.01.2011 - 18:23) Nickky написал(а):
laugh.gif а по-русски можно?

Спустя 2 минуты, 15 секунд (30.01.2011 - 18:26) twin написал(а):
А скрипты ты тоже по русски пишешь? biggrin.gif
Сунь в транслаттер хотябы, там все понятно же.

Спустя 8 минут, 32 секунды (30.01.2011 - 18:34) Invis1ble написал(а):
Nickky
Цитата
а по-русски можно?

метод вызывается не в контексте объекта

Спустя 1 час, 16 минут, 57 секунд (30.01.2011 - 19:51) Nickky написал(а):
Задам нескромный вопрос... А как подправить?
Ps Забыл дописать, что я нуб в этом деле...

Спустя 3 минуты, 24 секунды (30.01.2011 - 19:55) Basili4 написал(а):
Nickky
без контекста трудно сказать

Спустя 16 секунд (30.01.2011 - 19:55) Invis1ble написал(а):
Nickky
Цитата
А как подправить?

если ты совсем нуб, то это будет сложно....
Нужно искать, где объект $db разрушается и устранять причину
Покажи код полностью

Спустя 11 минут, 46 секунд (30.01.2011 - 20:07) Nickky написал(а):
<?php

//Function to check if user is logged in, and if so, return user data as an object
function check_user($secret_key, &$db) {
$ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION['userid']) || !isset($_SESSION['hash'])) {
  header("Location: index.php");
  exit;
} else {
  $check = sha1($_SESSION['userid'] . $ip . $secret_key);
  if ($check != $_SESSION['hash']) {
  session_unset();
  session_destroy();
  header("Location: logout.php");
  exit;
  } else {
  $query = $db->execute("select * from `players` where `id`=?", array($_SESSION['userid']));
  $userarray = $query->fetchrow();
  if ($query->recordcount() == 0) {
    session_unset();
    session_destroy();
    header("Location: logout.php");
    exit;
  }
  foreach($userarray as $key=>$value) {
    $user->$key = $value;
  }
  //Check if game is closed or not
  if ($setting->general_close_game == "yes" && $user->gm_rank <= 20) {
    //Clear user's session data
    session_unset();
    session_destroy();
    header("Location: index.php");
  }
  if ($player->ban >= time()) {
    //Clear user's session data
    session_unset();
    session_destroy();
    header("Location: index.php");
  }
  $query = $db->execute("update `players` set `last_active`=? where `id`=?", array(time(), $user->id));
  return $user;
  }
}
}

//Gets the number of unread messages
function unread_messages($id, &$db) {
$query = $db->getone("select count(*) as `count` from `mail` where `to`=? and `status`='unread'", array($id));
return $query['count'];
}
//Gets new log messages
function unread_log($id, &$db) {
$query = $db->getone("select count(*) as `count` from `user_log` where `player_id`=? and `status`='unread'", array($id));
return $query['count'];
}
[b]//Insert a log message into the user logs
function addlog($id, $msg, &$db) {
$insert['player_id'] = $id;
$insert['msg'] = $msg;
$insert['time'] = time();
$query = $db->autoexecute('user_log', $insert, 'INSERT');[/b]
}
//Insert a log message into the error log
function errorlog($msg, &$db) {
$insert['msg'] = $msg;
$insert['time'] = time();
$query = $db->autoexecute('log_errors', $insert, 'INSERT');
}
//Insert a log message into the GM log
function gmlog($msg, &$db) {
$insert['msg'] = $msg;
$insert['time'] = time();
$query = $db->autoexecute('log_gm', $insert, 'INSERT');
}
//Insert addin_modules
function insert_addins ($position, &$player, &$setting, &$lang, &$db) {
$query = $db->execute("select * from `addins` where `position`=? order by `ord`", array($position));
if ($query > 0) {
  while ($addin_modules = $query->fetchrow()) {
    include ("addins/" . $addin_modules['link'] . "");
  }
}
}

//Gets item name from table items.id
function item_name($item, &$db) {
$query = $db->execute("select item_id from items where id=?", array($item));
$specificitem=$query->fetchrow();
$query = $db->execute("select name from blueprint_items where id=?", array($specificitem['item_id']));
$typeitem = $query->fetchrow();
return $typeitem['name'];
}
// Get player's name from id
function player_name($playerid, &$db) {
$query = $db->execute("select `username` from `players` where id=?", array($playerid));
$result = $query->fetchrow();
return $result['username'];
}

?>

Спустя 18 минут, 48 секунд (30.01.2011 - 20:25) Basili4 написал(а):
Я не нашел вызова addlog() я так думаю туда не передается ссылка на объект db.

Спустя 10 минут, 44 секунды (30.01.2011 - 20:36) Invis1ble написал(а):
Да, здесь только библиотека. Где вызов addlog() ?

Спустя 18 минут, 48 секунд (30.01.2011 - 20:55) Nickky написал(а):
Выкладываю код страницы, которая и вызывает addLog (код не весь)

}
$battlelog = $output;
if ($player->hp <= 0) {
//Calculate losses
$exploss1 = $player->level * 6;
$exploss2 = (($player->level - $enemy->level) > 0)?($enemy->level - $player->level) * 4:0;
$exploss = $exploss1 + $exploss2;
$goldloss = intval(0.2 * $player->gold);
$goldloss = intval(rand(1, $goldloss));

$output .= "<br />" . sprintf($lang['msg_battle_defeated'], $enemy->username) . "<br />\n";
$battlelog .= "<br />" . sprintf($lang['msg_battle_won'], $player->username) . "<br />\n";
$output .= "<br />" . sprintf($lang['msg_battle_losses'], $exploss, $goldloss) . "\n";
$battlelog .= "<br />" . sprintf($lang['msg_battle_winnings'], $exploss, $goldloss) . "\n";
$exploss3 = (($player->exp - $exploss) <= 0)?$player->exp:$exploss;
$goldloss2 = (($player->gold - $goldloss) <= 0)?$player->gold:$goldloss;
//Update player (the loser)
$query = $db->execute("update `players` set `energy`=?, `exp`=?, `gold`=?, `deaths`=?, `hp`=0 where `id`=?", array($player->energy - 1, $player->exp - $exploss3, $player->gold - $goldloss2, $player->deaths + 1, $player->id));

//Update enemy (the winner)
if ($exploss + $enemy->exp < $enemy->maxexp) {
$query = $db->execute("update `players` set `exp`=?, `gold`=?, `kills`=?, `hp`=? where `id`=?", array($enemy->exp + $exploss, $enemy->gold + $goldloss, $enemy->kills + 1, $enemy->hp, $enemy->id));
//Add log message for winner
$logmsg = sprintf($lang['msg_log_won'], $player->username, $exploss, $goldloss);
addlog($enemy->id, $logmsg, $battlelog, $db);
} else { //Defender has gained a level! =)
$query = $db->execute("update `players` set `stat_points`=?, `level`=?, `maxexp`=?, `exp`=?, `gold`=?, `kills`=?, `hp`=?, `maxhp`=? where `id`=?", array($enemy->stat_points + 3, $enemy->level + 1, ($enemy->level+1) * 70 - 20, ($enemy->exp + $exploss) - $enemy->maxexp, $enemy->gold + $goldloss, $enemy->kills + 1, $enemy->maxhp + 30, $enemy->maxhp + 30, $enemy->id));
//Add log message for winner
$logmsg = sprintf($lang['msg_log_level'], $player->username, $goldloss);
addlog($enemy->id, $logmsg, $battlelog, $db);
}
}

else if ($enemy->hp <= 0) {
//Calculate losses
$expwin1 = $enemy->level * 6;
$expwin2 = (($player->level - $enemy->level) > 0)?$expwin1 - (($player->level - $enemy->level) * 3):$expwin1 + (($player->level - $enemy->level) * 3);
$expwin2 = ($expwin2 <= 0)?1:$expwin2;
$expwin3 = round(0.6 * $expwin2);
$expwin = ceil(rand($expwin3, $expwin2));
$goldwin = ceil(0.2 * $enemy->gold);
$goldwin = intval(rand(1, $goldwin));
$output .= "<br />" . sprintf($lang['msg_battle_won'], $enemy->username) . "<br />\n";
$battlelog .= "<br />" . sprintf($lang['msg_battle_defeated'], $player->username) . "<br />\n";
$output .= "<br />" . sprintf($lang['msg_battle_winnings'], $expwin, $goldwin) . "\n";
if ($expwin + $player->exp >= $player->maxexp) { //Player gained a level!
//Update player, gained a level

$output .= "<br /><b>" . $lang['msg_levelup'] . "</b>";
$newexp = $expwin + $player->exp - $player->maxexp;
$query = $db->execute("update `players` set `stat_points`=?, `level`=?, `maxexp`=?, `maxhp`=?, `exp`=?, `gold`=?, `kills`=?, `hp`=?, `energy`=? where `id`=?", array($player->stat_points + 3, $player->level + 1, ($player->level+1) * 70 - 20, $player->maxhp + 30, $newexp, $player->gold + $goldwin, $player->kills + 1, $player->maxhp + 30, $player->energy - 1, $player->id));
} else {
//Update player
$query = $db->execute("update `players` set `exp`=?, `gold`=?, `kills`=?, `hp`=?, `energy`=? where `id`=?", array($player->exp + $expwin, $player->gold + $goldwin, $player->kills + 1, $player->hp, $player->energy - 1, $player->id));
}
//Add log message
$logmsg = sprintf($lang['msg_log_lost'], $player->username);
addlog($enemy->id, $logmsg, $battlelog, $db);
//Update enemy (who was defeated)
$query = $db->execute("update `players` set `hp`=0, `deaths`=? where `id`=?", array($enemy->deaths + 1, $enemy->id));
} else {
$output .= "<br />" . $lang['msg_battle_draw'] . "\n";
$battlelog .= "<br />" . $lang['msg_battle_draw'] . "\n";
$query = $db->execute("update `players` set `hp`=?, `energy`=? where `id`=?", array($player->hp, $player->energy - 1, $player->id));
$query = $db->execute("update `players` set `hp`=? where `id`=?", array($enemy->hp, $enemy->id));
$logmsg = sprintf($lang['msg_log_draw'], $player->username);
addlog($enemy->id, $logmsg, $battlelog, $db);
}
$player = check_user($secret_key, $db); //Get new stats
require_once("templates/themes/" . $setting->theme . "/private_header.php");
echo $output;
require_once("templates/themes/" . $setting->theme . "/private_footer.php");
break;

Спустя 12 часов, 47 минут, 55 секунд (31.01.2011 - 09:43) linker написал(а):
Все правильно, ты передаешь 4 параметра
addlog($enemy->id, $logmsg, $battlelog, $db);
а функция у тебя принимает только три
function addlog($id, $msg, &$db)
в результате переменная $battlelog встает на место $db, что и порождает ошибку.

Спустя 8 часов, 58 минут, 35 секунд (31.01.2011 - 18:41) Nickky написал(а):
Огромное спасибо))
Поставил $battlelog перед &$db и бой проходит нормально)
Но сообщение в лог не выводиться...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.