--.--.-- *--*
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ログイン人数を偽る方法(笑)

2011.02.10 *Thu*
サーバーのログイン人数というのはそのサーバーの人気をある程度反映した数字であるとも言えます。

サーバーを運営している方はわかるかと思いますが
プレイヤーは、人数が多いサーバー=良いサーバー、面白いサーバーだと思うため
ログイン数が多いとねずみ算式に人が流入する傾向があります。

一部のサーバーではそれを逆手に取り、初期の段階のまだプレイヤーが集まっていない時に
自鯖のログイン人数を操作して人集めを行ったりしているようです。
(え、私もやってたでしょ、って?それは秘密です。)

そんなことは可能なの?という方もいると思いますので
実際にAurigaのソースをいじってログイン人数を2倍にしてみましょう。
src/common/mmo.h(24付近)

#ifndef _MMO_H_
#define _MMO_H_

#include
#include

#pragma pack(4)

//ここで倍率を設定できるようにする(2倍なら 2、控え目にするなら 1.5、など)
+ #define LOGIN_USERS_DOUBLE 2

#define AUTH_FIFO_SIZE 256


src/login.c(1554付近)

case 0x7938:
// information about servers
server_num = 0;
for(i = 0; i < MAX_CHAR_SERVERS; i++) { // max number of char-servers (and account_id values: 0 to max-1)
if (server_fd[i] >= 0) {
WFIFOL(fd,4 + server_num * 32 ) = server[i].ip;
WFIFOW(fd,4 + server_num * 32 + 4) = server[i].port;
strncpy(WFIFOP(fd,4 + server_num * 32 + 6), server[i].name, 20);
- WFIFOW(fd,4 + server_num * 32 + 26) = server[i].users;
* WFIFOW(fd,4 + server_num * 32 + 26) = server[i].users * LOGIN_USERS_DOUBLE;
WFIFOW(fd,4 + server_num * 32 + 28) = server[i].maintenance;
WFIFOW(fd,4 + server_num * 32 + 30) = server[i].new_;
server_num++;
}
}
WFIFOW(fd,0) = 0x7939;
WFIFOW(fd,2) = 4 + 32 * server_num;
WFIFOSET(fd, 4 + 32 * server_num);

RFIFOSKIP(fd,2);
break;


src/login.c(1802付近)

server_num = 0;
for(i=0; i<MAX_CHAR_SERVERS; i++) {
if(server_fd[i] >= 0) {
WFIFOL(fd,47+server_num*32) = server[i].ip;
WFIFOW(fd,47+server_num*32+4) = server[i].port;
memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
- WFIFOW(fd,47+server_num*32+26) = server[i].users;
* WFIFOW(fd,47+server_num*32+26) = server[i].users * LOGIN_USERS_DOUBLE;
WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
WFIFOW(fd,47+server_num*32+30) = server[i].new_;
server_num++;
}
}


src/login.c(2164付近)

static double login_users(void)
{
int i;
int users = 0;

for(i=0;i<MAX_CHAR_SERVERS;i++) {
if(server_fd[i] > 0) {
users += server[i].users;
}
}
+ users *= LOGIN_USERS_DOUBLE;

return (double)users;
}


src/char.c(4099付近)

int send_users_tologin(int tid,unsigned int tick,int id,void *data)
{
if (login_fd >= 0 && session[login_fd] && session[login_fd]->auth) {
int i, users = 0;

for(i = 0; i < MAX_MAP_SERVERS; i++) {
if (server_fd[i] >= 0)
users += server[i].users;
}
+ users *= LOGIN_USERS_DOUBLE;

WFIFOW(login_fd,0) = 0x2714;
WFIFOL(login_fd,2) = users;
WFIFOSET(login_fd,6);

for(i = 0; i < MAX_MAP_SERVERS; i++) {
int fd;
if ((fd = server_fd[i]) >= 0) {
WFIFOW(fd,0) = 0x2b00;
WFIFOL(fd,2) = users;
WFIFOSET(fd,6);
}
}
}

return 0;
}


ユーザーからログイン人数が参照される部分は

・httpdのグラフ
・サーバー選択時
・/wコマンド
・ladminを使用したcgiによるログイン数参照時

せいぜいこんなところだと思いますので
こんな感じで、ログイン人数が参照される部分にmmo.hで設定した倍率(LOGIN_USERS_DOUBLE)を掛けていきます。
LOGIN_USERS_DOUBLE は 2 に設定されているので、これでログイン人数は倍の数で表示されるはずです。

もっと厳密に言えば、@usersコマンドや、getusers関数などのスクリプトもありますが
きっとログイン人数偽称しているサーバーではそんなコマンドやスクリプトは
使用していないと思いますので省きます(笑)
関連記事
| Auriga |

COMMENT

Comment Form


秘密にする
 


TRACKBACK

TrackBack List



プロフィール

Author:みのり

すごく面倒臭がりで大雑把です。
なので、すぐ楽をしようとして
ツールを作り始めます。
ツールを作る時間と手作業で費やす時間
はたしてどちらが短いのか……


-構築環境-

Auriga0945 MySQL 5.5
with 2011-12-20bRagexeRE

3CeAM rev525
with 2010-07-30aRagexeRE



カテゴリ

未分類 (9)
RagexeRE (9)
eAthena (1)
Auriga (5)
ツール:eAthena用 (4)
ツール:Auriga用 (6)
ツール:その他 (14)
はじめてのAurigaスクリプト (8)
はじめてのAurigaスクリプト基本編 (21)
はじめてのAurigaスクリプト応用編 (7)
Aurigaスクリプト (3)
本鯖 (7)
Aurigaスクリプト:冒険者アカデミー (6)
ドラクエ10 (2)
新生FF14 (3)
EVE Online (2)



最新記事



最新コメント



月別アーカイブ



検索フォーム



リンク

このブログをリンクに追加する



ブロとも申請フォーム

この人とブロともになる



QRコード

QR



12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Copyright © Rocco di Forte All Rights Reserved.
テンプレート配布者: サリイ  ・・・  素材: HELIUM  ・・・ 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。