vexler222
Active Member
- Joined
- Apr 22, 2012
- Messages
- 714
- Solutions
- 15
- Reaction score
- 46
how to block npc if he is behinde the wall? when i wan't play with green npc, red talking to me too
npc casino script:
npc casino script:
Code:
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
local config = {
bonusPercent = 1.8,
minimumBet = 10000,
maximumBet = 500000
}
local storeMoneyAmount = 0 -- Do not touch [We store the amount cash which got betted here]
local ITEM_BLOCKING = 8046
local function getMoneyAmount(position)
local moneyAmount = 0
for _, item in ipairs(Tile(position):getItems()) do
local itemId = item:getId()
if itemId == ITEM_GOLD_COIN then
moneyAmount = moneyAmount + item.type
elseif itemId == ITEM_PLATINUM_COIN then
moneyAmount = moneyAmount + item.type * 100
elseif itemId == ITEM_CRYSTAL_COIN then
moneyAmount = moneyAmount + item.type * 10000
end
end
return moneyAmount
end
local function handleMoney(cid, position, bonus)
local npc = Npc(cid)
if not npc then
return
end
-- Lets remove the cash which was betted
for _, item in ipairs(Tile(position):getItems()) do
if isInArray({ITEM_GOLD_COIN, ITEM_PLATINUM_COIN, ITEM_CRYSTAL_COIN, ITEM_BLOCKING}, item:getId()) then
item:remove()
end
end
-- We lost, no need to continue
if bonus == 0 then
npc:say(string.format("You lose: %d crystal coins! :(", (storeMoneyAmount)/10000), TALKTYPE_MONSTER_SAY)
position:sendMagicEffect(CONST_ME_POFF)
return
end
-- Cash calculator
local goldCoinAmount = storeMoneyAmount * bonus
local crystalCoinAmount = math.floor(goldCoinAmount / 10000)
goldCoinAmount = goldCoinAmount - crystalCoinAmount * 10000
local platinumCoinAmount = math.floor(goldCoinAmount / 100)
goldCoinAmount = goldCoinAmount - platinumCoinAmount * 100
if goldCoinAmount ~= 0 then
Game.createItem(ITEM_GOLD_COIN, goldCoinAmount, position)
end
if platinumCoinAmount ~= 0 then
Game.createItem(ITEM_PLATINUM_COIN, platinumCoinAmount, position)
end
if crystalCoinAmount ~= 0 then
Game.createItem(ITEM_CRYSTAL_COIN, crystalCoinAmount, position)
end
position:sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE))
npc:say(string.format("You Win: %d crystal coins! :)", (storeMoneyAmount * bonus)/10000), TALKTYPE_MONSTER_SAY)
end
local function startRollDice(cid, position, number)
for i = 5792, 5797 do
local dice = Tile(position):getItemById(i)
if dice then
dice:transform(5791 + number)
break
end
end
local npc = Npc(cid)
if npc then
npc:say(string.format("%s rolled a %d", npc:getName(), number), TALKTYPE_MONSTER_SAY)
end
end
local function executeEvent(cid, dicePosition, number, moneyPosition, bonus)
local npc = Npc(cid)
if not npc then
return
end
if getMoneyAmount(moneyPosition) ~= storeMoneyAmount then
npc:say("Where is the money?!", TALKTYPE_MONSTER_SAY)
return
end
-- Roll Dice
addEvent(startRollDice, 400, cid, dicePosition, number)
dicePosition:sendMagicEffect(CONST_ME_CRAPS)
-- Handle Money
addEvent(handleMoney, 600, cid, moneyPosition, bonus)
end
local function creatureSayCallback(cid, type, msg)
if not isInArray({"high", "low", "l", "h"}, msg) then -- Ignore other replies
return false
end
-- Npc Variables
local npc = Npc()
local npcPosition = npc:getPosition()
-- Check if player stand in position
local playerPosition = Position(npcPosition.x + 2, npcPosition.y, npcPosition.z)
local topCreature = Tile(playerPosition):getTopCreature()
if not topCreature then
playerPosition:sendMagicEffect(CONST_ME_TUTORIALARROW)
playerPosition:sendMagicEffect(CONST_ME_TUTORIALSQUARE)
return false
end
-- Make sure also the player who stand there, is the one who is betting. To keep out people from disturbing
if topCreature:getId() ~= cid then
return false
end
-- High or Low numbers
local rollType = 0
if msgcontains(msg, "low") then
rollType = 1
elseif msgcontains(msg, "high") then
rollType = 2
elseif msgcontains(msg, "h") then
rollType = 2
elseif msgcontains(msg, "l") then
rollType = 1
else
return false
end
-- Check money Got betted
local moneyPosition = Position(npcPosition.x + 1, npcPosition.y - 1, npcPosition.z)
storeMoneyAmount = getMoneyAmount(moneyPosition)
if storeMoneyAmount < config.minimumBet or storeMoneyAmount > config.maximumBet then
npc:say(string.format("Min: 1cc / Max: 50cc", config.minimumBet/10000, config.maximumBet/10000), TALKTYPE_MONSTER_SAY)
return false
end
-- Money is betted, lets block them from getting moved // This is one way, else we can set actionid, on the betted cash.
Game.createItem(ITEM_BLOCKING, 1, moneyPosition)
-- Roll Number
local rollNumber = math.random(6)
-- Win or Lose
local bonus = 0
if rollType == 1 and isInArray({1, 2, 3}, rollNumber) then
bonus = config.bonusPercent
elseif rollType == 2 and isInArray({4, 5, 6}, rollNumber) then
bonus = config.bonusPercent
end
-- Money handle and roll dice
addEvent(executeEvent, 100, npc:getId(), Position(npcPosition.x, npcPosition.y - 1, npcPosition.z), rollNumber, moneyPosition, bonus)
return true
end
function onThink()
-- Anti trash
local npcPosition = Npc():getPosition()
local moneyPosition = Position(npcPosition.x + 1, npcPosition.y - 1, npcPosition.z)
for _, item in ipairs(Tile(moneyPosition):getItems()) do
local itemId = item:getId()
if not isInArray({ITEM_GOLD_COIN, ITEM_PLATINUM_COIN, ITEM_CRYSTAL_COIN, ITEM_BLOCKING}, itemId) and ItemType(itemId):isMovable() then
item:remove()
end
end
local dicePosition = Position(npcPosition.x, npcPosition.y - 1, npcPosition.z)
for _, item in ipairs(Tile(dicePosition):getItems()) do
local itemId = item:getId()
if not isInArray({5792, 5793, 5794, 5795, 5796, 5797}, itemId) and ItemType(itemId):isMovable() then
item:remove()
end
end
npcHandler:onThink()
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)