Среда, 24 Апреля 2024, 15:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » SouzNik [15]
Результаты поиска
SouzNikДата: Воскресенье, 29 Января 2012, 12:24 | Сообщение # 1 | Тема: Помогите с написанием чата для браузерной игры.
был не раз
Сейчас нет на сайте
Спасибо, правда как раз оттуда я этот код и взял))

Добавлено (29.01.2012, 12:24)
---------------------------------------------
Я немного изменил код. Но не получается сделать вход не по логину, а по логину и паролю. Помогите кто нибудь, пожалуйста.

Script.js

Code

$(document).ready(function(){/* Как только загрузится документ, начинает работать код, который расположен внутри */  
   var name = null, // Будущее имя пользователя  
    id = 0; // id последнего сообщения  
   /* Начало работы, создаем запрос, который отсылает в скрипт core.php данные start=true методом POST ($_POST['start']=true) и принимаем от сервера данные в формате json */  
   $.ajax({  
    type: "POST",  
    url: "core.php",  
    data: "start=true",  
    dataType: 'json',  
    success: function(data) {  
     /* Если пришла ошибка от сервера, то показываем её пользователю и перезагружаем страницу */  
     if (data.err) {  
      if (data.err == 2) {  
       apprise('Невозможно найти БД', {}, function(r){  
        location.href = "index.html";  
       });  
      } else if (data.err == 1) {  
       apprise('База данных ушла в себя', {}, function(r){  
        location.href = "index.html";  
       });  
      }  
      return false;  
     }  
     /* Если ошибок нет и получен ответ = 0 то показываем пользователю всплывающее окно */  
     if (data.ans == 0) {  
      apprise('Логин:', {'input': true}, function(login){ /* Если пользователь не ввел логин либо нажал "Отменить" перезагружаем страницу */  
       if (login == false) {  
        location.href = "index.html";  
       } else {/* Если ввел логин, то отправляем в файл core.php введеный логин и принимаем ответ опять же в формате json */  
        $.ajax({  
         type: "POST",  
         url: "core.php",  
         data: "name="+login,  
         dataType: 'json',  
         success: function(data) {  
          /* Если ответ = 0, то запоминаем имя пользователя и id последнего сообщения */  
          if (data.ans == 0) {  
           name = data.login;  
           id = data.id;  
          } else { /* Иначе выдаем ошибку и перезагружаем страницу */  
           apprise('Такой логин уже используется', function(r){  
                    location.href = "index.html";  
           });  
          }  
         }  
        });  
       }  
      });  
     } else { /* Если получаем ответ != 0, то запоминаем имя пользователя и id последнего сообщения */  
      name = data.login;  
      id = data.id;  
     }  
    }  
   });  
   /* Функция которая возвращает сообщения и пользователей онлайн, обновляется каждые 2 сек (2000 милисек) */  
   update();  
   setInterval(update, "2000");  
     
   function update() {  
    /* Отправляем на сервер (файл core.php) данные update=1 и id последнего сообщения */  
    $.ajax({  
     type: "POST",  
     url: "core.php",  
     data: "update=1&id="+id,  
     dataType: 'json',  
     success: function(data) {  
      /* Проверяем наличие ошибок */  
      if (data.err) {  
       if (data.err == 2) {  
        apprise('Невозможно найти БД', {}, function(r){  
         location.href = "index.html";  
        });  
       } else if (data.err == 1) {  
        apprise('База данных ушла в себя', {}, function(r){  
         location.href = "index.html";  
        });  
       }  
       return false;  
      }  
      /* Обновляем список пользователей */  
      if (data.user != $("#user .d").html()) {  
       $("#user .d").html(data.user);  
      }  
      /* Добавляем новое сообщение на экран, прокручиваем скролл вниз и удаляем старые сообщения, оставивши последние 10 */  
      if (data.msg != "") {  
       id = data.id;  
       $('#message .d').append(data.msg);  
       $('#message').scrollTop($('#message')[0].scrollHeight);  
       var size = $("#message .d div").size();  
       if (size > 10) {  
        for (var i = 0; i < size-10; i++) {  
         $("#message .d div").eq(i).remove();  
        }  
       }  
      }  
     }  
    });  
    /* удаляем старые сообщения, оставивши последние 10. Данное действие дублируется, т.к. при загрузке страницы с чатом удаляются сообщения и при каждом новом полученом сообщении */  
    var size = $("#message .d div").size();  
    if (size > 10) {  
     for (var i = 0; i < size-10; i++) {  
      $("#message .d div").eq(i).remove();  
     }  
    }  
   }  
   /* Отслеживаем нажатие клавиш */  
   $('.msg').keydown(function(event){  
    if (event.which == 13) { /* Если нажато Enter, запоминаем сообщение и  */  
     var msg = $(this).val(),  
      then = $(this); /* Обращение на самого себя, т.е. на элемент, который имеет класс msg (в нашем случае это input) */  
     if (msg == "") { /* Если сообщение пустое, то прекращаем выполнять следующий код*/  
      return false;  
     }  
     /* Отправляем на сервер сообщение и если пришел положительный ответ (!= 0) то прокручиваем блок сообщений вниз и очищаем строку в которую вводим сообщение */  
     $.ajax({  
      type: "POST",  
      url: "core.php",  
      data: "msg="+msg,  
      dataType: 'json',  
      success: function(data) {  
       if (data.ans != 0) {  
        $('#message').scrollTop($('#message')[0].scrollHeight);  
        then.val("");  
       }  
      }  
     });  
    };  
   });  
});

Core.php
Code


<?php  
session_start();  
/* Данные для подключения к БД */  
define("DB_HOST", "localhost");  
define("DB_USER", "12345");  
define("DB_PASS", "12345");  
define("DB_NAME", "12345");  
/* Фильтрация всех получаемых переменных */  
$start = htmlspecialchars(stripslashes($_POST['start']));  
$name = htmlspecialchars(stripslashes($_POST['name']));  
$msg = htmlspecialchars(stripslashes($_POST['msg']));  
$update = htmlspecialchars(stripslashes($_POST['update']));  
$id = htmlspecialchars(stripslashes($_POST['id']));  
/* Соединение с БД и если не удачное, то отправка ошибок клиенту */  
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS);  
if (!$connect) {  
   $data['err'] = 1;  
   echo json_encode($data);  
   exit;  
}  
$db_sel = mysql_select_db(DB_NAME,$connect);  
if (!$db_sel) {  
   $data['err'] = 2;  
   echo json_encode($data);  
   exit;  
}  
# Установка языка записи в БД  
mysql_query("SET NAMES utf8");  
/* Если игрок загрузил страницу чата, то наш script.js передает серверу данные $_POST['start'] вот и обрабатываем эти данные */  
if (!empty($start)) {  
   /* Если не существует сессия name, то возвращаем 0, в другом случае указываем логин игрока, который хранится в сессии, передаем id последнего сообщения */  
   if (empty($_SESSION['name'])) {  
    $data['ans'] = 0;  
   } else {  
    $data['ans'] = 1;  
    $data['login'] = $_SESSION['name'];  
    $msg_row = mysql_fetch_array(mysql_query("SELECT `post_id` FROM `post` ORDER BY `post_id` ASC"));  
    $data['id'] = $msg_row['post_id'];  
   }  
   echo json_encode($data); // Отправляем данные в формате json  
   exit;  
}  
/* Если переменная $name не пуста, то выполняем код */  
if (!empty($name)) {  
   /* Ищем игрока в БД */  
   $sql = mysql_query("SELECT * FROM `users` WHERE `user_name`='".$name."'");  
   if (mysql_num_rows($sql) == 0) {  
    /* Если не находим, то создаем новую запись, запоминаем логин и передаем клиенту логин и id последнего сообщения */  
    mysql_query("INSERT INTO `users` (`user_name`,`user_online`,`last_update`) VALUES ('".$name."','1','".time()."')");  
    $data['ans'] = 0;  
    $_SESSION['name'] = $name;  
    $data['login'] = $_SESSION['name'];  
    $msg_row = mysql_fetch_array(mysql_query("SELECT `post_id` FROM `post` ORDER BY `post_id` ASC"));  
    $data['id'] = $msg_row['post_id'];  
   } else {  
    /* Если игрок в БД уже есть, то проверяем онлайн он или нет. Если онлайн, то выдаем ошибку, если нет, то делаем его онлайн и передаем нужные данные клиенту */  
    $row = mysql_fetch_array($sql);  
    if ($row['user_online'] == 0) {  
     $t = time();
     mysql_query("UPDATE users SET last_update = '".$t."', user_online = '1' WHERE user_name = '".$_SESSION['name']."'");  
     $data['ans'] = 0;
     $_SESSION['name'] = $name;  
     $data['login'] = $_SESSION['name'];  
     $msg_row = mysql_fetch_array(mysql_query("SELECT `post_id` FROM `post` ORDER BY `post_id` ASC"));  
     $data['id'] = $msg_row['post_id'];  
    } else {  
     $data['ans'] = 1;  
    }  
   }  
   echo json_encode($data);  
   exit;  
}  
/* Получение нового сообщения */  
if (!empty($msg)) {  
   if (empty($msg)) { /* Если переменная пуста, то возвращаем 0 */  
    $data['ans'] = 0;  
   } else { /* В другом случае записываем в БД сообщение, обновляем запись игрока в БД (указываем что игрок онлайн и обновляем время последнего действия, нужно для отслеживания игроков онлайн) и отправляем нужные данные клиенту */  
    $t = time();  
    mysql_query("INSERT INTO `post` (`post_login`,`post_time`,`post_txt`) VALUES ('".$_SESSION['name']."','".$t."','".$msg."')");  
    mysql_query("UPDATE `users` SET `last_update`='".$t."', `user_online`='1' WHERE `user_name`='".$_SESSION['name']."'");  
    $data['ans'] = 1;  
    $data['login'] = $_SESSION['name'];  
    $data['time'] = date('H:i:s', $t);  
    $data['msg'] = $msg;  
   }  
   echo json_encode($data);  
   exit;  
}  
/* Если переменная $update не пуста (функция обновления на стороне клиента) */  
if (!empty($update)) {  
   if (empty($update)) {  
    $data['ans'] = 0;  
   } else {  
    /* Выбираем всех игроков с базы */  
    $user = mysql_query("SELECT * FROM `users`");  
    $data['user'] = "";  
    while ($user_row = mysql_fetch_array($user)) {  
     /* Если игрок онлайн, то проверяем время его последнего действия и добавляем к нему 1 час (3600 сек) и запоминаем для передачи его имени клиенту. Если игрок в течении часа ничего не делал, то переводим его в режим оффлайн и убираем из списка игроков. Перевод игрока в режим оффлайн будет состоятся только в том случае если хоть 1 пользователь будет находится в чате. */  
     if ($user_row['user_online'] == 1) {  
      $t = $user_row['last_update']+3600;  
      if ($t >= time()) {  
       $data['user'] .= "<div>".$user_row['user_name']."</div>";  
      } else {  
       mysql_query("UPDATE `users` SET `user_online`='0' WHERE `user_name`='".$user_row['user_name']."'");  
      }  
     }  
    }  
    /* Выбираем все сообщения */  
    $msg_sql = mysql_query("SELECT * FROM `post` ORDER BY `post_id` ASC");  
    $data['msg'] = "";  
    while ($msg_row = mysql_fetch_array($msg_sql)) {  
     /* Производим проверку id. Если id игрока меньше чем id последнего сообщения, значит в БД появилось новое сообщение, выбираем его и запоминаем для передачи клиенту. Данное действие нужно для того что бы в чат клиенту добавлять по несколько сообщений, а не обновлять весь блок (div). Т.к. бывает нужно выделить какое то сообщение, а не можешь, т.к. блок обновляется и выделение сбрасывается. */  
     if ($id < $msg_row['post_id']) {  
      $data['msg'] .= "<div><font color='grey'>[".date('H:i:s', $msg_row['post_time'])."]</font> <strong>".$msg_row['post_login']." : </strong>".$msg_row['post_txt']."</div>";  
      $data['id'] = $msg_row['post_id'];  
     }  
    }  
   }  
   echo json_encode($data);  
   exit;  
}  

