• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

TalkAction !buyskill - Advanced command [Fully Configurable]

Fresh

Quack!
Joined
Oct 21, 2009
Messages
1,838
Solutions
18
Reaction score
617
Location
Poland
Hello,
i wanna release my script, what requested - Beyond Sky in this thread - http://otland.net/f132/req-command-sell-skill-131710/#post1275687

This script is rather for Evolution or HighRate ots, or Donation one`s... anyway, have fun!​

Description:
Player can buy skills (levels not tries) with that command.
Required an itemid, amount.
The skills level's are limited. (you can set)

Credits:
* Vodkart from a Brazilian Forum for function.
* Beyond Sky for testing and idea.

Features:
* You can easy change PriceItem ID.
* You can easy change the quantity of price for each skill.
* You can easy change vocations.
* You can set the limit of each skill levels (not tries), depend on vocation.
* You can change how many skill`s player can bought.
* You can set up the Real Animation feature
- yes - only players when staying near character seeing the animation of bought skills
- no - all players see the effect

ChangeLog:
* Fixed major bug :: "You dont have enough gold ignots (...)"
* Fixed minor bug :: "String value" - added boolean to config


1) Add this two functions to your function.lib or something called that:
Lua:
function doPlayerSetSkill(cid, skill, amount)
local pid = getPlayerGUID(cid)  
doRemoveCreature(cid,true) 
db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";")  
return TRUE
end

function doPlayerSetMagic(cid, amount)
local pid = getPlayerGUID(cid)  
doRemoveCreature(cid,true) 
db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid)
return TRUE
end

2) buyskill.lua - create it in talkactions/scripts, inside put:
Lua:
function onSay(cid, words, param)
-- Changeable ------------------------------------------------------------------
local add = 10 -- how much skills add.
local druid_id = getPlayerVocation(cid, 1)
local sorcerer_id = getPlayerVocation(cid, 2)
local knight_id = getPlayerVocation(cid, 3)
local paladin_id = getPlayerVocation(cid, 4)
-- Price Changeable ------------------------------------------------------------
local itemid = 9971 -- gold ignots ID
local config = {
		mlvl = 10, -- how many gold ignot per skill
		dist = 10,
		sword = 10,
		club = 10,
		axe = 10
}
config.mlvl = getBooleanFromString(config.mlvl)
config.dist = getBooleanFromString(config.dist)
config.sword = getBooleanFromString(config.sword)
config.club = getBooleanFromString(config.club)
config.axe = getBooleanFromString(config.axe)
--------------------------------------------------------------------------------
-- Real Animation
-- Shows Message - "Skills" when bought?
local msgs = "no" -- if set yes, the msg is showing only near of player (1sqm x 1sqm) 
--------------------------------------------------------------------------------

-- here check for Skill -> Magic Levels
if getPlayerItem(cid, itemid, config.mlvl) == true then
	if druid_id and sorcerer_id and getPlayerSkill(cid, 7) <= 200 then -- the limit of skill
		return doPlayerSendCancel(cid, "You cannot buy magic levels, when your magic level is higher than 200.")
	else
		doPlayerSetMagic(cid, getPlayerMagLevel(cid)+add)
		doPlayerRemoveItem(cid, itemid, config.mlvl)
	if(not msgs) then
		doSendAnimatedText(pos, "Skills!", 18)
	else
			for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
			if(isPlayer(tid)) then
				doSendAnimatedText(pos, "Skills!", 18)
	end
	end
	end
end
else
doPlayerSendTextMessage(cid,22,"You don't have enough gold ignots. It cost " .. config.mlvl .. " ignots.")
end
-- here check for Skill -> Distance
if getPlayerItem(cid, itemid, config.dist) == true then
	if paladin_id and getPlayerSkill(cid, 4) <= 350 then
		return doPlayerSendCancel(cid, "You cannot buy distance fighting, when your distance is higher than 350.")
	else
		doPlayerSetSkill(cid, getPlayerSkill(cid, 4)+add)
		doPlayerRemoveItem(cid, itemid, config.dist)
	if(not msgs) then
		doSendAnimatedText(pos, "Skills!", 18)
	else
			for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
			if(isPlayer(tid)) then
				doSendAnimatedText(pos, "Skills!", 18)
	end
	end
	end
end
else
doPlayerSendTextMessage(cid,22,"You don't have enough gold ignots. It cost " .. config.dist .. " ignots.")
end
-- here check for Skill -> Sword
if getPlayerItem(cid, itemid, config.sword) == true then
	if knight_id and getPlayerSkill(cid, 1) <= 350 then
		return doPlayerSendCancel(cid, "You cannot buy sword fighting, when your sword is higher than 350.")
	else
		doPlayerSetSkill(cid, getPlayerSkill(cid, 1)+add)
		doPlayerRemoveItem(cid, itemid, config.sword)
	if(not msgs) then
		doSendAnimatedText(pos, "Skills!", 18)
	else
			for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
			if(isPlayer(tid)) then
				doSendAnimatedText(pos, "Skills!", 18)
	end
	end
	end
