PDA

View Full Version : [Share + hướng dẫn] Hệ thống giftcode cho AHTT!



vagrant
07-03-15, 07:08 PM
Hôm nay mình share hệ thống giftcode trên web cho game AHTT viết bằng mysql và php( các webgame khác cũng tương tự, chỉ đến bước add gift/item vào game thì tùy mỗi game).
Bước 1 : Khởi tạo csdl, cần 2 table : giftcode (truyền giá trị giftcode vào) và giftlog(lưu các giftcode đã được sử dụng).
- Table giftcode :

CREATE TABLE IF NOT EXISTS `giftcode` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`type` tinyint(4) NOT NULL,
`name` varchar(64) NOT NULL,
`state` tinyint(4) NOT NULL,
`create_time` datetime NOT NULL,
`dead_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4424 ;
-- Table giftlog :

CREATE TABLE IF NOT EXISTS `giftlog` (
`gift_id` int(10) NOT NULL,
`gift_usetime` datetime NOT NULL,
`username` varchar(255) NOT NULL,
`serverid` int(10) NOT NULL,
`gift_type` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Trên đây là các trường cơ bản, các bạn có thể tùy biến thêm hoặc bớt trường phụ thuộc vào mức độ giftcode các bạn muốn dùng.
- Bước 2 : Tạo giftcode, nguyên tắc của việc tạo giftcode chỉ là 1 dạng mã random, dưới đây là code php đơn giản, có thể thực hiện trên local sau đó add vào db sau.

function generateRandomString($length = 12) {
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
Trong đó $length = 12 là số lượng ký tự trong giftcode bạn muốn tạo ra
- Bước 3: Sau khi đã hoàn thành backend, tiếp đến xây dựng hệ thống giftcode trên web. Thông thường form nhập giftcode sẽ chỉ hiện khi đã đăng nhập nên mình sẽ bỏ qua bước đăng nhập.
+) File gift.html nhập thông tin :


<form class="" method="post" action="gift.php">
<input type="text" class="gift_text" placeholder="enter code here" name="giftname"/>
<select name="server">
<option value="1">s1</option>
<option value="2">s2</option>
......
</select>
<input type="hidden" name="username" value="ten da co khi dang nhap" />
<button type="submit" class="" name="">Ok</button>
</form>
+)File gift.php thực hiện kiểm tra, và trao quà
Các bước kiểm tra cơ bản sẽ bao gồm :
- Giftcode có tồn tại hay không ?
- Giftcode đã được dùng hay chưa ?
- Giftcode còn hạn hay đã hết hạn
Sau khi check các vấn đề trên thì sẽ kiểm tra giftcode đó là loại nào và từ loại đó sẽ thêm quà tương ứng thông qua hệ thống mail ingame!.
Tạm thế đã, bây giờ có việc phải đi nên mai sẽ hướng dẫn kỹ hơn phần kiểm tra gift vào trao quà :).

thienvk
08-03-15, 01:49 PM
Bác móc ở cái source nào ra thì ghi rõ nguồn nhé.

Đây là phần gift code từ web còn khi nhập vào game thì những item nhận được là gì chưa thấy bác nói tới nhỉ

dù sao cũng cảm ơn bác đã chia sẻ

BeeZone
08-03-15, 02:22 PM
Bác móc ở cái source nào ra thì ghi rõ nguồn nhé.

Đây là phần gift code từ web còn khi nhập vào game thì những item nhận được là gì chưa thấy bác nói tới nhỉ

dù sao cũng cảm ơn bác đã chia sẻ


Người ta đã nói sẽ chia sẻ tiếp phần 2 (INGAME) mà ....Đợi chờ đi...send item qua mail con AHTT này thì ai rành code php thì đã làm được lâu rồi....

sgamer
08-03-15, 09:52 PM
Phần 2 bạn cho thêm id item nữa nha không có có cd rồi nhưng ko biết id item để send mail thì các bác kia lại khổ.

nh0xIskate
09-03-15, 07:22 PM
Người ta đã nói sẽ chia sẻ tiếp phần 2 (INGAME) mà ....Đợi chờ đi...send item qua mail con AHTT này thì ai rành code php thì đã làm được lâu rồi....
Này thì admintool:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Bộ code này phần gift code có 1 số nhược điểm =). item đựoc tặng là không khóa, -> có thể dùng nhiều acc clone để nhận quà send qua acc chính, nếu quy định code không giới hạn.
+ Không có chức năng chọn số lượng item ( max 3 item) , không có chức năng thêm (knb + đồng )...
Tuy nhiên nếu muốn thêm mấy chức năng này cho nó thì lại rất dễ ...
fix lại các file:
admin/giftcode.php
admin/giftcode_form.php
admin/manage/add_giftcode.php
admin/manage/delete_giftcode.php
../gift-code/use_card.php

Cơ bản toàn bộ phần giftcode là chuyền tham số để thực hiện 1 lệnh sql send mail vào game.
All chức năng như quà tặng, giftcode, tích lũy đều vì 1 mục đích cuối cùng là chạy dòng lệnh này.
dựa theo cấu trúc send mail vào game này có thể tùy biến ra ti tỉ các loại hoạt động như shop ngoài trang chủ... các loại quà tặng...
Còn đối với webgame khác thì chỉ cần biết được chỗ cuối dùng thực hiện chuyển item vào là ở table nào trong sql, table đó gồm những cái gì, và chuyền tham số vào cho nó là được =)


$dbh2->prepare("
INSERT INTO `systemmail` (uid, recv_time, kind, coin, coin_bind, gold, gold_bind, item_id1, item_num1, item_id2, item_num2, item_id3, item_num3, subject, content)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
")->execute(array($uid, time(), 2, $coin, $coinbind, $gold, $goldbind, $item, $qty, $item1, $qty1, $item2, $qty2, $subject, $content));

Chỉ cần hiểu bản chất của code là có thể tùy biến code theo ý mình, mặc dù không cần am hiểu quá nhiều về php và sql.
Tiện đây mình cũng chỉ ra 1 số khuyết điểm của admin tool mà t share + all các loại web game.
Webgame yếu điểm nhất là có thể log vào game mà không cần đăng nhập, chỉ cần chuyền đúng tham số cho index.swf.
Mặc dù đã mã hóa pname nhưng nếu người ta log vào tài khoản được 1 lần, lưu lại đường dẫn gốc thì không cần trang quản lý tài khoản nữa, không cần biết mk nữa :3
Còn 1 số thiếu sót của tool admin.
* Phần giftcode
+ Vật phẩm gửi vào là không khóa
+ Chỉ gửi được 1 item không chọn được số lượng.
+ Không có gửi đồng + knb đính kèm.
* Phần send mai cũng tương tự như vậy. gửi mail toàn server không lấy số lượng ở tham số nhập vào.


$allRole = $roleIdQuery = $dbh2->query("SELECT `role_id_1` as `role_id` FROM `login` WHERE `role_id_1` > 0")->fetchAll();
try {
foreach ($allRole as $role) {
$dbh2->prepare("
INSERT INTO `systemmail` (uid, recv_time, kind, coin, coin_bind, gold, gold_bind, item_id1, item_num1, item_id2, item_num2, item_id3, item_num3, subject, content)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
")->execute(array($role['role_id'], time(), 2, $coin, $coinbind, $gold, $goldbind, $item, $qty, $item1, $qty1, $item2, $qty2, $subject, $content));
}

$_SESSION['admin_message'] = "Gửi thành công mail cho server {$serverId}!";


Code đó là dòng lệnh cuối cùng full mà systemmail có thể gửi vào. Hiểu được cách truyền tham số thì có thể chỉnh lại theo ý mình được.
Ngoài ra còn hạn chế 1 số chức năng như quên mật khẩu, đổi thông tin tài khoản, và quan trọng nhất khi sử dụng code này đó là thay key mã hóa tài khoản "encryptKey"
đây cũng là dòng mã hóa từ tài khoản log ngoài trang chủ -> tài khoản thực vào game.


$username = trim($_POST['username']);

$encryptKey = 'jksvavajvbakjvbkabvkabvkjabvkbakvbakvbakbvkabvkab v;
$serverId = $_POST['server_id'];
$s_id = 1;
$flatUserName = $serverId . '.' . $username . '.' . md5(sha1($serverId . $username) . $encryptKey) . '_' . $s_id;

Hơi xàm tý , ae thông cảm =)),

BeeZone
09-03-15, 07:24 PM
@nh0xIskate (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)
: muốn item khóa thì set thêm item_bind1(2,3) = 1: là được (0: là không khóa) trong đoạn insert into mysql

nh0xIskate
09-03-15, 07:32 PM
@nh0xIskate (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)
: muốn item khóa thì set thêm item_bind1(2,3) = 1: là được (0: là không khóa) trong đoạn insert into mysql

Thanks bác ^^.
Không biết có cách nào không dò ra được đường dẫn gốc index.swf không nhờ :3
Giấu cỡ nào cũng dò ra được ^:)^

BeeZone
09-03-15, 07:36 PM
Thanks bác ^^.
Không biết có cách nào không dò ra được đường dẫn gốc index.swf không nhờ :3
Giấu cỡ nào cũng dò ra được ^:)^


Gửi 1 nhân vật thì query cái role_id trong table login theo plat_user_name = $flatUserName ấy ...chứ sao lại gửi toàn server thế ;))

langtukids
13-03-15, 09:32 PM
đây này, lôi bộ web này về mà vọc, có sẵn admin,chuyển knb,item,thư,giftcode..
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

kenlucky2000
20-03-15, 05:47 PM
ai rãnh team cài giúp bộ web trên được không .
ngồi vọc cả tuần mà chả đi về đâu :(

kenlucky2000
27-03-15, 05:59 PM
Ai Cho hỏi đã cài web thành công nhưng , add knb = chức năn admin thì ra trang trắng . nhận gìt code thì chuyển đến file use_card.php vẫn trang trắng . Ai cho hỏi có cần config thêm gì không .

gauandy89
27-04-15, 11:26 AM
Cho mình hỏi uid là lấy từ cái nào vậy