What's new

Problem z Questami <Rozwiazany>

McFreeq

Advanced User
Joined
Nov 15, 2009
Messages
381
Reaction score
40
Siema. Pewnie wielu z was ma problem z questami w Tfs'ie 0.3.6 Crying Damson.
Teraz znalaz?em rozwi?zanie i daje wam skrypt jak robi? questy szybko w map edytorze;]
Ok zaczynamy.
1. Skrypt
Code:
local specialQuests = {
	[2001] = 30015 --Annihilator
}
local questsExperience = {
	[30015] = 10000
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges)) then
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
		return true
	end
	local storage = specialQuests[item.actionid]
	if(not storage) then
		storage = item.uid
		if(storage > 65535) then
			return false
		end
	end
	if(getPlayerStorageValue(cid, storage) > 0) then
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
		return true
	end
	local items = {}
	local reward = 0
	local size = isContainer(item.uid) and getContainerSize(item.uid) or 0
	if(size == 0) then
		reward = doCopyItem(item, false)
	else
		for i = 0, size do
			local tmp = getContainerItem(item.uid, i)
			if(tmp.itemid > 0) then
				table.insert(items, tmp)
			end
		end
	end
	size = table.maxn(items)
	if(size == 1) then
		reward = doCopyItem(items[1], true)
	end
	local result = ""
	if(reward ~= 0) then
		local ret = getItemDescriptions(reward.uid)
		if(reward.type > 0 and isItemRune(reward.itemid)) then
			result = reward.type .. " charges " .. ret.name
		elseif(reward.type > 0 and isItemStackable(reward.itemid)) then
			result = reward.type .. " " .. ret.plural
		else
			result = ret.article .. " " .. ret.name
		end
	else
		if(size > 20) then
			reward = doCopyItem(item, false)
		elseif(size > 8) then
			reward = getThing(doCreateItemEx(1988, 1))
		else
			reward = getThing(doCreateItemEx(1987, 1))
		end
		for i = 1, size do
			local tmp = doCopyItem(items[i], true)
			if(doAddContainerItemEx(reward.uid, tmp.uid) ~= RETURNVALUE_NOERROR) then
				print("[Warning] QuestSystem:", "Could not add quest reward")
			else
				local ret = ", "
				if(i == 2) then
					ret = " and "
				elseif(i == 1) then
					ret = ""
				end
				result = result .. ret
				ret = getItemDescriptions(tmp.uid)
				if(tmp.type > 0 and isItemRune(tmp.itemid)) then
					result = result .. tmp.type .. " charges " .. ret.name
				elseif(tmp.type > 0 and isItemStackable(tmp.itemid)) then
					result = result .. tmp.type .. " " .. ret.plural
				else
					result = result .. ret.article .. " " .. ret.name
				end
			end
		end
	end
	if(doPlayerAddItemEx(cid, reward.uid, false) ~= RETURNVALUE_NOERROR) then
		result = "You have found a reward weighing " .. getItemWeight(reward.uid) .. " oz. It is too heavy or you have not enough space."
	else
		result = "You have found " .. result .. "."
		setPlayerStorageValue(cid, storage, 1)
		if(questsExperience[storage] ~= nil) then
			doPlayerAddExp(cid, questsExperience[storage])
			doSendAnimatedText(getCreaturePosition(cid), questsExperience[storage], TEXTCOLOR_WHITE)
		end
	end
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
	return true
end
Nazywamy go system.lua i wrzucamy go do:
Code:
actions>scripts>quests
nastepnie wchodzimy w actions.xml
i na samym poczotku w 'Quests' dodajemy:
Code:
	<action actionid="2000" event="script" value="quests/system.lua"/>
	<action actionid="2001" event="script" value="quests/system.lua"/>
A teraz jak doda? quest w map edytorze:
Wchodzimy w map edytora stawiamy chesta i klikamy na niego prawym i propierties w action id wpisujemy 2000 i w unique id wpisujemy 2000 i w te czarne pola wstawiamy rzeczy jakie maj? by? w tym questcie.
Je?li robimy nastepny quest to tak samo jak wy?ej tylko dajemy action id 2001 i unique id 2001 I tak dalej. Je?li damy te same action id i unique to i wzielismy kiedy? tego questa to jak zrobimy jeszcze raz o tym samym id to ju? nie b?dziemy mogli wsi??? tego questu.
Testowany na TFS 0.3.5 Crying damson i na Crying Damson 0.3.6pl1
Koniec. Komentujcie, oceniajcie...
McFreeq :D
 
Top