?>
SouzNikДата: Среда, 25 Января 2012, 18:56 | Сообщение # 2 | Тема: Урок по созданию чата на jQuery (php+mysql)
был не раз
Сейчас нет на сайте
Спасибо! Очень долго искал нормальный чат и наконец нашел!

---------------------------------------------
Заметил несколько дырок. Если пользователь раньше был зареган, то при входе в базе это все обновляется, а сам чел не может написать ничего. Страница заново просит логин. Для этого я сделал так:
В файле core.php надо заменить это:
Code

mysql_query("UPDATE users SET last_update = '".$t."', user_online = '1' WHERE user_name = '".$_SESSION['name']."'");   
$data['ans'] = 0;

На это:
Code

mysql_query("UPDATE users SET last_update = '".$t."', user_online = '1' WHERE user_name = '".$_SESSION['name']."'");   
$data['ans'] = 0;
$_SESSION['name'] = $name;


И так же я немного приукрасил)
Вот что у меня получилось:


Сообщение отредактировал SouzNik - Среда, 25 Января 2012, 18:57
SouzNikДата: Пятница, 06 Января 2012, 19:13 | Сообщение # 3 | Тема: Помогите с написанием чата для браузерной игры.
был не раз
Сейчас нет на сайте
Кинул на ЛС.
Кстате, насчет аякс - я с ним не знаком.
SouzNikДата: Пятница, 06 Января 2012, 18:05 | Сообщение # 4 | Тема: Помогите с написанием чата для браузерной игры.
был не раз
Сейчас нет на сайте
Знаю, я уже пытался сделать сервером свой комп. У меня даже Денвер не идёт, так как у меня ОС - Win Server 2003. И он занимает 80 порт.

