Files
chuanqi-server-instance/LogicServer/data/functions/ItemEvent/UseNormalItem.txt
2024-12-16 20:45:03 +08:00

200 lines
6.7 KiB
Plaintext
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--#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)