จัดการ ป๊อกเด้ง by voratep
Dec0
การเปิด event high low
** ไฟล์จัดการอยู่ที่ lib/model/event **
1. php แก้ไฟล์ config/event ‘event_highlow’ เป็น true;
2. รัน node ไฟล์ createHighLowEvent เพื่อเปิด event ทุกนาทีที่กำหนด ตามของเก่า*
3. รัน node ไฟล์ endHighLowEvent เพื่อปิด event ทุกนาทีที่กำหนด ตามของเก่า*
—————————————————————————
mission nickname achievement
ตัวจัดการทั้งหมด อยู่ที่ lib/model/activity
จะมีการเรียกฟังก์ชั่น เพื่อเช็ค อัพเดท mission nickname achievement อยู่ 4 ตัว คือ
updateActivitys //เอาไว้อัพเดท หรือเช็คค่าหลังเล่นจบ ไว้อัพเดทข้อมูล พวก ได้เงิน เสียเงิน ต่างๆ
updateActivitys_emotion//เอาไว้อัพเดท หรือเช็คค่าหลังส่งอีโมติค่อน
updateActivitys_buy//เอาไว้อัพเดท หรือเช็คค่าหลังซื้อของ
updateActivitys_sendMoney//เอาไว้อัพเดท หรือเช็คค่าหลังส่งเงินไห้เพื่อน
updateActivitys_sitroom//เอาไว้อัพเดท หรือเช็คค่าเงินที่เอาไว้เข้าห้อง หลังสร้างห้อง / นั่ง / จอยรูมแบบนั่งด้วย
** บางตัวจะไม่ อัพเดท mission ถ้าจะเพิ่ม mission ไปดูตัวอย่างจาก updateActivitys ได้จะเรียกอัพเดท และส่งnoti จาก updateMissionNoti
—————————————————————————
event ต่างๆ
- config อยู่ที่ lib/config/event
ตัวจัดการ อีเว้น กลาง
– getEventOpen จัดการ ข้อมูล โดยจะส่งข้อมูล อีเว้นที่เปิดอยู่ใน config ออกมาไห้
– getEventPopup เวลาที่คนเล่น กดไอคอนอีเว้น จะเรียก ฟังก์ชั่นนี้เพื่อแสดงรายละเอียด ถ้ามี error เรียก มาแสดงว่าเขายิงตรง
event จะแบ่งเป็น type ต่างๆ ดังนี้
* inroom_bet เป็นอีเว้นที่เล่นครบกำหนด จะมีโอกาสลุ่นได้รางวัลใหญ่
ตัวจัดการอีเว้นนี้คือ
ฟังก์ชั่นที่เกี่ยวข้อง
– getEventReward เอาไว้คำนวณเวลากดรับของรางวัล โดยมันจะแรนดอม เงินให้
* inroom_click เทพเจ้าโชคลาภ
** ถ้าจะเพิ่ม id ต้องไปเพิ่มใน php ด้วย น่ะ ตรง user/god_event_user_get ด้วย โดยเพิ่ม $activity['event_*ไอดีไหม่*_lasttime'] ด้วย
ตัวจัดการอีเว้นนี้คือ
– timeGodBorn จัดการเวลาเกิดของเทพ
– eventGodClick ทำหน้าที่ 2 อย่าง คือเช็ค ว่าถึงเวลาเทพเกิดยัง กับ กดเทพ โดย flash จะยิงมาถามตลอด เวลา ที่เล่นจบ
*** เวลาจะเปิด event ของ inroom_click จะต้องอัพก่อน 1 วัน คือเปิดได้ 1 วันหลังจากที่ อัพ โค๊ด โดยจัดการเปิด code ที่ ตัวแปร
date_start ใน config
—————————————————————————
emotion
แบ่งเป็น 2 ส่วน
ซื้อ อยู่ที่ php
ฟังก์ชั่น controller/emo_shop
– shop_get เปิด shop ขาย
– buy
– emotion_can_use เรียกตอนจะใช้ emo ตอนอยู่ในห้อง
ตอนใช้ จะเรียกเข้าฟังก์ชั่น js
– sendEmotion อยู่ไฟล์ pokdeng.js เป็นตัวจัดการ
—————————————————————————
จัดการ event stage ตอน 2 by voratep
Dec0
จัดการ config event stage
‘name’ => ชื่อ อีเว้น,
‘full_name’ => ชื่อ เต็มเอาไว้ส่งให้ flash,
‘require_lv’=> เลเวลที่สามารถเข้าได้,
‘start_dungeon_id’ => dungeon_id ของแมพแรกของ อีเว้น,
‘multi_hour’ => array(0,4,8,12,16,20) ชั่วโมงเปิดคูน 2,
‘energy_use_per_step’ => energy ที่เสีย ต่อ ช่องว่าง / วาป ,
‘energy_use_per_get_item’ => energy ที่เสีย ต่อ ช่องที่มีไอเอ็มดรอป,
‘energy_use_per_fight’ => energy ที่เสีย ต่อ ช่องที่สู้กับมอนเตอร์,
‘reward_rank_have_group’ => ของรางวัลแต่ละกลุ่มเหมือนกันไหม ไม่ = 1 เหมือน = 0,
‘random_map_end’ => true ถ้าจบชั้นสูงสุดแล้วแมพต่อไปจะ แรนดอมไหม,
‘time_end’ => strtotime(’2014-01-06 13:00:00′) เวลาจบ อีเว้น,
‘image_name’ => ‘event/20131219_winter_castle.png’ รูปปุ่มเข้าอีเว้น,
‘can_capture_mon’ => true สามารถจับมอนเตอร์ได้ป่าว,
‘type’ => ‘stage’ ประเภทของอีเว้น,
config แยกคนออกเป็นกลุ่ม key คือ ช่องเลเวลของผู้เล่น
‘group’ => array(
ผู้เล่นที่มีเลเวล array(
‘group_id’=>1,
‘max_level’=> 20,
‘max_sub_group’=> 7,
‘code_name’ =>’1-20 ‘,
),
ผู้เล่นที่มีเลเวล 21-30
30=>array(
‘group_id’=>2,
‘max_level’=> 30,
‘max_sub_group’=> 5,
‘code_name’ =>’21-30 ‘,
),
ผู้เล่นที่มีเลเวล 31-45
45=>array(
‘group_id’=>3,
‘max_level’=> 45,
‘max_sub_group’=> 3,
‘code_name’ =>’31-45 ‘,
),
ผู้เล่นที่มีเลเวล array(
‘group_id’=>4,
‘max_level’=> 100,
‘max_sub_group’=> 1,
‘code_name’ =>’45+ ‘,
),
),
config สร้างข้อมูลของ ช้น ‘end_less’ โดยจะเอารูปแบบชั้นจาก ดาต้าเบต แต่พวก เลเวลของมอนเตอร์ เงิน exp จะเปลี่ยนตามนี้
‘end_less’ =>array(
‘mon_lv_min’=>80,
‘mon_lv_max’=>90,
‘mon_team’=>6,
‘money_min’=>750,
‘money_max’=>1000,
‘exp_per_fight’=> 275,
‘monster’=>array(
10=>array(“188″,”189″,”190″,”196″,”197″,”198″,”203″,”204″,”205″,”210″,”211″,”212″,”282″),
40=>array(“1096″,”1112″,”287″,”648″,”302″,”648″,”199″,”206″,”213″),
70=>array(“1097″,”1113″,”1782″,”1787″,”1788″,”1789″,”649″,”442″),
95=>array(“1098″,”1114″,”1783″,”1790″,”1791″,”1792″,”1802″),
100=>array(“1802″),
),
),
คะแนนต่างๆ ของอีเว้น
‘add_point’ => array(
//key เป็นดาวของมอนเตอร์
‘fight_monster’=>array(
1 => 10,
2 => 20,
3 => 30,
4 => 90,
5 => 210,
),
‘capture_monster’=>array(
1 => 20,
2 => 32,
3 => 100,
4 => 1000,
5 => 10000,
),
//key เป็นชั้น
‘end_floor’=>array(
30=>300,
60=>500,
100=>1000
),
‘fight_miniboss’=>array(
20=>2500,
40=>2500,
60=>2500
),
‘fight_boss’=>array(
50=>4000,
80=>4500,
100=>5000,
)
),
ของรางวัลที่แจก โดยอันนี้แต่ละกรุ๊ปเหมือนกัน แต่ถ้า ไม่เหมือน จะเป็น อาเร่ย์ซ้อน เข้าไปอีก 1 ชั้นโดยมี key เป็น กรุ๊ป 1-4
‘reward_rank’ => array(
1=>array(
‘rank_image’=>’grand’,
‘rewards’=>array(
array(
‘type’ => ‘monster’,
‘id’ => 1804,
‘count’ => 1
),
array(
‘type’ => ‘inventory’,
‘id’ => 100,
‘count’ => 1
),
array(
‘type’ => ‘ticket_gold’,
‘count’ => 2
),
),
),
10=>array(
‘rank_image’=>’gold’,
‘rewards’=>array(
array(
‘type’ => ‘monster’,
‘id’ => 1803,
‘count’ => 1
),
array(
‘type’ => ‘inventory’,
‘id’ => 100,
‘count’ => 1
),
array(
‘type’ => ‘ticket_gold’,
‘count’ => 1
),
),
),
25=>array(
‘rank_image’=>’silver’,
‘rewards’=>array(
array(
‘type’ => ‘monster’,
‘id’ => 1784,
‘count’ => 1
),
array(
‘type’ => ‘ticket_silver’,
‘count’ => 3
),
),
),
50=>array(
‘rank_image’=>’bronze’,
‘rewards’=>array(
array(
‘type’ => ‘monster’,
‘id’ => 1783,
‘count’ => 1
),
array(
‘type’ => ‘ticket_silver’,
‘count’ => 2
),
),
),
100=>array(
‘rewards’=>array(
array(
‘type’ => ‘ticket_silver’,
‘count’ => 2
),
array(
‘type’ => ‘money’,
‘count’ => 30000
),
),
),
200=>array(
‘rewards’=>array(
array(
‘type’ => ‘ticket_silver’,
‘count’ => 1
),
array(
‘type’ => ‘money’,
‘count’ => 20000
),
),
),
300=>array(
‘rewards’=>array(
array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 2
),
array(
‘type’ => ‘money’,
‘count’ => 10000
),
),
),
500=>array(
‘rewards’=>array(
array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 1
),
array(
‘type’ => ‘money’,
‘count’ => 5000
),
),
),
),
ของรางวัลเมื่อจบชั้น จะเป็น อาเรย์ โดยมี key เป็น ชั้นที่จะแจก
‘reward_end_floor’ => array(
1=>array(
‘type’ => ‘inventory’,
‘id’ => 2,
‘count’ => 1
),
10=>array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 1
),
20=>array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 1
),
30=>array(
‘type’ => ‘money’,
‘count’ => 10000
),
40=>array(
‘type’ => ‘inventory’,
‘id’ => 82,
‘count’ => 1
),
50=>array(
‘type’ => ‘ticket_silver’,
‘count’ => 1
),
60=>array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 2
),
70=>array(
‘type’ => ‘inventory’,
‘id’ => 3,
‘count’ => 2
),
80=>array(
‘type’ => ‘money’,
‘count’ => 20000
),
90=>array(
‘type’ => ‘inventory’,
‘id’ => 82,
‘count’ => 2
),
100=>array(
‘type’ => ‘ticket_silver’,
‘count’ => 2
),
),
จัดการ event stage ตอน 1 by voratep
Dec0
สร้างฐานข้อมูลต่าง
รันฟังก์ชัน generate/event_dungeon_gen
โดยมีตัวแปรที่ต้องใส่คือ
-treasurebox obj มีkey เป็นโอกาสสุ่ม และ value เป็นดาต้าของรางวัล
-magicbox obj มีkey เป็นโอกาสสุ่ม และ value เป็นดาต้าของรางวัล
-floor_boss อาเร่ย์ของชั้นที่มี บอส อาศัยอยู่
-floor_mini_boss อาเร่ย์ของชั้นที่มี มินิบอส อาศัยอยู่
-mini_boss ดาต้าของมินบอส เป็น obj
‘id’=> id ของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘level’=> level ของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘minion_id’=> idลูกน้องของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘minion_level’=> levelลูกน้องของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘minion_count’=> จำนวนลูกน้องของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘exp’=> exp ของมินิบอสเป็นอาเรย์ ตาม floor_mini_boss,
‘money’=> money ของมินิบอสที่ดรอปเป็นอาเรย์ ตาม floor_mini_boss,
‘resource’=> resource ของมินิบอสที่ดรอปเป็นอาเรย์ ตาม floor_mini_boss,
‘reward’=> รางวัลอย่างอื่น ของมินิบอสที่ดรอปเป็นอาเรย์ ตาม floor_mini_boss
-randbox ข้อมูลของกล่องแรนดรอม
‘name’=> ชื่อ,
‘image_name’=> ลิงค์รูป,
‘data’=> obj มีkey ชื่อของโอกาส และมี value objที่เก็บ โอกาส และ ของรางวัล
-data:obj
ชั้น:obj
‘mon_lv_min’=> int,
‘mon_lv_max’=> int,
‘mon_team’=> int,
‘money_min’=> int,
‘money_max’=> int,
‘exp_per_fight’=> int,
‘mon_per’=> อาเรย์การออกของมอนเตอร์ แต่ละดาว,
‘money_box_serialized’=> อาเรย์ของกล่องเงิน,
‘item_box_serialized’=> obj มีkey เป็นโอกาสสุ่ม และ value เป็นดาต้าของรางวัล
-monster ข้อมูลของมอนเตอร์ในอีเว้น เก็บเป็น อาเรย์ตาม ดาว-1
*** ถ้าชื่อ family มี ‘-’ ให้เปลี่ยน ‘-’ เป็น ‘_’ ***
ex:4=>array(‘puppet-3′,’banshee-2′,’iron maiden-1′),
3=>array(‘puppet-2′,’banshee-1′,’black cat-2′),
2=>array(‘puppet-1′,’zombie-2′,’black cat-1′,’flying skull-2′),
1=>array(‘wanderer-2′,”Jack o’Lantern-2″,’Ghost-2′,’Skeleton-2′,’zombie-1′,’flying skull-1′),
0=>array(“wanderer-1″,”Jack o’Lantern-1″,”Ghost-1″,”Skeleton-1″),
-boss
‘count’=> 3,
‘name’=>ชื่อบอส,
‘image_name’=>รูปบอส,
‘dungeon_id’=> เดียวระบบเจน เอง,
‘atk’=> atk ของบอสเป็นอาเรย์ ตาม floor_boss,
‘hp’=> hp ของบอสเป็นอาเรย์ ตาม floor_boss,
‘skill_deny’=>’debuff’ / ‘buff’,
‘element’=>’W',
‘atk_move’=>’ice_3′,
‘minion_id’=> ไอดีลูกน้อง ของบอสเป็นอาเรย์ ตาม floor_boss,
‘minion_lv’=> lv ลูกน้อง ของบอสเป็นอาเรย์ ตาม floor_boss,
‘exp’=> exp ที่ดรอปของบอสเป็นอาเรย์ ตาม floor_boss,
‘money’=> money ที่ดรอปของบอสเป็นอาเรย์ ตาม floor_boss,
‘resource’=> resource ที่ดรอปของบอสเป็นอาเรย์ ตาม floor_boss,
‘reward_serialized’=> เป็น json ของรางวัลที่ได้จาก บอส
รันฟังก์ชัน generate/event_random_box_gen เพื่อสร้าง ข้อมูลกล่อง
*** เครื่องมือ ***
ดูข้อมูลมอนเตอร์
ดูข้อมูลไอเท็ม
***
วิธี เพิ่ม Dungeon แมพ ต่างๆ by voratep
Oct0
-แมพในเกม จะมีอยู่ 2 ส่วน คือ
แมพปกติ (adventure) กับแมพ (event)
โดย วิธีการ เพิ่มนั้น ไฟล์ จะอยู่ใน public/assets/raw_data/dungeon_new
แบ่งเป็น
**สิ่งที่ต้องจำ
mon1_chance : mon1
mon2_chance : mon2
mon3_chance : mon3
mon4_chance : mon4
mon5_chance : mon5
เอาไว้ใช่สร้างมอนเตอร์ โดย mon1_chance จะเก็บ โอกาส เกิด มอนเตอร์ 1 ดาว
mon1 เก็บ ชื่อแฟมิลี่ของมอนเตอร์ 1 ดาวที่มีโอกาสเจอในแมพนั้นๆ โดยขั้นด้วยเครื่องหมาย ‘,’ และ ‘-’ตามด้วยตัวเลข เป็นการบอก form ของมอนเตอร์
**box_chance** e – a ะเก็บ % การดรอป กล่องแต่ละชนิดหลังจบการสู้กับมอนเตอร์ *มีเฉพาะ แมพบอส
**treasure_box** เก็บเงินที่จะได้จากกล่องแดง โดยมีโอกาส ออก 8 อย่างเท่าๆกัน โดยใชั # ขั้นเงินรางวัลไว้ *มีเฉพาะ แมพบอส
*magic_box1* จะคล้ายๆกับ treasure_box แต่จะมีการลดเอนนิจี้ เงิน และได้ของรางวัล โดย
magic_box1 – 3 จะลด energy
magic_box4 – 5 ลดเงิน
magic_box6 – 7 ให้ของโดยใช้ ไอเท็มไอดี#จำนวนที่ได้
magic_box8 ให้ ticket_silver โดยไส่แค่จำนวน
*****************************************
money_box_s1 – 4 ใส่เงิน คล้ายๆกับ treasure_box คือใส่เงินไปอย่างเดียว
mini_box_1-7 ใส่ไอเท็มลงไปโดย
mini_box_1 ใส่กล่องที่จะแจก โดยไส่เป็น E-c ระบบจะหากล่องของแมพนั้นๆเอง
mini_box_2 จำนวน ticket ที่่ได้
mini_box_3 ให้ของโดยใช้ หรัส-จำนวนที่ได้ || eS คือ energy เล็กเป็นต้น
mini_box_4 ให้ของโดยใช้ หรัส-จำนวนที่ได้ || mS คือ mbเล็กเป็นต้น
mini_box_5 แร่อัพเกด ระบบจะหาเองว่าได้แร่อาไร
mini_box_6 Basic Evo Disc / Advance Evo Disc
mini_box_7 cube
******
ต่อไปก็ถ้าแมพที่มี mini boss ช่องพวกนี้ก็จะมีข้อมูล
miniBoss_id
miniBoss_level
minion_id
minion_level
exp
money
ต่างโดยเราใส่ค่าลงไปได้เลยอันน้ไม่ยาก
การ gen ลง ดาต้าเบต
แมพปกติ (adventure)
tester/add_dungeon_db
แมพ (event)
generate/event_dungeon_gen
โดยในส่วนของ แมพ (event) ข้อมูลจะเขียนไว้เป็น แทมเพจ อยู่ในฟังก์ชั่นแล้ว แค่แก้ไขแล้วรัน มันก็จะเขียนลงดาต้าเบตให้แล้วว
**สุดท้ายเวลา จะแก้ไขข้อมูลของ dungeon ทำ แบ๊กอพไว้ให้ดีเพราะ แก้ไข เมื่อมันพังยากมาก ฮ่าๆๆ**
การจัดการข้อมูล มอนเตอร์ by voratep
Oct0
การจัดการข้อมูล มอนเตอร์
ข้อมูลภายในเกม ส่วนใหญ่ นั้นจะมีเก็บข้อมูลลง ฐานข้อมูล mysql
แต่ขอมูลอย่างเช่น มอนเตอร์ นั้นจะมีการ อัพเดท และแก้ไข เป็นประจำการที่เราเข้าไปแก้บนฝั่ง server เลยนั้นมันเสียเวลามาก
ในการทำงานส่วนใหญ่จะเป็นลง บนไฟล์ excel ก่อนโดยเราจะทำให้อยู่ในโครงสร้าง ที่อ่านได้ และสามารถนำมาเขียน เป็นเป็น โค๊ดเพื่อนำลง server ได้
โดยในส่วนตัวเกมของ cyber-mon นั้นเราจะออกแบบ ตารางเป็น
id | name | family | rarity | form | element | lv_max | mp | atk | hp | skill
โดยในส่วนของ family และ skill นั้นเราจะเก็บเป็น id เพื่อ อาจอิงกับ ฐานข้อมูลอื่น เพื่อให้ง่ายต่อการแก้ไขครับ
และวิธีการอัพขึ้น server นั้นเราจะเขียน php เพื่ออัพเดทข้อมูล
โดยการ save เป็นไฟล์ csv
และใช้ library เสริมชื่อ parsecsv
โดยมันจะทำหน้าที่ อ่านไฟล์ csv ครับ
ตัวอย่างการใช้
$this->load->library(‘base/parsecsv’); โหลด library
$csv = new parseCSV();
$csv->parse(PUBLICPATH.’assets/raw_data/newdun.csv’); //อางอิงไปยังไฟล์ csv
**$csv ก็จะได้ข้อมูลออกมาเป็น array 2 มิติ แล้วเราก็ วน foreach เพื่อนำข้อมูลของแต่ละ $row มาใช้ครับ
foreach($csv->data as $row){
$row['ชื่อหัวข้อ']
}
ส่วนคำสั่งที่ mysql ใช้ในการอัพเดทนั้นผมจะใช้คือ REPLACE ครับ โดยต้องเขียนคำสั่งเองน่ะครับ ใน codeigniter ไม่มีให้
ตัวอย่างการใช้ $this->db->query(“REPLACE `ชื่อตาราง` SET
`ชื่อ column ` = ค่าที่อัพเดท ,
);
ข้อดีของ REPLACE คือถ้ามันมี id อยู่แล้วมันจะอัพเดทข้อมูลให้ แต่ถ้าไม่มี มันก็จะ insert ไห้โดยอัตโนมัติ ครับ
ซึ่งจากตัวอย่างเราจะสามารถอัพเดทข้อมูลได้ ง่ายขึ้นเยอะเลยหล่ะครับ ไม่จำเป็นต้องแก้ไขใน mysql โดยตรงแต่สร้างเป็นฟังก์ชั่น อัพเดทครับ