Elexonic
Well-Known Member
- Joined
- Jun 18, 2008
- Messages
- 1,920
- Reaction score
- 59
Last Page
anyone know which one I put script is better?
What script is beter?
Or
anyone know which one I put script is better?
What script is beter?
Code:
function customCallbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks, shopWindow)
local shopItem, npcHandler = nil, NpcHandler
for _, item in ipairs(shopWindow) do
if(item.id == itemid) then
if item.subType then
if(item.subType == subType) then
shopItem = item
break
end
else
shopItem = item
break
end
end
end
if(shopItem == nil) then
error("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.buy == -1) then
error("[ShopModule.onSell]", "Attempt to purchase an item which is only sellable")
return false
end
local backpack, totalCost = 1988, amount * shopItem.buy
if(inBackpacks) then
totalCost = isItemStackable(itemid) == TRUE and totalCost + 20 or totalCost + (math.max(1, math.floor(amount / getContainerCapById(backpack))) * 20)
end
if(getPlayerMoney(cid) < totalCost) then
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_NEEDMONEY), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
return false
end
local subType = shopItem.subType or 1
local a, b = doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
if(a < amount) then
local msgId = MESSAGE_NEEDMORESPACE
if(a == 0) then
msgId = MESSAGE_NEEDSPACE
end
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(msgId), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name, [TAG_ITEMCOUNT] = a}))
if(a > 0) then
doPlayerRemoveMoney(cid, ((a * shopItem.buy) + (b * 20)))
return true
end
return false
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_BOUGHT), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
doPlayerRemoveMoney(cid, totalCost)
return true
end
function customCallbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks)
local shopItem, npcHandler = nil, NpcHandler
for _, item in ipairs(self.npcHandler.shopItems) do
if(item.id == itemid and item.subType == subType) then
shopItem = item
break
end
end
if(shopItem == nil) then
error("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.sell == -1) then
error("[ShopModule.onSell]", "Attempt to sell an item which is only buyable")
return false
end
local parseInfo = {
[TAG_PLAYERNAME] = getPlayerName(cid),
[TAG_ITEMCOUNT] = amount,
[TAG_TOTALCOST] = amount * shopItem.sell,
[TAG_ITEMNAME] = shopItem.name
}
if(subType < 1) then
subType = -1
end
if(doPlayerRemoveItem(cid, itemid, amount, subType) == TRUE) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, self.npcHandler:parseMessage(self.npcHandler:getMessage(MESSAGE_SOLD), parseInfo))
doPlayerAddMoney(cid, amount * shopItem.sell)
if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
self.npcHandler.talkStart[cid] = os.time()
else
self.npcHandler.talkStart = os.time()
end
return true
end
doPlayerSendCancel(cid, self.npcHandler:parseMessage(self.npcHandler:getMessage(MESSAGE_NEEDITEM), parseInfo))
if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then
self.npcHandler.talkStart[cid] = os.time()
else
self.npcHandler.talkStart = os.time()
end
return false
end
Or
Code:
function customCallbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks, shopWindow)
local shopItem, npcHandler = nil, NpcHandler
for _, item in ipairs(shopWindow) do
if not item.subType then
item.subType = (isItemFluidContainer(item.id) == TRUE or isItemStackable(item.id) == TRUE) and 0 or 1
end
if(item.id == itemid and (item.subType == subType)) then
shopItem = item
break
end
end
if(shopItem == nil) then
error("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.buy < 0) then
error("[ShopModule.onSell]", "Attempt to purchase an item which is only sellable")
return false
end
local backpack, totalCost = 1988, amount * shopItem.buy
if(inBackpacks) then
totalCost = isItemStackable(itemid) == TRUE and totalCost + 20 or totalCost + (math.max(1, math.floor(amount / getContainerCapById(backpack))) * 20)
end
if(getPlayerMoney(cid) < totalCost) then
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_NEEDMONEY), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
return false
end
local subType = shopItem.subType or isItemFluidContainer(itemid) == TRUE and 0 or 1
local a, b = doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
if(a < amount) then
local msgId = MESSAGE_NEEDMORESPACE
if(a == 0) then
msgId = MESSAGE_NEEDSPACE
end
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(msgId), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name, [TAG_ITEMCOUNT] = a}))
if(a > 0) then
doPlayerRemoveMoney(cid, ((a * shopItem.buy) + (b * 20)))
return true
end
return false
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_BOUGHT), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
doPlayerRemoveMoney(cid, totalCost)
return true
end
function customCallbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks, shopWindow)
local shopItem, npcHandler, subType = nil, NpcHandler, subType or 0
for _, item in ipairs(shopWindow) do
item.subType = not item.subType and 0 or item.subType
if(item.id == itemid and (isItemFluidContainer(itemid) == FALSE or isItemFluidContainer(itemid) == TRUE and item.subType == subType)) then
shopItem = item
break
end
end
if(shopItem == nil) then
error("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.sell < 0) then
error("[ShopModule.onSell]", "Attempt to sell an item which is only buyable")
return false
end
if(doPlayerRemoveItem(cid, itemid, amount, isItemFluidContainer(itemid) == TRUE and subType or isItemStackable(itemid) == TRUE and amount or 1) == TRUE) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_SOLD), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * shopItem.sell, [TAG_ITEMNAME] = shopItem.name}))
doPlayerAddMoney(cid, amount * shopItem.sell)
return true
end
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_NEEDITEM), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * shopItem.sell, [TAG_ITEMNAME] = shopItem.name}))
return false
end
Last edited: