200 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| --#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) |