Appearance
🚀 AFU.Fishing
ข้อมูลสคริปต์
- Framework: ESX เท่านั้น (ไม่รองรับ QBCore โดยตรง)
- Dependencies:
- es_extended (ESX) — บังคับ
- oxmysql — บังคับ (ต้อง start ก่อน AFU.Fishing)
AFU.Notify— แนะนำ (ใช้แสดง Notification ทั้งหมด)AFU.SoundInteract— แนะนำ (ใช้เล่นเสียงปลาหยิบเบ็ด)
- เวอร์ชัน: 2.3.5 ·
fx_version cerulean·lua54
⚠️ ต้องใช้ License Token
สคริปต์นี้มีระบบตรวจสอบ License ผู้ซื้อต้องมี Token ที่ถูกต้อง และตั้งค่าใน server.cfg ก่อนเสมอ หากไม่มี Token ที่ถูกต้อง Resource จะไม่ทำงาน
ซื้อ Token ได้ที่ awayfromus.store
🛠️ Installation
1. Download & Placement
นำ Resource ทั้งหมดไปวางในโฟลเดอร์ resources/ ของเซิร์ฟเวอร์:
text
resources/
└── [afu]/
├── AFU.Fishing/
├── AFU.Notify/
└── AFU.SoundInteract/แนะนำ
การจัดโฟลเดอร์แบบ [afu] ช่วยให้ ensure ตามลำดับใน folder group ได้ง่าย
2. ตั้งค่า server.cfg
cfg
# License Token (จำเป็น) — ซื้อได้ที่ awayfromus.store
set afu_license "YOUR_TOKEN_HERE"
# ลำดับการ start ที่ถูกต้อง
ensure oxmysql
ensure es_extended
ensure AFU.Notify
ensure AFU.SoundInteract
ensure AFU.Fishingลำดับการ Start สำคัญมาก
oxmysqlและes_extendedต้อง start ก่อนAFU.Fishingเสมอ มิฉะนั้นสคริปต์จะค้างและไม่เริ่มทำงาน- หากไม่ใส่
set afu_licenseสคริปต์จะไม่ทำงาน
3. เพิ่ม Items ลงฐานข้อมูล
ไม่ต้อง Import SQL จากสคริปต์
AFU.Fishing ไม่มีไฟล์ SQL ให้ import และไม่สร้างตารางเอง — สคริปต์ทำงานผ่าน Config ทั้งหมด แต่คุณต้อง ลงทะเบียน Item ในระบบ Inventory (ESX) ด้วยตัวเอง ให้ครบตามรายการด้านล่าง
เพิ่ม Item ลงตาราง items ของ ESX (ปรับตาม schema ที่เซิร์ฟเวอร์คุณใช้):
sql
INSERT INTO `items` (`name`, `label`, `weight`) VALUES
('f_rod', 'เบ็ดตกปลา', 1),
('a_f_rod', 'เบ็ดตกปลา (พิเศษ)', 1),
('mine_orb', 'เหยื่อ Mine Orb', 0),
('bait_lv2', 'เหยื่อ Lv.2', 0);และเพิ่ม Item ปลาตามที่กำหนดในโซนตกปลาของคุณ (ดูรายชื่อทั้งหมดใน Items Reference)
4. เตรียมภาพไอคอน Item
UI ของสคริปต์ดึงรูปไอคอน Item จาก path ที่ตั้งค่าไว้ใน Settings.inventoryImagePath
lua
Settings.inventoryImagePath = 'nui://inventory/web/assets/icons/'WARNING
แก้ path นี้ให้ตรงกับโฟลเดอร์ไอคอนของ Inventory ที่คุณใช้จริง และต้องมีไฟล์ <item_name>.png ครบทุก Item ที่เกี่ยวข้อง (รวมถึงชื่อเบ็ด เช่น f_rod.png)
5. Restart เซิร์ฟเวอร์
Restart เซิร์ฟเวอร์ 1 ครั้ง แล้วตรวจสอบ console ว่าไม่มี error และ Blip โซนตกปลาแสดงบนแผนที่
🎮 Usage & Controls
| การกระทำ | วิธีใช้ | ปรับแก้ได้ที่ |
|---|---|---|
| เริ่มตกปลา | ใช้ไอเท็มเบ็ด (f_rod / a_f_rod) ขณะอยู่ในรัศมีโซนตกปลา | Gears.rod |
| ยกเลิก / หยุดตกปลา | ปุ่ม X (Control ID 73) | Settings.stopFishingKey |
| ตะขอปลา (โหมดปกติ) | ปุ่ม SPACE หรือคลิกซ้ายเมื่อปลาติดเบ็ด | — |
| ตะขอปลา (โหมดปุ่มสุ่ม) | กดปุ่มที่สุ่มขึ้นมา เช่น W/A/S/D | Settings.minigameKey |
| เปลี่ยนเหยื่อใน UI | ปุ่มลูกศร ← / → | — |
🐌 โหมด AFK Fishing
- โซนที่เปิด
afkEnabled = trueจะอนุญาตให้ผู้เล่นที่ AFK ตกปลาอัตโนมัติได้ Settings.afkSuccessAllTime = true→ ติดตั้งได้ 100% ทุกครั้งในโหมด AFK /false→ สุ่ม 50/50- รอบการหยิบเบ็ดของปลา (วินาที) ปรับได้ที่
Settings.randomFishTimer.afk/.nonAfk
🍞 Auto-Fishing ทุกโซน
หากผู้เล่นถือ Item ใดๆ ที่อยู่ใน Settings.autoItems (ค่าเริ่มต้น: bread, water, sandwich) จะบังคับใช้โหมดตกปลาอัตโนมัติ ในทุกโซน แม้โซนนั้นปิด afkEnabled
💡 ตัวอย่างการปรับแต่ง
lua
-- ให้ Item "coffee" เป็นตัวเปิดโหมดอัตโนมัติ
Settings.autoItems = { 'coffee' }⚙️ Configuration
โครงสร้างไฟล์ Config
| ไฟล์ | หน้าที่ |
|---|---|
Config/settings.config.lua | ตั้งค่าหลักของระบบ (minigame, key, timer, UI) |
Config/gears.config.lua | ลงทะเบียนเบ็ด (rod) และเหยื่อ (bait) |
Config/Zones/*.lua | กำหนดโซนตกปลา, Blip, ช่วงเวลา, รายชื่อปลา |
Config/events.config.lua | ชื่อ Event ของ Framework ที่สคริปต์ฟังอยู่ |
Config/notifications.config.lua | แก้ไขข้อความ/ภาพ/ประเภทของ Notification |
Config/client.functions.lua | Hook ฝั่ง Client (เงื่อนไขเริ่มตกปลา, เอฟเฟกต์) |
Config/server.functions.lua | Hook ฝั่ง Server (จุดใส่รางวัล) |
Config/suspects.config.lua | Hook สำหรับฝังระบบลงโทษผู้ทุจริต |
📄 settings.config.lua
| ตัวแปร | Type | Default | คำอธิบาย |
|---|---|---|---|
Settings.debugMode | boolean | false | เปิดโหมด Debug แสดงเส้น/วงกลมตรวจสอบพื้นที่น้ำ |
Settings.debugRate | boolean | false | แสดง % ความสำเร็จของการสุ่มปลา (Debug) |
Settings.debugTimeFishing | boolean | false | แสดงเวลาตกปลา (Debug) |
Settings.afkSuccessAllTime | boolean | true | true = โหมด AFK ติด 100% / false = สุ่ม 50/50 |
Settings.stopFishingWhenSomeFishFull | boolean | true | หยุดตกปลาอัตโนมัติเมื่อปลาชนิดใดถึง Limit ของ Inventory |
Settings.stopFishingKey | number | 73 | Control ID ปุ่มหยุดตกปลา (73 = X) |
Settings.minigameSpinnerThreshold | number | 4.0 | ความเร็ว/ความยากของ Spinner Minigame — ค่าต่ำสุดที่ใช้ได้คือ 4.0 (ต่ำกว่านี้ระบบจะปรับกลับเป็น 4.0 เสมอ), มากกว่า 6.0 ขึ้นไป = ยากมาก |
Settings.stopWhenNotHaveBait | boolean | true | true = หยุดตกปลาทันทีเมื่อเหยื่อหมด / false = ตาปลาได้แต่ปลาไม่กินเหยื่อ |
Settings.inventoryImagePath | string | 'nui://inventory/web/assets/icons/' | Path รูปไอคอน Item ที่แสดงใน UI |
Settings.fontName | string | 'Kanit' | ชื่อ Font ที่ใช้ (เช่น บน Label ของ Blip) |
Settings.autoItems | string[] | { "bread", "water", "sandwich" } | Item ที่ถือแล้วบังคับโหมดตกปลาอัตโนมัติทุกโซน |
Settings.randomFishTimer.afk.min / .max | number (วินาที) | 1 / 2 | ช่วงเวลารอปลาหยิบเบ็ด (โหมด AFK) |
Settings.randomFishTimer.nonAfk.min / .max | number (วินาที) | 3 / 4 | ช่วงเวลารอปลาหยิบเบ็ด (โหมดปกติ) |
🎯 ตั้งค่า Minigame Key (ปุ่มสุ่ม)
| ตัวแปร | Type | Default | คำอธิบาย |
|---|---|---|---|
Settings.minigameKey.useFeatureKey | boolean | false | true = Minigame สุ่มปุ่ม / false = ใช้ SPACE เท่านั้น |
Settings.minigameKey.keyList | string[] | { "W", "A", "S", "D" } | รายชื่อปุ่มที่สุ่มได้ (เพิ่มปุ่มอื่นได้ตามต้องการ) |
อย่าลืมปิด Debug ก่อนขึ้น Production
ตั้ง debugMode, debugRate, debugTimeFishing เป็น false ทั้งหมดในเซิร์ฟเวอร์จริง เพราะโหมด Debug จะเปิดเผยข้อมูลการสุ่มปลาให้ผู้เล่นเห็น
🎣 gears.config.lua — เบ็ดและเหยื่อ
Schema: Gears.rod
| Field | Type | คำอธิบาย |
|---|---|---|
name | string | ชื่อ Item เบ็ดใน Inventory (ต้องลงทะเบียนเป็น Usable Item — สคริปต์ทำให้อัตโนมัติ) |
model | hash | Prop ของ GTA ที่แสดงตอนกำลังตกปลา เช่n `prop_fishing_rod_01` |
percent | number | % โบนัสโอกาสติดปลาหายาก |
Schema: Gears.bait
| Field | Type | คำอธิบาย |
|---|---|---|
name | string | ชื่อ Item เหยื่อใน Inventory (จะถูกใช้ 1 ชิ้นต่อการรอบหนึ่ง) |
percent | number | % โบนัสโอกาสติดปลาหายาก |
lua
-- ค่าเริ่มต้นในไฟล์
Gears.rod = {
{ name = 'f_rod', model = `prop_fishing_rod_01`, percent = 50 },
{ name = 'a_f_rod', model = `prop_fishing_rod_01`, percent = 50 },
}
Gears.bait = {
{ name = 'mine_orb', percent = 50 },
{ name = 'bait_lv2', percent = 50 },
}การ Stack โบนัส
โบนัสของ เบ็ด + เหยื่อ รวมกันแบบบวก เช่น เบ็ด percent = 20 + เหยื่อ percent = 30 = โบนัสรวม 50% ต่อโอกาสติดปลาหายาก
WARNING
ทุก name ที่เพิ่มเข้ามาต้องมี Item จริงในฐานข้อมูล Inventory และมีไอคอน <name>.png ใน inventoryImagePath ด้วย
🗺️ Zones — โซนตกปลา (Config/Zones/*.lua)
ทุกไฟล์ใน Config/Zones/ จะถูกโหลดอัตโนมัติ เพิ่มโซนใหม่ได้โดยสร้างไฟล์ใหม่แล้วปิดท้ายด้วย table.insert(Zones, fishingZone)
Schema
| Field | Type | คำอธิบาย |
|---|---|---|
name | string | ชื่อโซน (แสดงบน Blip) |
coord | vector3 | พิกัดจุดกึ่งกลางโซน |
distance | number | รัศมีโซน (เมตร) นับจากจุดกึ่งกลาง |
requireRod | string[] | (ไม่บังคับ) ชื่อเบ็ดที่ใช้ได้ในโซนนี้ — ถ้าไม่ใส่ = ใช้ได้ทุกเบ็ด |
afkEnabled | boolean | เปิดให้ตกปลาแบบ AFK ในโซนนี้ |
blip.sprite | number | รูปแบบ Blip (ดูรายการ) |
blip.scale | number | ขนาด Blip |
blip.color | number | สี Blip (ดูรายการ) |
blip.radColor | number | สีวงกลมรอบโซน (0 = ปิด) |
schedule[].time.start / .stop | string 'HH:MM' | ช่วงเวลาที่โซนเปิดให้ตก |
schedule[].fishes[].name | string | ชื่อ Item ปลาที่ตกได้ในช่วงเวลานี้ |
schedule[].fishes[].rate | number | น้ำหนักโอกาสติด (ไม่จำเป็นต้องรวมเท่า 100) |
schedule ใช้ "เวลาจริง" ของเซิร์ฟเวอร์
ช่วงเวลา start / stop อ้างอิง เวลาจริงตามนาฬิกาของเครื่อง Server (sync ทุก ~5 วินาที) ไม่ใช่เวลาในเกม GTA — เช่น 02:32–04:33 คือตีสองสามสิบสองถึงตีสี่สามสิบสามตามเวลาจริง
ตัวอย่างโซนเต็มรูปแบบ
lua
local fishingZone = {
name = 'Pattaya',
coord = vector3(-1453.8812, 2054.9783, 53.6622),
requireRod = { -- เบ็ดที่ใช้ได้ในโซนนี้ (ไม่ใส่ = ทุกเบ็ด)
"a_f_rod"
},
distance = 200, -- รัศมี 200 เมตร
afkEnabled = false,
blip = {
sprite = 68,
scale = 0.8,
color = 77,
radColor = 0
},
schedule = {
{
time = {
start = '00:00',
stop = '23:59'
},
fishes = {
{ name = 'salmon_fish', rate = 25 }, -- ตัวอย่าง: แทนที่ด้วย
{ name = 'blue_fin_fish', rate = 220 }, -- ปลาของเซิร์ฟเวอร์คุณ
}
},
}
}
table.insert(Zones, fishingZone)แก้ไขโซนตัวอย่างก่อนใช้งาน
โซน Pattaya ที่ให้มาเป็น Demo Data — รายการ fishes ยังอ้างถึง mine_orb (ซึ่งเป็น Item เหยื่อ) ซ้ำ 2 รายการ คุณต้องแทนที่เป็นชื่อ Item ปลา ของเซิร์ฟเวอร์คุณเอง และปรับพิกัด/รัศมีให้เหมาะสม
ไฟล์ Config/Zones/special.config.lua เป็นเทมเพลตโซนแบบ Multi-Time Window (ปลาเปลี่ยนตามช่วงเวลา) — คัดลอกมาแก้ไขและเปิดคอมเมนต์ table.insert ได้
🌙 โซนแบบหลายช่วงเวลา (ปลาเปลี่ยนตามเวลา)
lua
schedule = {
{
time = { start = '02:32', stop = '04:33' }, -- เวลาจริง
fishes = {
{ name = 'blue_fish', rate = 25 },
{ name = 'wahoo_fish', rate = 25 },
{ name = 'salmon_fish', rate = 10 },
{ name = 'blue_fin_fish', rate = 10 },
{ name = 'roza', rate = 5 },
}
},
{
time = { start = '18:00', stop = '22:00' },
fishes = {
{ name = 'wahoo_fish', rate = 100 }, -- 100% ในช่วงนี้
}
},
}📡 events.config.lua — Event ของ Framework
สคริปต์ฟัง Event ภายนอก 2 ตัว ซึ่งปรับชื่อได้ตาม Framework ของคุณ:
| ตัวแปร | Default | คำอธิบาย |
|---|---|---|
HandlerEvents.addInventoryItem | 'esx:addInventoryItem' | เมื่อผู้เล่นได้รับ Item (ถ้าเป็นเหยื่อ UI จะรีเฟรชรายการเหยื่อให้อัตโนมัติ) |
HandlerEvents.onDead | 'esx:onPlayerDeath' | ยกเลิกการตกปลาทันทีเมื่อผู้เล่นตาย |
TIP
หากคุณใช้ ESX Legacy มาตรฐาน ไม่ต้องแก้อะไรในไฟล์นี้ — แก้เฉพาะเมื่อปรับสคริปต์ไปใช้กับ Framework อื่น
🔔 notifications.config.lua — ข้อความแจ้งเตือน
Notification ทั้งหมดส่งผ่าน resource AFU.Notify — แก้ข้อความ/ภาพ/ประเภทได้ที่ฟังก์ชันในไฟล์นี้:
| ฟังก์ชัน | สถานการณ์ |
|---|---|
Notify.RequireRod(...) | ใช้เบ็ดที่โซนนี้ไม่อนุญาต |
Notify.stopError() | มีบางอย่างขัดขวางการตกปลา |
Notify.noBait() | เหยื่อหมด |
Notify.tooFarFromWater() | อยู่ห่างจากน้ำเกินไป |
Notify.stopFishing() | หยุดตกปลาสำเร็จ |
Notify.dead() | ตกปลาถูกยกเลิกเพราะผู้เล่นเสียชีวิต |
Notify.timesUp() | หมดเวลาโซนตกปลา |
Notify.newFishesComes() | รายชื่อปลาในโซนเปลี่ยนตามช่วงเวลา |
Notify.fullInventory() | Inventory เต็ม รับ Item ไม่ได้ |
ตัวเลือกต่อการแจ้งเตือนแต่ละครั้ง: title, description, image (ไฟล์ .png), type ('success' / 'warning' / 'alert'), position, time (ms, default 5000)
WARNING
ข้อความเริ่มต้นทั้งหมดเป็นภาษาไทย — แก้ไขได้อิสระ แต่ควรคง pcall ที่ครอบการเรียก AFU.Notify เอาไว้ เพื่อไม่ให้สคริปต์ crash หากยังไม่ได้ติดตั้ง AFU.Notify
🧩 Hooks ที่ผู้ใช้แก้ไขได้
Config/server.functions.lua (ฝั่ง Server — จุดใส่รางวัล)
| Hook | Parameters | คำอธิบาย |
|---|---|---|
Functions.caughtFish(xPlayer, zoneName, usingRodName, usingBaitName, fishName) | ESX Player Object, ชื่อโซน, เบ็ด, เหยื่อ, ชื่อปลา | Hook หลัก — ถูกเรียกเมื่อผู้เล่นติดปลา ปลาจะเข้า Inventory ให้อัตโนมัติแล้ว ใช้ Hook นี้เพิ่มรางวัลอื่น เช่น เงิน, XP, Quest Progress |
Functions.failedCatch(usingBaitName) | ชื่อเหยื่อที่ใช้ | เรียกเมื่อผู้เล่นพลาดการตะขอ |
Functions.canCarryItem(xPlayer, name, total) | Player Object, ชื่อ Item, จำนวน | เช็คว่ารับ Item เพิ่มได้ไหม — ค่าเริ่มต้นใช้ระบบ Limit ของ ESX (มีตัวอย่างระบบ Weight ให้เปิดใช้ในคอมเมนต์) |
💡 ตัวอย่าง: ให้เงินรางวัลเมื่อติดปลา
lua
-- Config/server.functions.lua
Functions.caughtFish = function(xPlayer, zoneName, usingRodName, usingBaitName, fishName)
-- ปลาเข้า inventory ให้อัตโนมัติแล้ว — เพิ่มรางวัลอื่นตรงนี้
if zoneName == 'Pattaya' then
xPlayer.addMoney(50) -- โบนัส $50 เฉพาะโซน Pattaya
end
endConfig/client.functions.lua (ฝั่ง Client)
| Hook | คำอธิบาย |
|---|---|
Functions.willStartFishing(zoneName) | เงื่อนไขเริ่มตกปลา — return false เพื่อบล็อก (เช่น เช็ค Job/Item/Level) |
Functions.startedFishing(zoneName) | เรียกเมื่อเริ่มตกปลา (ว่างไว้ให้เติม Logic เอง) |
Functions.stopFishing(zoneName) | เรียกเมื่อหยุดตกปลา (ว่างไว้ให้เติม Logic เอง) |
Functions.fishAppear(position) | เรียกเมื่อปลาหยิบเบ็ด (default: เล่นเสียง pop.mp3 ผ่าน AFU.SoundInteract) |
Functions.caughtFish() / Functions.failedCatch() | จุดใส่ เอฟเฟกต์/เสียงฝั่ง Client เท่านั้น |
ห้ามให้รางวัลใน client.functions.lua!
caughtFish() / failedCatch() ในไฟล์ Client มีไว้สำหรับเอฟเฟกต์และเสียงเท่านั้น การให้ไอเท็ม/เงินที่นี่คือ ช่องโหว่ถูก Exploit — ให้รางวัลที่ server.functions.lua เท่านั้น
💡 ตัวอย่าง: จำกัดโซนตามอาชีพ
lua
-- Config/client.functions.lua
Functions.willStartFishing = function(zoneName)
local ESX = Functions.loadFramework()
local playerData = ESX.GetPlayerData()
if zoneName == 'Pattaya' and playerData.job.name ~= 'fisherman' then
return false -- บล็อกคนที่ไม่ใช่ fisherman
end
return true
endConfig/suspects.config.lua — Hook ลงโทษผู้ทุจริต
สคริปต์มีระบบตรวจจับพฤติกรรมผิดปกติฝั่ง Server และเปิด Hook ให้เจ้าของเซิร์ฟเวอร์เลือกบทลงโทษเอง (ค่าเริ่มต้นว่างไว้):
| Hook | เหตุการณ์ |
|---|---|
Suspects.obviousCatchFish(playerId, xPlayer) | ตรวจพบการตกปลาผิดปกติ |
Suspects.invalidData(playerId, xPlayer) | ส่งข้อมูลไม่ถูกต้อง |
Suspects.spamEvent(playerId, xPlayer) | ยิง Event ถี่ผิดปกติ |
Suspects.speedCheating(playerId, xPlayer) | ตรวจพบ Speed Hack |
INFO
คุณสามารถเติม Logic เอง เช่น DropPlayer, TriggerEvent('ban', ...) ตามระบบ Ban ของเซิร์ฟเวอร์คุณ
🐟 Items Reference
Item ทั้งหมดที่สคริปต์อ้างอิง — ต้องลงทะเบียนใน Inventory + เตรียมไอคอน:
| ประเภท | Spawn Name | ที่มา |
|---|---|---|
| 🔫 เบ็ด (Usable) | f_rod | gears.config.lua |
| 🔫 เบ็ด (Usable) | a_f_rod | gears.config.lua |
| 🪱 เหยื่อ | mine_orb | gears.config.lua |
| 🪱 เหยื่อ | bait_lv2 | gears.config.lua |
| 🍞 Trigger Auto-Fish | bread, water, sandwich | settings.config.lua |
| 🐟 ปลา (Demo) | mine_orb | โซน Pattaya (ควรแทนที่) |
| 🐟 ปลา (Template) | blue_fish, wahoo_fish, kahoo_fish, salmon_fish, blue_fin_fish, roza | special.config.lua |
::: note
- เบ็ดทุกตัวใน
Gears.rodจะถูกลงทะเบียนเป็น Usable Item อัตโนมัติ — ผู้เล่นใช้เบ็ดจาก Inventory เพื่อเริ่มตกปลา - ปลาที่ตกได้จะถูกจำกัดจำนวนตามระบบ Limit ของ Item ใน ESX (
stopFishingWhenSomeFishFull) - ไม่มีการเช็ค Job/Gang ในตัวสคริปต์ — ใช้ Hook
willStartFishingหากต้องการจำกัดอาชีพ :::
❓ Troubleshooting
🔴 Resource ไม่ทำงาน / ค้างตั้งแต่เปิดเซิร์ฟเวอร์
- ตรวจสอบว่า
set afu_license "TOKEN"อยู่ในserver.cfgก่อนบรรทัดensure AFU.Fishingและ Token ยังไม่หมดอายุ - ตรวจสอบว่า
oxmysqlและes_extendedstart ก่อน AFU.Fishing - ตรวจสอบว่า ESX ทำงานปกติ (สคริปต์รอ ESX ตลอดหากหาไม่เจอ)
🔴 กดใช้เบ็ดแล้วไม่มีอะไรเกิดขึ้น
- ผู้เล่นต้องอยู่ใน รัศมีโซนตกปลา และอยู่ใกล้น้ำ
- โซนอาจกำหนด
requireRod— เช่น โซน Demo Pattaya รับเฉพาะa_f_rod(จะมี Notification แจ้งเตือน) - ตรวจสอบว่าชื่อเบ็ดใน
Gears.rodตรงกับชื่อ Item ในฐานข้อมูลจริง (case-sensitive)
🔴 ปลาไม่ยอมกินเหยื่อ / ไม่เริ่มรอบใหม่
- เหยื่อหมด — ตรวจสอบ Inventory (หรือเปลี่ยน
stopWhenNotHaveBait = falseเพื่อโหมด Realism) - อยู่นอกช่วงเวลา
scheduleของโซน — จำไว้ว่า schedule ใช้ เวลาจริงของเซิร์ฟเวอร์ - Inventory เต็ม หรือปลาบางชนิดถึง Limit แล้ว (
stopFishingWhenSomeFishFull)
🔴 Minigame ยาก/ง่ายเกินไป
Settings.minigameSpinnerThreshold— ค่ามากขึ้น = ยากขึ้น (ค่าต่ำสุด 4.0, >6.0 = ยากมาก)- ต้องการปุ่มสุ่ม:
Settings.minigameKey.useFeatureKey = trueและแก้keyList
🔴 รูปไอคอนใน UI ไม่แสดง
- แก้
Settings.inventoryImagePathให้ตรงกับโฟลเดอร์ไอคอนของ Inventory ที่ใช้ - ตรวจสอบว่ามีไฟล์
<item_name>.pngครบทุก Item (รวมชื่อเบ็ด เช่นf_rod.png)
🔴 ไม่มีเสียงปลาหยิบเบ็ด / ไม่มี Notification
- ติดตั้ง
AFU.SoundInteract(เสียง) และAFU.Notify(แจ้งเตือน) แล้ว ensure ก่อน AFU.Fishing - สคริปต์จะยังทำงานได้แม้ไม่มีทั้งสองตัว (มี guard ไว้) แต่ประสบการณ์จะไม่ครบ
🔴 เห็นเส้น/วงกลมแปลกๆ บนจอ
- เปิด
Settings.debugMode = trueค้างไว้ — ปิดเป็นfalseก่อนขึ้น Production
🟡 ปรับ Framework เป็น QBCore ได้ไหม?
สคริปต์ถูกออกแบบมาสำหรับ ESX โดยตรง การพอร์ตต้องแก้จุดเชื่อมต่อเหล่านี้เอง:
Functions.loadFramework()(client + server) — เปลี่ยนเป็น QBCore ObjectFunctions.getInventory()/getInventoryItem()/getItemLabel()— โครงสร้าง Inventory ต่างกันFunctions.canCarryItem()— เปลี่ยนเป็น weight-based ของ QBCoreHandlerEvents.addInventoryItem/onDead— เปลี่ยนเป็นชื่อ Event ของ QBCore