end
else
doPlayerSendTextMessage(cid,22,"You don't have enough gold ignots. It cost " .. config.sword .. " ignots.")
end
-- here check for Skill -> Club
if getPlayerItem(cid, itemid, config.club) == true then
	if knight_id and getPlayerSkill(cid, 2) <= 350 then
		return doPlayerSendCancel(cid, "You cannot buy club fighting, when your club is higher than 350.")
	else
		doPlayerSetSkill(cid, getPlayerSkill(cid, 2)+add)
		doPlayerRemoveItem(cid, itemid, config.club)
	if(not msgs) then
		doSendAnimatedText(pos, "Skills!", 18)
	else
			for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
			if(isPlayer(tid)) then
				doSendAnimatedText(pos, "Skills!", 18)
	end
	end
	end
end
else
doPlayerSendTextMessage(cid,22,"You don't have enough gold ignots. It cost " .. config.club .. " ignots.")
end
-- here check for Skill -> Axe
if getPlayerItem(cid, itemid, config.axe) == true then
	if knight_id and getPlayerSkill(cid, 3) <= 350 then
		return doPlayerSendCancel(cid, "You cannot buy axe fighting, when your axe is higher than 350.")
	else
		doPlayerSetSkill(cid, getPlayerSkill(cid, 3)+add)
		doPlayerRemoveItem(cid, itemid, config.axe)
	if(not msgs) then
		doSendAnimatedText(pos, "Skills!", 18)
	else
			for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
			if(isPlayer(tid)) then
				doSendAnimatedText(pos, "Skills!", 18)
	end
	end
	end
end
else
doPlayerSendTextMessage(cid,22,"You don't have enough gold ignots. It cost " .. config.axe .. " ignots.")
end
-- done
return true
end

3) Add "analogy" command line in talkactions.xml
 
Last edited:
forgot the ,

Lua:
local config = {
		mlvl = 10, -- how many gold ignot per skill
		dist = 10,
		sword = 10,
		club = 10,
		axe = 10
}

doesn't work yet
 
It isn't working!

[14:29:04.895] [Error - TalkAction Interface]
[14:29:04.895] data/talkactions/scripts/buyskill.lua:eek:nSay
[14:29:04.895] Description:
[14:29:04.895] (internalGetPlayerInfo) Player not found when requesting player info #6

[14:29:04.895] [Error - TalkAction Interface]
[14:29:04.895] data/talkactions/scripts/buyskill.lua:eek:nSay
[14:29:04.895] Description:
[14:29:04.895] (internalGetPlayerInfo) Player not found when requesting player info #6

[14:29:04.895] [Error - TalkAction Interface]
[14:29:04.895] data/talkactions/scripts/buyskill.lua:eek:nSay
[14:29:04.895] Description:
[14:29:04.895] (internalGetPlayerInfo) Player not found when requesting player info #6

[14:29:04.895] [Error - TalkAction Interface]
[14:29:04.895] data/talkactions/scripts/buyskill.lua:eek:nSay
[14:29:04.895] Description:
[14:29:04.895] (internalGetPlayerInfo) Player not found when requesting player info #6

[14:29:04.895] [Error - TalkAction Interface]
[14:29:04.895] data/talkactions/scripts/buyskill.lua:eek:nSay
[14:29:04.895] Description:
[14:29:04.895] data/talkactions/scripts/buyskill.lua:29: attempt to call global 'getPlayerItem' (a nil value)
[14:29:04.895] stack traceback:
[14:29:04.895] data/talkactions/scripts/buyskill.lua:29: in function <data/talkactions/scripts/buyskill.lua:1>
 
Last edited:
config.mlvl = getBooleanFromString(config.mlvl)
config.dist = getBooleanFromString(config.dist)
config.sword = getBooleanFromString(config.sword)
config.club = getBooleanFromString(config.club)
config.axe = getBooleanFromString(config.axe)

local druid_id = getPlayerVocation(cid, 1)
local sorcerer_id = getPlayerVocation(cid, 2)
local knight_id = getPlayerVocation(cid, 3)
local paladin_id = getPlayerVocation(cid, 4)

Why ?? lol

if druid_id and sorcerer_id and getPlayerSkill(cid, 7) <= 200 then -- the limit of skill
return doPlayerSendCancel(cid, "You cannot buy magic levels, when your magic level is higher than 200.")
else
If his ML is lower than 200 he can't buy ml ? Wtf ?
 
fix ur function please:
Lua:
function doPlayerSetSkill(cid, skill, amount)
	local pid = getPlayerGUID(cid)  
	doRemoveCreature(cid, true) 
	db.executeQuery("UPDATE `player_skills` SET `value` = `value` + ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill)  
	return true
end

function doPlayerSetMagic(cid, amount)
	local pid = getPlayerGUID(cid)  
	doRemoveCreature(cid, true) 
	db.executeQuery("UPDATE `players` SET `maglevel` = `maglevel` + " .. amount .. " WHERE `id` = ".. pid)
	return true
end
 
Back
Top