Вот недавно нашел на этом же сайте статью ассасина про создание чата на JS + PHP + MySQl.
Только я в JS мало понимаю, а там надо некоторый код подредактировать. Помогите кто нибудь сделать так, чтоб этот код использовал уже зареганных пользователей, а не регал их сам, а если пользователь не авторизован, пересылал на страницу авторизации (login.php)
P.S. Пользователи находятся в таблице users, а у авторизованных логин и пароль находятся в куках ($_COOKIE['zbgame_login'] и $_COOKIE['zbgame_pass'].

SouzNikДата: Четверг, 05 Января 2012, 10:51 | Сообщение # 5 | Тема: Помогите с написанием чата для браузерной игры.
был не раз
Сейчас нет на сайте
спасибо, только денег на сервер нет. пока, на стадии разработки обойдусь хостингом. потом найду какой - нибудь способ.

Сообщение отредактировал SouzNik - Четверг, 05 Января 2012, 14:59
SouzNikДата: Среда, 04 Января 2012, 18:24 | Сообщение # 6 | Тема: HTML 4.01 И 5.0
был не раз
Сейчас нет на сайте
По мне они одинаковы, особенно если разрабатывать приложения (так как там все равно HTML в любом случае получится меньше, чем остальных языков)
Учи JS, PHP, SQL.
SouzNikДата: Среда, 04 Января 2012, 18:14 | Сообщение # 7 | Тема: Помогите с написанием чата для браузерной игры.
был не раз
Сейчас нет на сайте
Кто знаком с PHP и JS помогите пожалуйста написать чат для браузерной игры. Главное - чтобы был без фреймов. Их у меня хостинг не поддерживает.
Я сам с PHP, MySQL знаком, просто не получается представить как это все будет.
Выглядеть сообщения должны примерно так:
[12:38] Вася: привет!
[12:40] Петя: привет.
[12:52] Петя: как дела?
P.s. Регистрацию, авторизацию уже реализовал. Логин записан в $login.
Если времени мало, просто помогите мне представить как сделать, чтобы чат обновлялся только когда надо, как реализовать прокрутку области с отправленными сообщениями, и сама страница не обновлялась, а то не удобно будет играть, когда страница постоянно обновляется. Дальше я сам справлюсь.


Сообщение отредактировал SouzNik - Среда, 04 Января 2012, 18:20
SouzNikДата: Пятница, 30 Декабря 2011, 20:45 | Сообщение # 8 | Тема: Box2D - Что к чему?
был не раз
Сейчас нет на сайте
Скачал библиотеку Box2D для Flash от сюда: http://www.box2dflash.org/.
Зашёл в папку Build, а там файлы для установки на FD. Как установить на Adobe Flash?
SouzNikДата: Четверг, 08 Декабря 2011, 16:07 | Сообщение # 9 | Тема: Нужна модель 3D человека
был не раз
Сейчас нет на сайте
Тогда нужны три картинки (jpg, gif, png) на которых один и тот же чел в трёх разных стойках. Первый просто стоит, второй боком в боевой стойке, третий просто боком. Все остальное остаётся так же. (мужчина или женщина, без верхней одежды.)
SouzNikДата: Четверг, 08 Декабря 2011, 15:56 | Сообщение # 10 | Тема: Урок по созданию браузерной игры № 6
был не раз
Сейчас нет на сайте
У меня при создании menu.swf вылазит ошибка:
Quote
Running process: C:\Program Files\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\flash\menu\menu.as3proj" -ipc e1d570b0-40ba-42b1-984e-3b14ea798c9a -version "4.6.0; 3.1" -compiler "C:\Program Files\Flex SDK" -library "C:\Program Files\FlashDevelop\Library"
Building menu
mxmlc -load-config+=obj\menuConfig.xml -debug=true -incremental=true -o obj\menu634588879966093750
Incremental compile of 1
Loading configuration file C:\Program Files\Flex SDK\frameworks\flex-config.xml
C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\flash\menu\src\Main.mxml(8): Error: Type was not found or was not a compile-time constant: profil.
Loading configuration file C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\flash\menu\obj\menuConfig.xml
Files changed: 0 Files affected: 1
var popup:profil = profil(PopUpManager.createPopUp(this, profil, false));
C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\flash\menu\src\Main.mxml(8): Error: Call to a possibly undefined method profil.
var popup:profil = profil(PopUpManager.createPopUp(this, profil, false));
C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\flash\menu\src\Main.mxml(8): Error: Access of undefined property profil.
var popup:profil = profil(PopUpManager.createPopUp(this, profil, false));

Код:
SouzNikДата: Среда, 07 Декабря 2011, 21:23 | Сообщение # 11 | Тема: Вопросы про Flash Develop.
был не раз
Сейчас нет на сайте
Извините, если не в тот раздел, но более подходящего не нашлось.
1)Как в Flash Develop делать несколько .swf файлов в одном проекте?
2)Есть ли другие способы (кроме нажать на синюю стрелочку) для превращения .mxml в .swf?
SouzNikДата: Среда, 07 Декабря 2011, 20:11 | Сообщение # 12 | Тема: Урок по созданию браузерной игры № 5
был не раз
Сейчас нет на сайте
Вылезает ошибка в FD (chat.mxml):
Quote
Running process: C:\Program Files\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\chat\chat.as3proj" -ipc f2e98d89-c80b-4d4a-849a-d89125290dda -version "4.6.0; 3.1" -compiler "C:\Program Files\Flex SDK" -library "C:\Program Files\FlashDevelop\Library"
Building chat
mxmlc -load-config+=obj\chatConfig.xml -debug=true -incremental=true -o obj\chat634588844424218750
Incremental compile of 1
Loading configuration file C:\Program Files\Flex SDK\frameworks\flex-config.xml
Loading configuration file C:\Documents and Settings\Administrator.NIKOLAY\My Documents\Disine\zov\chat\obj\chatConfig.xml
Files changed: 1 Files affected: 0
obj\chat634588844424218750 (890366 bytes)
(fcsh)Build succeeded
Done(0)
[Starting debug session with FDB]
[Fault] exception, information=[RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: file:///C|/Documents%20and%20Settings/Administrator.NIKOLAY/My%20Documents/Disine/zov/chat/bin/online.php"]. URL: online.php"]

Код:
SouzNikДата: Среда, 07 Декабря 2011, 18:34 | Сообщение # 13 | Тема: Урок по созданию браузерной игры № 4
был не раз
Сейчас нет на сайте
Спасибо большое hands
SouzNikДата: Вторник, 06 Декабря 2011, 16:26 | Сообщение # 14 | Тема: Нужна модель 3D человека
был не раз
Сейчас нет на сайте
Нужна модель 3D мужчины или женщины. Без верхней одежды. В формате *.skp. Кто-нибудь сможет помочь?
SouzNikДата: Воскресенье, 04 Декабря 2011, 17:53 | Сообщение # 15 | Тема: Ищу JavaScript движок
был не раз
Сейчас нет на сайте
Мне нужен игровой движок

Жанр игры MMORPG

Игра будет похожа на Легенда: Наследие драконов; Драконы, то есть надо ходить по локациям, сражаться с монстрами и брать квесты у разных персонажей.

Язык программирования - JavaScript + HTML. Возможно ещё PHP.

Для Web

Лицензия - желательно, чтобы было бесплатно

Поддержка изображений JPG, PNG, GIF

Движок должен быть похож на MMO Constructor, только чтобы на винду, а не в браузере. Ещё нужна возможность добавления, удаления, редактирования:
- квестов, квестовых персонажей
- локаций
- пользователей
- шмоток, оружки
- уровней, опыта
- монстров
Форум игроделов » Записи участника » SouzNik [15]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг