Files
chuanqi-server-instance/LogicServer/data/functions/ItemEvent/UseNormalItem.txt

200 lines
6.7 KiB
Plaintext
Raw Normal View History

2024-12-16 13:51:31 +08:00
--#include "data\config\item\NormalItem.txt" once
--#include "data\functions\ItemEvent\ItemUseCount.txt" once
--回城券,随机传送卷
function BackToCityFunc(sysarg,count,itemidx,itemPtr,ItemTable) --count 无效,一次只能用一个
if not Actor.canUseItem(sysarg,itemidx) then
Actor.sendTipmsg( sysarg, Lang.Script.UserItem001,ttTipmsgWindow )
return false
end
--红名
if Actor.GetNameColorData(sysarg) == 3 then
Actor.sendTipmsg(sysarg,Lang.Script.UserItem002,ttFlyTip)
return false
end
--其他限制尚未添加...
if ItemTable.usedura == false then
Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem001, 166)
else
local duaMax = Item.getItemProperty( sysarg, itemPtr, Item.ipItemDuaMax, 0)
local dua = Item.getItemProperty( sysarg, itemPtr, Item.ipItemDua, 0 )
local duaRemain = duaMax - dua
if duaRemain < 1000 then
return false
end
dua = dua + 1000
Item.setItemProperty( sysarg, itemPtr, Item.ipItemDua, dua)
if dua == duaMax then
Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem001, 166)
end
end
local sendType = ItemTable.type or 2
if sendType == 1 then
System.telportScene(sysarg, ItemTable.SceneId, ItemTable.x, ItemTable.y)
elseif sendType == 2 then
System.telportRandPos(sysarg)
elseif sendType == 3 then
Actor.returnCity(sysarg)
end
return true
end
--经验丹
function UseExpItemFunc(sysarg,count,itemidx,itemPtr,ItemTable) --不能堆叠,一次只能吃一个
local idx1 = 0
local idx2 = 0
local level = Actor.getIntProperty(sysarg, PROP_CREATURE_LEVEL)
for k, v in ipairs(ExpItem) do
if v.item_id == itemidx then
idx1 = k
for x,y in ipairs(v.level) do
if level >= y.min and level <= y.max then
idx2 = x
break
end
end
break
end
end
if idx1 == 0 or idx2 == 0 then
return false
end
local upLevel = ExpItem[idx1].level[idx2].level
local upExp = ExpItem[idx1].level[idx2].exp
--转数判断
local ReachLevel = Actor.AddExpReachLevel(sysarg,upExp)
local circle = Actor.getIntProperty(sysarg, PROP_ACTOR_CIRCLE)
local circleMaxLevel = System.getPlayerMaxLevel(circle)
if upExp > 0 and ReachLevel > circleMaxLevel then
local str = string.format(Lang.Script.ExpItem001,circleMaxLevel)
Actor.sendTipmsg(sysarg,str,ttFlyTip)
return
elseif upExp > 0 and level == circleMaxLevel then
local levelupExp = Actor.GetLevelExp(sysarg,level+1)
local actorExp = Actor.getUInt64Property(sysarg, PROP_ACTOR_EXP)
if actorExp + upExp > levelupExp then
local str = string.format(Lang.Script.ExpItem001,circleMaxLevel)
Actor.sendTipmsg(sysarg,str,ttFlyTip)
return
end
end
--判断是否到本转最高级
if level == circleMaxLevel and upLevel > 0 then
local str = string.format(Lang.Script.ExpItem001,circleMaxLevel)
Actor.sendTipmsg(sysarg,str,ttFlyTip)
return
end
local delCount = Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem002, 183)
if delCount < 1 then
return false
end
if upLevel > 0 then
Actor.giveAward(sysarg, qatUpgrade,0,upLevel,0,0,0,0,183, Lang.Log.UserItem002)
end
if upExp > 0 then
Actor.giveAward(sysarg, qatExp,0,upExp,0,0,0,0,183, Lang.Log.UserItem002)
end
return true
end
--战神油
function repairAllEquipItemFunc(sysarg,count,itemidx,itemPtr,ItemTable) -- count 无效,不能批量使用
local repairTabEquip = {}
local repairTabMaxDua = {}
local equipCount = Item.getEquipCount( sysarg ) --玩家穿着装备数
for i = 1, equipCount do
local equipPtr = Item.getEquipBySortID( sysarg, i )
if equipPtr then
local curDua = Item.getItemProperty( sysarg, equipPtr, Item.ipItemDua, 0 )
local maxDua = Item.getItemProperty( sysarg, equipPtr, Item.ipItemDuaMax, 0 )
if curDua < maxDua then
table.insert(repairTabEquip, equipPtr)
table.insert(repairTabMaxDua, maxDua)
end
end
end
local msgId = Lang.Script.zf045
if #repairTabEquip > 0 then
if ItemTable.needDelete then
if Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.l00111, 190) <= 0 then
return false
end
end
for idx, equipPtr in ipairs(repairTabEquip) do
Item.setItemProperty( sysarg, equipPtr, Item.ipItemDua, repairTabMaxDua[idx] )
end
msgId = Lang.Script.zf044
end
Actor.sendTipmsg(sysarg, msgId, ttChatWindow)
return true
end
--祝福油
function useBlessOilFunc(sysarg,count,itemidx,itemPtr,ItemTable) -- count无效不能批量使用祝福油
local weaponPtr = Item.getEquipByType(sysarg, Item.itWeapon)
if not weaponPtr then
Actor.sendTipmsg(sysarg, Lang.Script.itemFunctionTips000001, ttFlyTip)
return false
end
local luckVal = Item.getItemProperty(sysarg, weaponPtr, Item.ipItemLuck, 0)
local msgId = string.format(Lang.Script.itemFunctionTips000002,luckVal)
if luckVal < 0 then
luckVal = luckVal + ItemTable.blessVal
if luckVal >= 0 then
msgId = string.format(Lang.Script.itemFunctionTips000003,luckVal)
else
msgId = string.format(Lang.Script.itemFunctionTips000004,-luckVal)
end
else
if ItemTable.maxLv > 0 and luckVal >= ItemTable.maxLv then
Actor.sendTipmsg(sysarg, string.format(Lang.Script.itemFunctionTips000007,ItemTable.maxLv), ttChatWindow + ttFlyTip)
return
end
local succRates = ItemTable.succRate[luckVal + ItemTable.blessVal] or ItemTable.succRate[#ItemTable.succRate]
local noChgRates = ItemTable.noChgRate[luckVal + ItemTable.blessVal] or ItemTable.noChgRate[#ItemTable.failRate]
local randVal = math.random(10000)
if randVal <= succRates then --成功
luckVal = luckVal + ItemTable.blessVal
msgId = string.format(Lang.Script.itemFunctionTips000003,luckVal)
elseif randVal > (succRates + noChgRates) then--失败
luckVal = luckVal - ItemTable.blessVal
if luckVal >= 0 then
msgId = string.format(Lang.Script.itemFunctionTips000005,luckVal)
else
msgId = string.format(Lang.Script.itemFunctionTips000006,-luckVal)
end
end
end
if Actor.removeItemByPtr(sysarg, itemPtr, 1, true, "use Blessing oil", 3) > 0 then
Item.setItemProperty(sysarg, weaponPtr, Item.ipItemLuck, luckVal )
Actor.sendTipmsg(sysarg, msgId, ttChatWindow + ttFlyTip)
end
return true
end
--初始化物品使用时回调
function UseNormalItemFunc_Init(sysarg)
--回城卷
for k, v in ipairs(BackToCity) do
GlobalItemFn[v.item_id] = {func = BackToCityFunc,params = v}
end
--经验丹
for k, v in ipairs(ExpItem) do
GlobalItemFn[v.item_id] = {func = UseExpItemFunc,params = v}
end
--战神油
for i = 1,table.getn(RepairItems) do
local x = RepairItems[i]
GlobalItemFn[x.item_id] = { func = repairAllEquipItemFunc, params = x }
end
--祝福油
for idx, x in ipairs(BlessOil) do
GlobalItemFn[x.item_id] = {func = useBlessOilFunc,params = x}
end
end
table.insert(InitFnTable, UseNormalItemFunc_Init)