Пшел на. Вывод данных из бд за 500р? - Пшел на Адекватная цена за 5 минут работы php-программиста, вопрос в том кто купит...) а посылать человека не красиво, тем более лично тебе он ничего не предлагал купить -> отношения клиент-покупатель между вами не было построено -> не имеешь право посылать, вы на равных. Ещё чуть грубее и впаяю предупреждение - накопиться, экс не отговорит, слинк через месяц дома и любой бан по просьбе коллеги по работе)
кстати, кому не составить запрос нужный - пишите, помогу например SELECT users.* FROM users, point where point.uid = users.ID and point.zoneid = '1' order by бла бла бла хуже чем SELECT * FROM users a WHERE EXISTS (select * from point b where b.zoneid != '0' and a.ID = b.uid) ORDER BY бла бла бла так как: а) point.zoneid = '1' - это точное совпадение, а b.zoneid != '0' - это диапазон значений, вхождение в который ждёт MySQL при переборе индекса (uid, aid), индекс хоть и кластерный но составной, а aid мы не используем. б) FROM users, point - работает как FULL JOIN даже если SELECT users.* !
онлайн перса только через обращение к серверу пв нет, SELECT a.roleid FROM gamedbd2mysql_listrole a JOIN point b ON a.userid = b.uid WHERE NOT EXISTS (select * from gamedbd2mysql_listrole c where c.lastlogin_time > a.lastlogin_time and c.userid = a.userid) AND b.zoneid != '0' AND a.roleid = 'ID персонажа' //запрос занял 0.0014 сек. Если возвращается пустой результат - значит увы, персонаж оффлайн =(( Для производительности добавь индексы на gamedbd2mysql_listrole.lastlogin_time и gamedbd2mysql_listrole.userid блаблабла и будет список акков в сети можно и чаров в сети SELECT * FROM point a JOIN gamedbd2mysql_listrole b ON a.uid = b.userid WHERE a.zoneid != '0' AND NOT EXISTS (select * from gamedbd2mysql_listrole c where c.lastlogin_time > b.lastlogin_time and b.userid = c.userid)
Это действующий сервер, опомнитесь, у ТС "нашёл в интернете" = сдюпал. в мотопе видел
Вот и весь код. А фильтр...?)
Если не знаешь, то писать не нужно. Конструкция switch-case даёт большую производительность при варианте, когда в теле используется много логики либо когда много условий. В моём случае ни того ни другого. В посте, что ты скинул это упоминается, но во первых не в полном объеме, во вторых не точно. Очень жаль мне моё время потраченое на прочтение, читаю инглиш медленнее русского. Как минимум elseif юзать надо было. вот с elseif и будет говнокод, зачем лишнее? Раз уж про оптимизацию ты сказал, то вот что ты должен знать: оператор elseif по сути своей связывает несколько тел и чем больше elseif тем впринципе хуже. И что вообще такое вид?)) Ты вообще хоть что-то понимаешь адекватно? Мнение моё и многих, говорит, что нет. Поэтому бан тебе на 9 дней. Пока сообщений.
что качается свич-кэйс нуу.. можно и на спец методах в классе реализовать использую полиморфизм, но это совсем не важно. повторяю, разницы нету. и если ты пишешь, что что-то лучше, то ты должен обосновать это. Морг состоит лишь из одного *тро ло ло* ну да, ты много пишешь
Kenpachi предупреждение. тро ло ло на морге быть не должно, что качается свич-кэйс нуу.. можно и на спец методах в классе реализовать использую полиморфизм, но это совсем не важно.
Бедный хаос) С числом и ежу понятно, а вот как ты функцию вытащил?
странный конкат... :) $query = 'CREATE TABLE '.$table.' ('.$column.' int(10) NOT NULL , PRIMARY KEY ('.$column.'))'; //10 строка
Все это интересно но вот у меня такая проблема установил все прописал. захожу на экран он белый. искал все пути все норм. заглянул в логи апача и был немного удивлен, выполня в браузере http://my_ip/server.php?db=listrole апачи выкидывает в логах err : Initialize storage environment failed. Как буд то навернулась база но она работает и все норм. при запросе из консоле выдает все данные. попробуй вместо команды к gamedbd просто vmstat, если выведет - значит всё нормально с использованием системных команд и надо таки прописать права, если нет, то копай php.ini, на самом деле я не знаю, что может означать Initialize storage environment failed. и почему это вообще в логах апача Оо а не gamedbd ini_set('display_errors','On'); поставил?
<div style='background:url(http://mmorpg-devs.ru/uploads/av-7260.jpg);width:128px;height:150px;'></div> тема перемещена
да блин)) айвэб также подключается к 29400, если работать через сокет то уж без посредников. ЗЫ тема про получение информации
хмм, ну значит ещё проще
Только чтение. Для занесения - сокет. ОФФТОП: Я это всё начал так как меня не устраивала работа скрипта с сокетом при каждой загрузке страницы. У нас на pw-project.eu будет портал, где комментарии, голосования итд, вобщем много плюшек и какбы всё это интегрировано с игровой информацией. По реальному опыту с J-Games за сутки набегало 22000 просмотров страниц сайта, а тут теперь статус сервера + онлайн по классам тамже на главной странице. Я просто прикинул сколько надо отправить пакетов чтоб получить список персонажей онлайн по классам с дополнительной информацией типа название клана и ссылка на профиль, короче хренова туча). А теперь это реально 1 запрос к MySQL за 0.006 сек. Разница, да?) А эти чудные байты - для прочей информации, например экипировка, коты в игре, почтовый ящик в игре, друзья в игре, чат, инвентарь, квесты. И это всё будет также доступтно из MySQL. То, что с этими данными, расфасованными по полочкам, делать, ограничивается лиш фантазией. Тоесть мы получаем нормальное чтение. Запись происходит на много реже, тоесть только при редактировании персонажа, при отправке вещей по почте итд, вот тут опасаться нечего и можно использовать сокеты. Вот собсно такая идея.
Ботч, оформление на сайте, данных примеров, как я понимаю сами делали? ясен пень сам) т.е. банальные иконки и то сам спиздил сохранил с pwi
эхх, выводило бы ещё read tablename roleid, вообще полностью переписали бы базу. А то только через терминал видно, ктонить копал?
в чём конкретно проблемы, не выводит или не заносит?
Решил поделиться альтернативным способом получения информации о персонажах, кланах и городах для топов. Для начала нужно создать 12 таблиц в MySQL у вас на сайте. 6 таблиц основных и 6 временных. Временные таблицы типа MEMORY нужны для быстрого INSERT'a. Ну а с основными вы будете работать из ваших скриптов, так как персонажей может быть очень много рекомендую расставить индексы в основных таблицах, индексы во временных ставить не нужно. SQL код таблиц для вашего сайта. -- -- Структура таблицы `gamedbd2mysql_listcity` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listcity` ( `rid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `fid` int(20) NOT NULL DEFAULT '0', `cls` int(20) NOT NULL DEFAULT '0', `role` int(20) NOT NULL DEFAULT '1', `loyalty` int(20) NOT NULL DEFAULT '0', `nickname` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`fid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listcity_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listcity_temp` ( `rid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `fid` int(20) NOT NULL DEFAULT '0', `cls` int(20) NOT NULL DEFAULT '0', `role` int(20) NOT NULL DEFAULT '1', `loyalty` int(20) NOT NULL DEFAULT '0', `nickname` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`fid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listfaction` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listfaction` ( `fid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `level` int(20) NOT NULL DEFAULT '0', `masterid` int(20) NOT NULL DEFAULT '0', `masterrole` int(20) NOT NULL DEFAULT '1', `member_size` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`fid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listfactionuser` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listfactionuser` ( `rid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `fid` int(20) NOT NULL DEFAULT '0', `cls` int(20) NOT NULL DEFAULT '0', `role` int(20) NOT NULL DEFAULT '1', `loyalty` int(20) NOT NULL DEFAULT '0', `nickname` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`rid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listfactionuser_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listfactionuser_temp` ( `rid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `fid` int(20) NOT NULL DEFAULT '0', `cls` int(20) NOT NULL DEFAULT '0', `role` int(20) NOT NULL DEFAULT '1', `loyalty` int(20) NOT NULL DEFAULT '0', `nickname` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`rid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listfaction_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listfaction_temp` ( `fid` int(20) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `level` int(20) NOT NULL DEFAULT '0', `masterid` int(20) NOT NULL DEFAULT '0', `masterrole` int(20) NOT NULL DEFAULT '1', `member_size` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`fid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listrole` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listrole` ( `roleid` int(20) NOT NULL DEFAULT '16', `userid` int(20) NOT NULL DEFAULT '16', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `race` int(20) NOT NULL DEFAULT '0', `occupation` int(20) NOT NULL DEFAULT '0', `gender` int(20) NOT NULL DEFAULT '0', `custom_data_size` int(20) NOT NULL DEFAULT '0', `custom_stamp` int(20) NOT NULL DEFAULT '0', `status` int(20) NOT NULL DEFAULT '1', `delete_time` datetime NOT NULL, `create_time` datetime NOT NULL, `lastlogin_time` datetime NOT NULL, `forbid_size` int(20) NOT NULL DEFAULT '0', `level` int(20) NOT NULL DEFAULT '1', `level2` int(20) NOT NULL DEFAULT '0', `exp` int(20) NOT NULL DEFAULT '0', `sp` int(20) NOT NULL DEFAULT '0', `pp` int(20) NOT NULL DEFAULT '0', `hp` int(20) NOT NULL DEFAULT '75', `mp` int(20) NOT NULL DEFAULT '45', `posx` float NOT NULL DEFAULT '218.3', `posy` float NOT NULL DEFAULT '218.7', `posz` float NOT NULL DEFAULT '2838.3', `worldtag` int(20) NOT NULL DEFAULT '1', `money` int(20) NOT NULL DEFAULT '0', `invader_state` int(20) NOT NULL DEFAULT '0', `invader_time` int(20) NOT NULL DEFAULT '0', `pariah_time` int(20) NOT NULL DEFAULT '0', `factionid` int(20) NOT NULL DEFAULT '0', `factionrole` int(20) NOT NULL DEFAULT '0', `reputation` int(20) NOT NULL DEFAULT '0', `custom_status_size` int(20) NOT NULL DEFAULT '0', `filter_data_size` int(20) NOT NULL DEFAULT '4', `charactermode_size` int(20) NOT NULL DEFAULT '0', `instancekeylist_size` int(20) NOT NULL DEFAULT '708', `dbltime_expire` int(20) NOT NULL DEFAULT '0', `dbltime_mode` int(20) NOT NULL DEFAULT '0', `dbltime_begin` int(20) NOT NULL DEFAULT '1253466000', `dbltime_used` int(20) NOT NULL DEFAULT '0', `dbltime_max` int(20) NOT NULL DEFAULT '28800', `time_used` int(20) NOT NULL DEFAULT '766', `timestamp` int(20) NOT NULL DEFAULT '5', `storesize` int(20) NOT NULL DEFAULT '16', `petcorral_size` int(20) NOT NULL DEFAULT '5', `vitality` int(20) NOT NULL DEFAULT '5', `energy` int(20) NOT NULL DEFAULT '5', `strength` int(20) NOT NULL DEFAULT '5', `agility` int(20) NOT NULL DEFAULT '5', `max_hp` int(20) NOT NULL DEFAULT '75', `max_mp` int(20) NOT NULL DEFAULT '45', `hp_gen` int(20) NOT NULL DEFAULT '3', `mp_gen` int(20) NOT NULL DEFAULT '2', `walk_speed` float NOT NULL DEFAULT '2', `run_speed` float NOT NULL DEFAULT '5', `swim_speed` float NOT NULL DEFAULT '3', `flight_speed` float NOT NULL DEFAULT '5', `attack` int(20) NOT NULL DEFAULT '0', `damage_low` int(20) NOT NULL DEFAULT '1', `damage_high` int(20) NOT NULL DEFAULT '1', `attack_speed` int(20) NOT NULL DEFAULT '16', `attack_range` float NOT NULL DEFAULT '2.5', `damage_low0` int(20) NOT NULL DEFAULT '0', `damage_low1` int(20) NOT NULL DEFAULT '0', `damage_low2` int(20) NOT NULL DEFAULT '0', `damage_low3` int(20) NOT NULL DEFAULT '0', `damage_low4` int(20) NOT NULL DEFAULT '0', `damage_high0` int(20) NOT NULL DEFAULT '0', `damage_high1` int(20) NOT NULL DEFAULT '0', `damage_high2` int(20) NOT NULL DEFAULT '0', `damage_high3` int(20) NOT NULL DEFAULT '0', `damage_high4` int(20) NOT NULL DEFAULT '0', `damage_magic_low` int(20) NOT NULL DEFAULT '1', `damage_magic_high` int(20) NOT NULL DEFAULT '1', `resistance0` int(20) NOT NULL DEFAULT '0', `resistance1` int(20) NOT NULL DEFAULT '0', `resistance2` int(20) NOT NULL DEFAULT '0', `resistance3` int(20) NOT NULL DEFAULT '0', `resistance4` int(20) NOT NULL DEFAULT '0', `defense` int(20) NOT NULL DEFAULT '1', `armor` int(20) NOT NULL DEFAULT '0', `max_ap` int(20) NOT NULL DEFAULT '0', `var_data_size` int(20) NOT NULL DEFAULT '56', `skills_size` int(20) NOT NULL DEFAULT '28', `storehousepasswd_size` int(20) NOT NULL DEFAULT '0', `waypointlist_size` int(20) NOT NULL DEFAULT '2', `coolingtime_size` int(20) NOT NULL DEFAULT '8', `storehouse_money` int(20) NOT NULL DEFAULT '0', `storehouse_size` int(20) NOT NULL DEFAULT '0', `inventory_size` int(20) NOT NULL DEFAULT '0', `equipment_size` int(20) NOT NULL DEFAULT '1', `taskinventory_size` int(20) NOT NULL DEFAULT '0', `task_data_size` int(20) NOT NULL DEFAULT '0', `task_complete_size` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`roleid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listrolebrief` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listrolebrief` ( `roleid` int(20) NOT NULL DEFAULT '16', `userid` int(20) NOT NULL DEFAULT '16', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `occupation` int(20) NOT NULL DEFAULT '0', `level` int(20) NOT NULL DEFAULT '1', `exp` int(20) NOT NULL DEFAULT '0', `moneyall` int(20) NOT NULL DEFAULT '0', `reputation` int(20) NOT NULL DEFAULT '0', `role_yinpiao` int(20) NOT NULL DEFAULT '0', `user_yinpiao` int(20) NOT NULL DEFAULT '0', `updatetime` int(20) NOT NULL DEFAULT '1253784988', `gender` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`roleid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listrolebrief_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listrolebrief_temp` ( `roleid` int(20) NOT NULL DEFAULT '16', `userid` int(20) NOT NULL DEFAULT '16', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `occupation` int(20) NOT NULL DEFAULT '0', `level` int(20) NOT NULL DEFAULT '1', `exp` int(20) NOT NULL DEFAULT '0', `moneyall` int(20) NOT NULL DEFAULT '0', `reputation` int(20) NOT NULL DEFAULT '0', `role_yinpiao` int(20) NOT NULL DEFAULT '0', `user_yinpiao` int(20) NOT NULL DEFAULT '0', `updatetime` int(20) NOT NULL DEFAULT '1253784988', `gender` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`roleid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listrole_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listrole_temp` ( `roleid` int(20) NOT NULL DEFAULT '16', `userid` int(20) NOT NULL DEFAULT '16', `name` varchar(255) NOT NULL DEFAULT 'cls0gender0', `race` int(20) NOT NULL DEFAULT '0', `occupation` int(20) NOT NULL DEFAULT '0', `gender` int(20) NOT NULL DEFAULT '0', `custom_data_size` int(20) NOT NULL DEFAULT '0', `custom_stamp` int(20) NOT NULL DEFAULT '0', `status` int(20) NOT NULL DEFAULT '1', `delete_time` datetime NOT NULL, `create_time` datetime NOT NULL, `lastlogin_time` datetime NOT NULL, `forbid_size` int(20) NOT NULL DEFAULT '0', `level` int(20) NOT NULL DEFAULT '1', `level2` int(20) NOT NULL DEFAULT '0', `exp` int(20) NOT NULL DEFAULT '0', `sp` int(20) NOT NULL DEFAULT '0', `pp` int(20) NOT NULL DEFAULT '0', `hp` int(20) NOT NULL DEFAULT '75', `mp` int(20) NOT NULL DEFAULT '45', `posx` float NOT NULL DEFAULT '218.3', `posy` float NOT NULL DEFAULT '218.7', `posz` float NOT NULL DEFAULT '2838.3', `worldtag` int(20) NOT NULL DEFAULT '1', `money` int(20) NOT NULL DEFAULT '0', `invader_state` int(20) NOT NULL DEFAULT '0', `invader_time` int(20) NOT NULL DEFAULT '0', `pariah_time` int(20) NOT NULL DEFAULT '0', `factionid` int(20) NOT NULL DEFAULT '0', `factionrole` int(20) NOT NULL DEFAULT '0', `reputation` int(20) NOT NULL DEFAULT '0', `custom_status_size` int(20) NOT NULL DEFAULT '0', `filter_data_size` int(20) NOT NULL DEFAULT '4', `charactermode_size` int(20) NOT NULL DEFAULT '0', `instancekeylist_size` int(20) NOT NULL DEFAULT '708', `dbltime_expire` int(20) NOT NULL DEFAULT '0', `dbltime_mode` int(20) NOT NULL DEFAULT '0', `dbltime_begin` int(20) NOT NULL DEFAULT '1253466000', `dbltime_used` int(20) NOT NULL DEFAULT '0', `dbltime_max` int(20) NOT NULL DEFAULT '28800', `time_used` int(20) NOT NULL DEFAULT '766', `timestamp` int(20) NOT NULL DEFAULT '5', `storesize` int(20) NOT NULL DEFAULT '16', `petcorral_size` int(20) NOT NULL DEFAULT '5', `vitality` int(20) NOT NULL DEFAULT '5', `energy` int(20) NOT NULL DEFAULT '5', `strength` int(20) NOT NULL DEFAULT '5', `agility` int(20) NOT NULL DEFAULT '5', `max_hp` int(20) NOT NULL DEFAULT '75', `max_mp` int(20) NOT NULL DEFAULT '45', `hp_gen` int(20) NOT NULL DEFAULT '3', `mp_gen` int(20) NOT NULL DEFAULT '2', `walk_speed` float NOT NULL DEFAULT '2', `run_speed` float NOT NULL DEFAULT '5', `swim_speed` float NOT NULL DEFAULT '3', `flight_speed` float NOT NULL DEFAULT '5', `attack` int(20) NOT NULL DEFAULT '0', `damage_low` int(20) NOT NULL DEFAULT '1', `damage_high` int(20) NOT NULL DEFAULT '1', `attack_speed` int(20) NOT NULL DEFAULT '16', `attack_range` float NOT NULL DEFAULT '2.5', `damage_low0` int(20) NOT NULL DEFAULT '0', `damage_low1` int(20) NOT NULL DEFAULT '0', `damage_low2` int(20) NOT NULL DEFAULT '0', `damage_low3` int(20) NOT NULL DEFAULT '0', `damage_low4` int(20) NOT NULL DEFAULT '0', `damage_high0` int(20) NOT NULL DEFAULT '0', `damage_high1` int(20) NOT NULL DEFAULT '0', `damage_high2` int(20) NOT NULL DEFAULT '0', `damage_high3` int(20) NOT NULL DEFAULT '0', `damage_high4` int(20) NOT NULL DEFAULT '0', `damage_magic_low` int(20) NOT NULL DEFAULT '1', `damage_magic_high` int(20) NOT NULL DEFAULT '1', `resistance0` int(20) NOT NULL DEFAULT '0', `resistance1` int(20) NOT NULL DEFAULT '0', `resistance2` int(20) NOT NULL DEFAULT '0', `resistance3` int(20) NOT NULL DEFAULT '0', `resistance4` int(20) NOT NULL DEFAULT '0', `defense` int(20) NOT NULL DEFAULT '1', `armor` int(20) NOT NULL DEFAULT '0', `max_ap` int(20) NOT NULL DEFAULT '0', `var_data_size` int(20) NOT NULL DEFAULT '56', `skills_size` int(20) NOT NULL DEFAULT '28', `storehousepasswd_size` int(20) NOT NULL DEFAULT '0', `waypointlist_size` int(20) NOT NULL DEFAULT '2', `coolingtime_size` int(20) NOT NULL DEFAULT '8', `storehouse_money` int(20) NOT NULL DEFAULT '0', `storehouse_size` int(20) NOT NULL DEFAULT '0', `inventory_size` int(20) NOT NULL DEFAULT '0', `equipment_size` int(20) NOT NULL DEFAULT '1', `taskinventory_size` int(20) NOT NULL DEFAULT '0', `task_data_size` int(20) NOT NULL DEFAULT '0', `task_complete_size` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`roleid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listuserbrief` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listuserbrief` ( `userid` int(20) NOT NULL DEFAULT '16', `rolelist` int(20) NOT NULL DEFAULT '16', `cash` int(20) NOT NULL DEFAULT '0', `money` int(20) NOT NULL DEFAULT '0', `cash_2` int(20) NOT NULL DEFAULT '1', `cash_add` int(20) NOT NULL DEFAULT '0', `cash_buy` int(20) NOT NULL DEFAULT '0', `cash_sell` int(20) NOT NULL DEFAULT '0', `cash_used` int(20) NOT NULL DEFAULT '0', `cash_used_2` int(20) NOT NULL DEFAULT '0', `add_serial` int(20) NOT NULL DEFAULT '0', `use_serial` int(20) NOT NULL DEFAULT '0', `cash_current` int(20) NOT NULL DEFAULT '0', `exg_logcount` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; -- -------------------------------------------------------- -- -- Структура таблицы `gamedbd2mysql_listuserbrief_temp` -- CREATE TABLE IF NOT EXISTS `gamedbd2mysql_listuserbrief_temp` ( `userid` int(20) NOT NULL DEFAULT '16', `rolelist` int(20) NOT NULL DEFAULT '16', `cash` int(20) NOT NULL DEFAULT '0', `money` int(20) NOT NULL DEFAULT '0', `cash_2` int(20) NOT NULL DEFAULT '1', `cash_add` int(20) NOT NULL DEFAULT '0', `cash_buy` int(20) NOT NULL DEFAULT '0', `cash_sell` int(20) NOT NULL DEFAULT '0', `cash_used` int(20) NOT NULL DEFAULT '0', `cash_used_2` int(20) NOT NULL DEFAULT '0', `add_serial` int(20) NOT NULL DEFAULT '0', `use_serial` int(20) NOT NULL DEFAULT '0', `cash_current` int(20) NOT NULL DEFAULT '0', `exg_logcount` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`userid`) ) ENGINE=MEMORY DEFAULT CHARSET=cp1251; Перенос информации состоит из 2 частей: 1) Выполнение команд gamedbd на игровом сервере 2) Запись полученной информации в MySQL Если коротко всё выглядит так: Crontab у вас на сайте вызывает скрипт который получает информацию от скрипта у вас на сервере и заносит в базу. Для понимания условно назовём их скриптами для сайта и скриптами для сервера. Пример серверного скрипта: <?php if($_GET['db']=="listcity"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listcity"); } if($_GET['db']=="listfaction"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listfaction"); } if($_GET['db']=="listfactionuser"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listfactionuser"); } if($_GET['db']=="listrole"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listrole"); } if($_GET['db']=="listrolebrief"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listrolebrief"); } if($_GET['db']=="listuserbrief"){ passthru("/pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listuserbrief"); } ?> Где /pwserver/gamedbd/ путь до gamedbd от корня сервера. Для проверки наберите в терминале /pwserver/gamedbd/gamedbd /pwserver/gamedbd/gamesys.conf listrole если выдаст - значит правильно. Назовём его server.php, в зависимости от GET параметра скрипт будет выполнять ту или иную команду и выводить полученную информацию. Этот скрипт живёт у вас на сервере с игровым серверов в директории www. Более подробно с командами gamedbd вы можете ознакомиться набрав в Яндексе "gamedbd команды" там ссылка в первых пяти позициях с заголовком - Gamedbd Модуль-игровой-базы-данных всё подробно описано. Для того, чтобы PHP скрипт мог выполнять команды, вам необходимо прописать права на директорию с сервером chmod -R 777 /pwserver/ где /pwserver/ - директория вашего сервера. если сервер живёт в 2 директориях например в PWServer и в home, то прописать как на /home/ так и на /PWServer/ С серверным скриптом разобрались, теперь пример скриптов для сайта, в кронтабе я использую утилиту php5 вместо wget так как wget у меня создаёт побочные файлы, и это никак не убрать. Но через php5 нельзя передать GET параметры, поэтому необходимо для каждой команды сделать отдельный скрипт. php код скриптов для сайта (создать и залить на сайт). В коде изменить 255.255.255.255 на ваш IP-адрес и вписать в $db = new mysqli("", "", "", ""); хост, юзер, пасс, название базы для подключения к MySQL у вас на сайте. Данные скрипты будут брать информацию от скриптов с вашего сервера по средству file_get_contents(), заносить в MySQL данные. listcity.php - для информации о территориях и их владельцах <?php //script by vk.com/botchal $db = new mysqli("хост", "юзер", "пасс", "название базы"); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listcity")); $db->query("TRUNCATE gamedbd2mysql_listcity_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listcity_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listcity_temp WHERE rid='0'"); $db->query("TRUNCATE gamedbd2mysql_listcity"); $db->query("INSERT gamedbd2mysql_listcity SELECT * FROM gamedbd2mysql_listcity_temp"); $db->query("TRUNCATE gamedbd2mysql_listcity_temp"); ?> listfaction.php - инфо о кланах <?php //script by vk.com/botchal $db = new mysqli("", "", "", ""); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listfaction")); $db->query("TRUNCATE gamedbd2mysql_listfaction_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listfaction_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listfaction_temp WHERE fid='0'"); $db->query("TRUNCATE gamedbd2mysql_listfaction"); $db->query("INSERT gamedbd2mysql_listfaction SELECT * FROM gamedbd2mysql_listfaction_temp"); $db->query("TRUNCATE gamedbd2mysql_listfaction_temp"); ?> listfactionuser.php - инфо о мемберах кланов <?php //script by vk.com/botchal $db = new mysqli("", "", "", ""); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listfactionuser")); $db->query("TRUNCATE gamedbd2mysql_listfactionuser_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listfactionuser_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listfactionuser_temp WHERE rid='0'"); $db->query("TRUNCATE gamedbd2mysql_listfactionuser"); $db->query("INSERT gamedbd2mysql_listfactionuser SELECT * FROM gamedbd2mysql_listfactionuser_temp"); $db->query("TRUNCATE gamedbd2mysql_listfactionuser_temp"); ?> listrole.php - персонажи <?php //script by vk.com/botchal $db = new mysqli("", "", "", ""); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listrole")); $db->query("TRUNCATE gamedbd2mysql_listrole_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listrole_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listrole_temp WHERE roleid='0'"); $db->query("TRUNCATE gamedbd2mysql_listrole"); $db->query("INSERT gamedbd2mysql_listrole SELECT * FROM gamedbd2mysql_listrole_temp"); $db->query("TRUNCATE gamedbd2mysql_listrole_temp"); ?> listrolebrief.php - персонажи коротко <?php //script by vk.com/botchal $db = new mysqli("", "", "", ""); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listrolebrief")); $db->query("TRUNCATE gamedbd2mysql_listrolebrief_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listrolebrief_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listrolebrief_temp WHERE roleid='0'"); $db->query("TRUNCATE gamedbd2mysql_listrolebrief"); $db->query("INSERT gamedbd2mysql_listrolebrief SELECT * FROM gamedbd2mysql_listrolebrief_temp"); $db->query("TRUNCATE gamedbd2mysql_listrolebrief_temp"); ?> listuserbrief.php - голд и ещё инфа <?php //script by vk.com/botchal $db = new mysqli("", "", "", ""); $data = explode("\n", file_get_contents("http://255.255.255.255/server.php?db=listuserbrief")); $db->query("TRUNCATE gamedbd2mysql_listuserbrief_temp"); foreach($data as $str){ $str=str_replace(array("\"","\n"), "", $str); $db->query(" INSERT INTO gamedbd2mysql_listuserbrief_temp VALUES ( '".str_replace(",","', '",$str)."' ) "); } $db->query("DELETE FROM gamedbd2mysql_listuserbrief_temp WHERE userid='0'"); $db->query("TRUNCATE gamedbd2mysql_listuserbrief"); $db->query("INSERT gamedbd2mysql_listuserbrief SELECT * FROM gamedbd2mysql_listuserbrief_temp"); $db->query("TRUNCATE gamedbd2mysql_listuserbrief_temp"); ?> Эти скрипты можно повесить на крон как я уже сказал, а можно вызывать руками. Для того, чтобы проверить работает ли система, вам нужно набрать в вашем браузере http://255.255.255.255/server.php?db=listrole если вы прописали права и правильно указали путь до директории с gamedbd, то вы увидите нечто вроде roleid,userid,name,race,occupation,gender,custom_data_size,custom_stamp,status,delete_time,create_time,lastlogin_time,forbid_size,level,level2,exp,sp,pp,hp,mp,posx,posy,posz,worldtag,money,invader_state,invader_time,pariah_time,factionid,factionrole,reputation,custom_status_size,filter_data_size,charactermode_size,instancekeylist_size,dbltime_expire,dbltime_mode,dbltime_begin,dbltime_used,dbltime_max,time_used,timestamp,storesize,petcorral_size,vitality,energy,strength,agility,max_hp,max_mp,hp_gen,mp_gen,walk_speed,run_speed,swim_speed,flight_speed,attack,damage_low,damage_high,attack_speed,attack_range,damage_low0,damage_low1,damage_low2,damage_low3,damage_low4,damage_high0,damage_high1,damage_high2,damage_high3,damage_high4,damage_magic_low,damage_magic_high,resistance0,resistance1,resistance2,resistance3,resistance4,defense,armor,max_ap,var_data_size,skills_size,storehousepasswd_size,waypointlist_size,coolingtime_size,storehouse_money,storehouse_size,inventory_size,equipment_size,taskinventory_size,task_data_size,task_complete_size 16,16,"cls0gender0",0,0,0,0,0,1,,,2009-09-24 13:36:28,0,1,0,0,0,0,75,45,218.3,218.7,2838.3,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,766,5,16,5,5,5,5,5,75,45,3,2, 2.0, 5.0, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,28,0,2,8,0,0,0,1,0,0,0 17,16,"cls9gender1",0,9,1,0,0,1,,,2010-11-12 09:31:46,0,1,0,0,0,0,50,70,-2417.9,135.2,-3062.3,1,0,0,0,0,0,0,0,0,4,0,736,0,0,1289149200,0,36000,487,12,16,5,5,5,5,5,50,70,1,4, 2.0, 4.8, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,64,40,0,2,8,0,0,0,1,0,0,0 18,16,"cls8gender0",0,8,0,0,0,1,,,2010-11-12 09:17:24,0,1,0,0,0,0,75,45,-2581.0,136.4,-3026.1,1,0,0,0,0,0,0,0,0,4,0,736,0,0,1289149200,0,36000,1483,16,16,5,5,5,5,5,75,45,3,2, 2.0, 5.0, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,64,28,0,2,8,0,0,0,1,0,0,0 19,16,"cls1gender1",0,1,1,0,0,1,,,2009-09-24 13:36:11,0,1,0,0,0,0,50,70,217.3,218.5,2838.4,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,203,4,16,5,5,5,5,5,50,70,1,4, 2.0, 4.8, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,28,0,2,8,0,0,0,1,0,0,0 20,16,"cls2gender0",0,2,0,0,0,1,,,2009-11-16 13:19:08,0,1,0,0,0,0,50,70,2559.9,216.2,-3406.2,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1258304400,0,7200,396,5,16,5,5,5,5,5,50,70,1,4, 2.0, 4.8, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,40,0,2,8,0,0,0,1,0,0,0 21,16,"cls2gender1",0,2,1,0,0,1,,,,0,1,0,0,0,0,50,70,2623.0,225.0,-3407.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,50,70,-1075842064,0, 0.0,-1.7, 0.0, 0.0,0,1,1,136265260, 0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 22,16,"cls3gender0",1,3,0,0,0,1,,,,0,1,0,0,0,0,60,60,332.0,241.0,3068.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,60,60,0,0, 0.0, 0.0, 0.0, 0.0,0,1,1,0, 0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 23,16,"cls3gender1",1,3,1,0,0,1,,,2009-09-24 13:36:45,0,1,0,0,0,0,60,60,-1442.0,242.2,1383.1,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,210,2,16,5,5,5,5,5,60,60,2,3, 2.0, 5.1, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,28,0,2,8,0,0,0,1,0,0,0 24,16,"cls4gender0",2,4,0,0,0,1,,,2009-09-24 13:19:29,0,1,0,0,0,0,85,35,-1442.1,242.1,1383.6,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,247,1,16,5,5,5,5,5,85,35,4,1, 2.0, 4.9, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,28,0,2,8,0,0,0,1,0,0,0 25,16,"cls4gender1",2,4,1,0,0,1,,,,0,1,0,0,0,0,85,35,332.0,241.0,3068.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,85,35,0,0, 0.0, 0.0, 0.0, 0.0,0,1,1,0, 0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 26,16,"cls5gender0",3,5,0,0,0,1,,,,0,1,0,0,0,0,65,50,2623.0,225.0,-3407.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,65,50,-1075842064,0, 0.0,-1.7, 0.0, 0.0,0,1,1,136265260, 0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 27,16,"cls5gender1",3,5,1,0,0,1,,,2009-11-12 08:55:06,0,1,0,0,0,0,65,50,2559.4,216.2,-3406.1,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1257699600,0,28800,202,2,16,5,5,5,5,5,65,50,3,2, 2.0, 5.2, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,28,0,2,8,0,0,0,1,0,0,0 28,16,"cls6gender0",4,6,0,0,0,1,,,2009-09-24 13:18:13,0,1,0,0,0,0,65,55,-317.4,218.1,-911.0,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,882,3,16,5,5,5,5,5,65,55,3,2, 2.0, 5.2, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,40,0,2,8,0,0,0,3,0,0,0 29,16,"cls6gender1",4,6,1,0,0,1,,,,0,1,0,0,0,0,65,55,332.0,241.0,3068.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,65,55,0,0, 0.0, 0.0, 0.0, 0.0,0,1,1,0, 0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 30,16,"cls7gender0",5,7,0,0,0,1,,,,0,1,0,0,0,0,30,50,332.0,241.0,3068.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,25,5,10,30,50,135870208,-1210298380,-0.0, 0.0,-1.3, 0.0,0,1,1,135144543,-0.0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 31,16,"cls7gender1",5,7,1,0,0,1,,,2009-09-24 13:18:00,0,1,0,0,0,0,50,70,-318.5,218.1,-910.8,1,0,0,0,0,0,0,0,0,4,0,708,0,0,1253466000,0,28800,303,2,16,5,5,5,5,5,50,70,1,4, 2.0, 4.8, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,56,40,0,2,8,0,0,0,2,0,0,0 1024,32,"Avatar",0,8,0,176,1,1,,2012-04-25 21:50:45,2012-04-27 23:33:59,0,119,0,25,1935,0,5995,2214,1481.7,219.8,774.4,1,70909738,0,0,0,0,0,0,0,4,8,764,0,0,1335128400,0,36000,18074,57,24,5,150,10,230,220,5790,2214,3,2, 2.0, 5.0, 3.0, 5.0,0,119,119,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,64,28,0,2,8,0,23,18,21,0,360,26 1025,32,"Fedora",3,5,1,176,0,1,,2012-04-27 17:28:35,2012-04-27 23:00:24,0,1,0,0,0,0,65,50,2555.6,216.1,-3403.3,1,0,0,0,0,0,0,0,0,4,0,764,0,0,1335128400,0,36000,482,4,16,5,5,5,5,5,65,50,3,2, 2.0, 5.2, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,64,28,0,2,8,0,0,0,1,0,40,4 1042,64,"JoTest",0,8,0,176,0,1,,2012-04-27 17:20:59,2012-04-27 17:20:59,0,1,0,0,0,0,75,45,-2581.0,136.4,-3026.1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1289149200,0,36000,1483,16,16,5,5,5,5,5,75,45,3,2, 2.0, 5.0, 3.0, 5.0,0,1,1,16, 2.5,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,64,28,0,2,8,0,0,0,1,0,0,0 1043,64,"Debian",0,2,0,176,0,1,,2012-04-27 17:22:03,2012-04-29 07:56:54,0,150,0,0,605605,458,3030,7798,1136.9,219.6,839.7,1,145736186,0,0,0,0,0,0,0,4,0,764,0,0,1335128400,0,50400,4679,20,16,5,5,259,38,5,3030,7798,1,4, 2.0, 4.8, 3.0, 5.0,0,31,31,16, 2.5,0,0,0,0,0,0,0,0,0,0,150,150,0,0,0,0,0,1,0,0,64,616,0,2,8,0,0,4,5,0,360,12 Если экран пустой - значит вы либо не прописали права либо указали не верно пути до gamedbd в server.php Теперь проверим занесение в MySQL у вас на сайте. Запросим через браузер скрипт http://you_site.ru/listrole.php Это тот скрипт что вы создали и залили. Для отладки добавте в начало скрипта ini_set('display_errors','On'); сразу после <?php через пробел или на следующей строчке, это поможет увидеть ошибки вывод которых по умолчанию отключён. Быть может у вас отключена file_get_contents(), нужно капнуть php.ini, подробности в яндексе. Если ошибок нет, то можно смотреть наши таблицы в MySQL. Там данные. Ну а что с этими данными делать сами решайте, можно топ - http://www.pw-projec...p?name=listrole можно онлайн по классам - http://www.pw-projec...name=listonline или ещё что другое.
и вообще у меня лично это делает демон на пхп вместе с репликацией gamedbd
Имена участников (разделяйте запятой).