• 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!

Action Addon System

Shawak

Intermediate OT User
Joined
Sep 11, 2008
Messages
1,984
Solutions
2
Reaction score
119
Location
Germany
GitHub
Shawak
Hello,
here is a full working addon system (including all addons),
I tested the whole script + 80% of the config, so it should work without any problem, :thumbup:.

Version:
TFS 0.3.5
TFS 0.3.5pl1

Credits:
- Script:
100% by me
- Big thank to josejunior23,
because the addons based on his Theard: Realease addon NPC

Screenshot:
m9tvlj.png

(If you need 0 gold coins, it won't tell you "You need 0 gold coins and...", because I updated the script)

Instruction:
2vwd8ar.png


[ActionID]: ActionID of item on the map.
Name: Name of the addon.
Addon Type: Type of addon, addon 1 or addon 2 of outfit.
Outfit: The script add these outfit the addon ({female,male}).
Cost: Cost of the addon.
Items: Items you have to pay for the addon, for more different items: "{{5878,100},{5890,100}}", etc.

Script:
- data/actions/actions.xml
Lua:
	<action actionid="4001-4042" event="script" value="addons.lua"/>
- data/actions/scripts/addons.lua
Lua:
--[[
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Addon System by Shawak (Maxi)
	Version v1.0
	~~~ Rememeber ~~~~~~~~~~~~~~~
	This script set storagevalues
	to save the addons.
	Storage = 14000 + actionid of
	item.
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]--
	
local config = {

	[4001] = {
		name = "First Citizen Addon", -- name
		addon_type = 1,               -- addon
		outfit = {136,128},           -- female / male
		cost = 0,                     -- cost
		items = {{5878,100}},         -- items
	},
	[4002] = {
		name = "Second Citizen Addon",
		addon_type = 2,
		outfit = {136,128},
		cost = 0,
		items = {{5890,100},{5902,50},{2480,1}},
	},
	[4003] = {
		name = "First Hunter Addon",
		addon_type = 1,
		outfit = {137,129},
		cost = 0,
		items = {{5947,1},{5876,100},{5948,100},{5889,1},{5887,1},{5888,1},{5891,5}},
	},
	[4004] = {
		name = "Second Hunter Addon",
		addon_type = 2,
		outfit = {137,129},
		cost = 0,
		items = {{5875,1}},
	},
	[4005] = {
		name = "First Mage Addon",
		addon_type = 1,
		outfit = {138,130},
		cost = 0,
		items = {{5958,1}},
	},
	[4006] = {
		name = "Second Mage Addon",
		addon_type = 2,
		outfit = {138,130},
		cost = 0,
		items = {{5903,1}},
	},
	[4007] = {
		name = "First Knight Addon",
		addon_type = 1,
		outfit = {139,131},
		cost = 0,
		items = {{5880,100}},
	},
	[4008] = {
		name = "Second Knight Addon",
		addon_type = 2,
		outfit = {139,131},
		cost = 0,
		items = {{5893,100},{5924,1},{5885,1},{5887,1}},
	},
	[4009] = {
		name = "First Nobleman Addon",
		addon_type = 1,
		outfit = {140,132},
		cost = 150000,
		items = {},
	},
	[4010] = {
		name = "Second Nobleman Addon",
		addon_type = 2,
		outfit = {140,132},
		cost = 150000,
		items = {},
	},

	[4011] = {
		name = "First Summoner Addon",
		addon_type = 1,
		outfit = {141,133},
		cost = 0,
		items = {{5958,1}},
	},
	[4012] = {
		name = "Second Summoner Addon",
		addon_type = 2,
		outfit = {141,133},
		cost = 0,
		items = {{5894,70},{5911,20},{5883,40},{5905,30},{5904,15},{5882,40},{5881,60},{5886,10},{5922,35}},
	},
	[4013] = {
		name = "First Warrior Addon",
		addon_type = 1,
		outfit = {142,134},
		cost = 0,
		items = {{5899,100},{5925,100},{5884,1},{5919,1}},
	},
	[4014] = {
		name = "Second Warrior Addon",
		addon_type = 2,
		outfit = {142,134},
		cost = 0,
		items = {{5887,1},{5880,100}},
	},
	[4015] = {
		name = "First Barbarian Addon",
		addon_type = 1,
		outfit = {147,143},
		cost = 0,
		items = {{5885,1},{5884,1},{5911,50},{5910,50},{5886,10}},
	},
	[4016] = {
		name = "Second Barbarian Addon",
		addon_type = 2,
		outfit = {147,143},
		cost = 0,
		items = {{5892,1},{5880,100},{5893,50},{5876,50}},
	},
	[4017] = {
		name = "First Druid Addon",
		addon_type = 1,
		outfit = {148,144},
		cost = 0,
		items = {{5897,50},{5896,50}},
	},
	[4018] = {
		name = "Second Druid Addon",
		addon_type = 2,
		outfit = {148,144},
		cost = 0,
		items = {{5940,1},{5938,1},{5937,1},{5942,1},{5906,100}},
	},
	[4019] = {
		name = "First Wizard Addon",
		addon_type = 1,
		outfit = {149,145},
		cost = 0,
		items = {{2488,1},{2123,1},{2492,1},{2536,1}},
	},
	[4020] = {
		name = "Second Wizard Addon",
		addon_type = 2,
		outfit = {149,145},
		cost = 0,
		items = {{5922,50},},
	},
	[4021] = {
		name = "First Oriental Addon",
		addon_type = 1,
		outfit = {150,146},
		cost = 0,
		items = {{5945,1}},
	},
	[4022] = {
		name = "Second Oriental Addon",
		addon_type = 2,
		outfit = {150,146},
		cost = 0,
		items = {{5883,100},{5895,100},{5891,2},{5912,100}},
	},
	[4023] = {
		name = "First Pirate Addon",
		addon_type = 1,
		outfit = {155,151},
		cost = 0,
		items = {{6126,100},{6097,100},{6098,100}},
	},
	[4024] = {
		name = "Second Pirate Addon",
		addon_type = 2,
		outfit = {155,151},
		cost = 0,
		items = {{2385,1},{6098,1},{6095,1},{6096,1}},
	},
	[4025] = {
		name = "First Assassin Addon",
		addon_type = 1,
		outfit = {156,152},
		cost = 0,
		items = {{5898,30},{5882,10},{5881,30},{5895,20},{5905,20},{5906,10},{5885,1}},
	},
	[4026] = {
		name = "Second Assassin Addon",
		addon_type = 2,
		outfit = {156,152},
		cost = 0,
		items = {{5909,50},{5910,50},{5911,50},{5912,50},{5913,50},{5914,50},{5886,10}},
	},
	[4027] = {
		name = "First Beggar Addon",
		addon_type = 1,
		outfit = {157,153},
		cost = 20000,
		items = {{5883,100}},
	},
	[4028] = {
		name = "Second Beggar Addon",
		addon_type = 2,
		outfit = {157,153},
		cost = 0,
		items = {{6107,1}},
	},
	[4029] = {
		name = "First Shaman Addon",
		addon_type = 1,
		outfit = {158,154},
		cost = 0,
		items = {{3955,5},{5015,1}},
	},
	[4030] = {
		name = "Second Shaman Addon",
		addon_type = 2,
		outfit = {158,154},
		cost = 0,
		items = {{3966,5},{3967,5}},
	},
	[4031] = {
		name = "First Norseman Addon",
		addon_type = 1,
		outfit = {252,251},
		cost = 0,
		items = {{7290,5}},
	},
	[4032] = {
		name = "Second Norseman Addon",
		addon_type = 2,
		outfit = {252,251},
		cost = 0,
		items = {{7290,10}},
	},
	[4033] = {
		name = "First Nightmare Addon",
		addon_type = 1,
		outfit = {269,268},
		cost = 0,
		items = {{6500,500}},
	},
	[4034] = {
		name = "Second Nightmare Addon",
		addon_type = 2,
		outfit = {269,268},
		cost = 0,
		items = {{6500,1500}},
	},
	[4035] = {
		name = "First Jester Addon",
		addon_type = 1,
		outfit = {270,273},
		cost = 0,
		items = {{5879,1},{5878,4}},
	},
	[4036] = {
		name = "Second Jester Addon",
		addon_type = 2,
		outfit = {270,273},
		cost = 0,
		items = {{5909,5}},
	},
	[4037] = {
		name = "First Brotherhood Addon",
		addon_type = 1,
		outfit = {279,278},
		cost = 0,
		items = {{6500,500}},
	},
	[4038] = {
		name = "Second Brotherhood Addon",
		addon_type = 2,
		outfit = {279,278},
		cost = 0,
		items = {{6500,1500}},
	},
	[4039] = {
		name = "First Demonhunter Addon",
		addon_type = 1,
		outfit = {288,289},
		cost = 150000,
		items = {},
	},
	[4040] = {
		name = "Second Demonhunter Addon",
		addon_type = 2,
		outfit = {288,289},
		cost = 150000,
		items = {},
	},
	[4041] = {
		name = "First Yalaharian Addon",
		addon_type = 1,
		outfit = {324,325},
		cost = 150000,
		items = {},
	},
	[4042] = {
		name = "Second Yalaharian Addon",
		addon_type = 2,
		outfit = {324,325},
		cost = 150000,
		items = {},
	},

} -------- config end -------
local storage = 14000
function onUse(cid, item, fromPosition, itemEx, toPosition)
        local addon, removeItems, removeMoney = config[item.actionid], 0, 0
         if getPlayerStorageValue(cid, storage + item.actionid) ~= 1 then
                if getPlayerMoney(cid) >= addon.cost then
                        removeMoney = 1
                end
                if #addon.items > 0 then
                        for i = 1, #addon.items do
                                if getPlayerItemCount(cid, addon.items[i][1]) >= addon.items[i][2] then
                                        removeItems = removeItems+1
                                end
                        end
                end
                if removeMoney == 1 and removeItems == #addon.items then
                        for i = 1, #addon.items do
                                doPlayerRemoveItem(cid, addon.items[i][1], addon.items[i][2])
                        end
                        doPlayerRemoveMoney(cid, addon.cost)
                        doPlayerAddOutfit(cid, addon.outfit[1], addon.addon_type)
                        doPlayerAddOutfit(cid, addon.outfit[2], addon.addon_type)
                        setPlayerStorageValue(cid, storage + item.actionid, 1)
                        doPlayerSendTextMessage(cid, 21, "Now you can use the "..addon.name..".")
                else
                        if addon.cost ~= 0 then
                                msg = "You need "..addon.cost.." gold coins and "
                        else
                                msg = "You need "
                        end
                        if #addon.items > 0 then
                                for i = 1, #addon.items do
                                        msg = msg..""..addon.items[i][2].."x "..getItemNameById(addon.items[i][1]).." "
                                end
                        end
                        doPlayerSendTextMessage(cid, 21, msg.."for the "..addon.name..".")
                end
        else
                doPlayerSendTextMessage(cid, 21, "You already have the "..addon.name..".")
        end
        return TRUE
end

I hope you like it, because it was hard work for me, ^_^.
Also please report bugs on this theard, and this only of you are using one of the server, that i listened on.
And please don't forget to rep++ me, if you like it. ;).

Regards,
Shawak
 
Last edited:
Oo Nice :)
But this "You need 0 gold coins" looks funny ;p
you can do something like if cost = 0 then don't show it :p
Anyway cool script.
Rep++

#Edit
"You must spread some reputation points before giving it to shawak again" :/
 
fuckin' great relase but i have 1 thing to you to change:

Lua:
                        doPlayerAddOutfit(cid, addon.outfit[getPlayerSex(cid)+1], addon.addon_type)

Add player both outfits (to male i female), because player can change gender...

and as @up said:

Lua:
if cost == 0 then there is no message about cost. end
 
fuckin' great relase but i have 1 thing to you to change:

Lua:
                        doPlayerAddOutfit(cid, addon.outfit[getPlayerSex(cid)+1], addon.addon_type)

Add player both outfits (to male i female), because player can change gender...

and as @up said:

Lua:
if cost == 0 then there is no message about cost. end

Sorry, forgott about changing gender.

And this with the money, ;), i will change it.
 
Last edited:
Update,
Changes:
Code:
- It will not longer say that you need 0 gold coins if you have in the config "cost = 0,".
- Addons for both (male and female), important if you change your gender.

Regards,
Shawak
 
Last edited:
Small tip.
You dont have to quote ("..) variables in lua if they are first, eg:
Lua:
doPlayerSendTextMessage(cid, 21, ""..msg.."for the "..addon.name..".")
can be replaced with:
Lua:
doPlayerSendTextMessage(cid, 21, msg.."for the "..addon.name..".")
Same goes for this:
Lua:
msg = ""..msg..""..addon.items[i][2].."x "..getItemNameById(addon.items[i][1]).." "

Also if the variable is last in the string, eg:
Lua:
    local storage = getPlayerStorageValue(cid, 123)
    doPlayerSendTextMessage(cid, 22, "Your storage number is: "..storage)

:thumbup:
 
Thanks Emma, but i don't use it, because not so good scripters can't edit it then.

PS: Rep++, (for helping) :thumbup:.
 
Bump!, Bump! and ones again: BUMP!.

Needed so long for the config.
Please more comments? :(
 
Not good scripters should go away, and learn more about. You should optimize as emma said ;)
 
Some noob stole my addon item on my server...
Addons plx :huh:
 
Why are you using "cost = 0" in every array with addon? Just extend your script with:

Code:
if(addon.cost == nil) then
     addon.cost = 0
end
 
1. addon.cost = check if player have money.
2. addon.cost = check if he should give the player the addon.
 
Back
Top