local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:OnCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:OnCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:OnCreatureSay(cid, type, msg) end function onThink() npcHandler:OnThink() end function onPlayerEndTrade(cid) npcHandler:OnPlayerEndTrade(cid) end function onPlayerCloseChannel(cid) npcHandler:OnPlayerCloseChannel(cid) end local function delayMoneyRemoval(delayRemovedItem) delayRemovedItem:remove(delayRemovedItem:getCount()) end local function placeMoney(amount, table_middle_pos) local remain = amount local crystal_coins = 0 local platinum_coins = 0 if (math.floor(amount / 10000) >= 1) then crystal_coins = math.floor(amount / 10000) remain = remain - crystal_coins * 10000 end if ((remain / 100) >= 1) then platinum_coins = remain / 100 end addEvent(doCreateItem, 550, 2152, platinum_coins, table_middle_pos) addEvent(doCreateItem, 600, 2160, crystal_coins, table_middle_pos) end local function rollDice(roll, cc_count, pc_count, table_left_pos, table_middle_pos, npc) local dice_ids = {5792, 5793, 5794, 5795, 5796, 5797} local random_rollval = math.random(1,6) local total_g = (10000 * cc_count) + (100 * pc_count) local prize_percent = 0.8 -- 80% if ((total_g) <= 300000 and (total_g) >= 5000) then table_left_pos:sendMagicEffect(CONST_ME_CRAPS) for _, itemId in pairs(dice_ids) do if(getTileItemById(table_left_pos, itemId).uid > 0) then doTransformItem(getTileItemById(table_left_pos, itemId).uid, dice_ids[random_rollval]) end end if (roll == 1 and random_rollval <= 3) then placeMoney(total_g + (total_g * prize_percent), table_middle_pos) addEvent(Position.sendMagicEffect, 400, table_left_pos, CONST_ME_SOUND_GREEN) addEvent(Position.sendMagicEffect, 700, table_left_pos, CONST_ME_SOUND_GREEN) elseif (roll == 2 and random_rollval >= 4) then placeMoney(total_g + (total_g * prize_percent), table_middle_pos) addEvent(Position.sendMagicEffect, 400, table_left_pos, CONST_ME_SOUND_GREEN) addEvent(Position.sendMagicEffect, 700, table_left_pos, CONST_ME_SOUND_GREEN) else addEvent(Position.sendMagicEffect, 400, table_left_pos, CONST_ME_BLOCKHIT) addEvent(Position.sendMagicEffect, 700, table_left_pos, CONST_ME_BLOCKHIT) end npc:say(string.format("%s rolled a %d.", npc:getName(), random_rollval), TALKTYPE_ORANGE_1, false, 0, npc:getPosition()) else addEvent(doCreateItem, 100, 2160, cc_count, table_middle_pos) addEvent(doCreateItem, 150, 2152, pc_count, table_middle_pos) npc:say("The minimum wager is 5K and the maximum wager is 300K.", TALKTYPE_SAY, false, 0, npc:getPosition()) end return true end function creatureSayCallback(cid, type, msg) -- NPC userdata instance local npc = Npc(getNpcCid()) -- Participating player userdata instance local position = npc:getPosition() + {x = 2, y = 0, z = 0} position.stackpos = STACKPOS_TOP_CREATURE local player_uid = getThingfromPos(position).uid -- Game table position userdata instances local table_left_pos = Position(1110, 994, 8) local table_middle_pos = Position(1111, 994, 8) -- Search for coins on the left and middle tables and create item userdata instances local table_left_cc_uid = getTileItemById(table_left_pos, 2160).uid local table_middle_cc_uid = getTileItemById(table_middle_pos, 2160).uid local table_left_pc_uid = getTileItemById(table_left_pos, 2152).uid local table_middle_pc_uid = getTileItemById(table_middle_pos, 2152).uid -- Other variables local cc_count = 0 local pc_count = 0 local ROLL, LOW, HIGH = 0, 1, 2 if (player_uid ~= 0) then player = Player(player_uid) if ((msgcontains(string.lower(msg), 'high') and (player:isPlayer() and player:getId() == cid)) then ROLL = HIGH elseif ((msgcontains(string.lower(msg), 'low') and (player:isPlayer() and player:getId() == cid)) then ROLL = LOW else return false end if (table_middle_cc_uid ~= 0) then table_middle_cc = Item(table_middle_cc_uid) cc_count = table_middle_cc:getCount() table_middle_cc:moveTo(table_left_pos) addEvent(delayMoneyRemoval, 300, table_middle_cc) end if (table_middle_pc_uid ~= 0) then table_middle_pc = Item(table_middle_pc_uid) pc_count = table_middle_pc:getCount() table_middle_pc:moveTo(table_left_pos) addEvent(delayMoneyRemoval, 300, table_middle_pc) end addEvent(rollDice, 500, ROLL, cc_count, pc_count, table_left_pos, table_middle_pos, npc) else return false end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)