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

Sirion_Mido Free Scripting Service (Actions/Movements/Talkactions/Creaturescripts)

Sirion_Mido

Experienced Member
Joined
Jul 22, 2012
Messages
579
Reaction score
43
Location
E-G-Y-P-T
Hello,

I decide to make scripts depending on players request like cyko , just i do that because cyko closed his theard , so i can continue if anyone want.

Follow these rules and we are good to go!

Rule number 1: No Spamming!
Rule number 2: Be Patient!
Rule number 3: There is no rule number 3!
Rule number 4: Follow all these rules!

As far you can see i accept only Actions/Movements/Talkactions/Creaturescripts.

Rep++ If It Helpful For You..
 
Last edited:
@up
Do you mean this?

It's my "global.lua" i dont have "functions.lua"..
( location : directly in data folder )
Code:
TRUE = 1
FALSE = 0

LUA_ERROR = -1
LUA_NO_ERROR = 0

NORTH = 0
EAST = 1
SOUTH = 2
WEST = 3
SOUTHWEST = 4
SOUTHEAST = 5
NORTHWEST = 6
NORTHEAST = 7

COMBAT_FORMULA_UNDEFINED = 0
COMBAT_FORMULA_LEVELMAGIC = 1
COMBAT_FORMULA_SKILL = 2
COMBAT_FORMULA_VALUE = 3

CONDITION_PARAM_OWNER = 1
CONDITION_PARAM_TICKS = 2
CONDITION_PARAM_OUTFIT = 3
CONDITION_PARAM_HEALTHGAIN = 4
CONDITION_PARAM_HEALTHTICKS = 5
CONDITION_PARAM_MANAGAIN = 6
CONDITION_PARAM_MANATICKS = 7
CONDITION_PARAM_DELAYED = 8
CONDITION_PARAM_SPEED = 9
CONDITION_PARAM_LIGHT_LEVEL = 10
CONDITION_PARAM_LIGHT_COLOR = 11
CONDITION_PARAM_SOULGAIN = 12
CONDITION_PARAM_SOULTICKS = 13
CONDITION_PARAM_MINVALUE = 14
CONDITION_PARAM_MAXVALUE = 15
CONDITION_PARAM_STARTVALUE = 16
CONDITION_PARAM_TICKINTERVAL = 17
CONDITION_PARAM_FORCEUPDATE = 18
CONDITION_PARAM_SKILL_MELEE = 19
CONDITION_PARAM_SKILL_FIST = 20
CONDITION_PARAM_SKILL_CLUB = 21
CONDITION_PARAM_SKILL_SWORD = 22
CONDITION_PARAM_SKILL_AXE = 23
CONDITION_PARAM_SKILL_DISTANCE = 24
CONDITION_PARAM_SKILL_SHIELD = 25
CONDITION_PARAM_SKILL_FISHING = 26
CONDITION_PARAM_STAT_MAXHITPOINTS = 27
CONDITION_PARAM_STAT_MAXMANAPOINTS = 28
CONDITION_PARAM_STAT_SOULPOINTS = 29
CONDITION_PARAM_STAT_MAGICPOINTS = 30
CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT = 31
CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT = 32
CONDITION_PARAM_STAT_SOULPOINTSPERCENT = 33
CONDITION_PARAM_STAT_MAGICPOINTSPERCENT = 34


COMBAT_PARAM_TYPE = 1
COMBAT_PARAM_EFFECT = 2
COMBAT_PARAM_DISTANCEEFFECT = 3
COMBAT_PARAM_BLOCKSHIELD = 4
COMBAT_PARAM_BLOCKARMOR = 5
COMBAT_PARAM_TARGETCASTERORTOPMOST = 6
COMBAT_PARAM_CREATEITEM = 7
COMBAT_PARAM_AGGRESSIVE = 8
COMBAT_PARAM_DISPEL = 9

CALLBACK_PARAM_LEVELMAGICVALUE = 1
CALLBACK_PARAM_SKILLVALUE = 2
CALLBACK_PARAM_TARGETTILE = 3
CALLBACK_PARAM_TARGETCREATURE = 4

COMBAT_NONE = 0
COMBAT_PHYSICALDAMAGE = 1
COMBAT_ENERGYDAMAGE = 2
COMBAT_POISONDAMAGE = 4 
COMBAT_FIREDAMAGE = 8
COMBAT_UNDEFINEDDAMAGE = 16
COMBAT_LIFEDRAIN = 32
COMBAT_MANADRAIN = 64
COMBAT_HEALING = 128
COMBAT_DROWNDAMAGE = 256
COMBAT_ICEDAMAGE = 512
COMBAT_HOLYDAMAGE = 1024
COMBAT_DEATHDAMAGE = 2048

CONDITION_NONE = 0
CONDITION_POISON = 1
CONDITION_FIRE = 2
CONDITION_ENERGY = 4
CONDITION_LIFEDRAIN = 8
CONDITION_HASTE = 16
CONDITION_PARALYZE = 32
CONDITION_OUTFIT = 64
CONDITION_INVISIBLE = 128
CONDITION_LIGHT = 256
CONDITION_MANASHIELD = 512
CONDITION_INFIGHT = 1024
CONDITION_DRUNK = 2048
CONDITION_EXHAUSTED = 4096
CONDITION_FOOD = 8192
CONDITION_REGENERATION = 8192
CONDITION_SOUL = 16384
CONDITION_DROWN = 32768
CONDITION_MUTED = 65536
CONDITION_ATTRIBUTES = 131072
CONDITION_FREEZING = 262144
CONDITION_DAZZLED = 524288
CONDITION_CURSED = 1048576

PLAYERLOSS_EXPERIENCE = 0
PLAYERLOSS_MANA = 1
PLAYERLOSS_SKILL = 2

CONST_SLOT_HEAD = 1
CONST_SLOT_NECKLACE = 2
CONST_SLOT_BACKPACK = 3
CONST_SLOT_ARMOR = 4
CONST_SLOT_RIGHT = 5
CONST_SLOT_LEFT = 6
CONST_SLOT_LEGS = 7
CONST_SLOT_FEET = 8
CONST_SLOT_RING = 9
CONST_SLOT_AMMO = 10

CONST_ME_DRAWBLOOD = 0
CONST_ME_LOSEENERGY = 1
CONST_ME_POFF = 2
CONST_ME_BLOCKHIT = 3
CONST_ME_EXPLOSIONAREA = 4
CONST_ME_EXPLOSIONHIT = 5
CONST_ME_FIREAREA = 6
CONST_ME_YELLOW_RINGS = 7
CONST_ME_GREEN_RINGS = 8
CONST_ME_HITAREA = 9
CONST_ME_ENERGYAREA = 10
CONST_ME_ENERGYHIT = 11
CONST_ME_MAGIC_BLUE = 12
CONST_ME_MAGIC_RED = 13
CONST_ME_MAGIC_GREEN = 14
CONST_ME_HITBYFIRE = 15
CONST_ME_HITBYPOISON = 16
CONST_ME_MORTAREA = 17
CONST_ME_SOUND_BLUE = 18
CONST_ME_SOUND_RED = 19
CONST_ME_POISONAREA = 20
CONST_ME_SOUND_YELLOW = 21
CONST_ME_SOUND_PURPLE = 22
CONST_ME_SOUND_BLUE = 23
CONST_ME_SOUND_WHITE = 24
CONST_ME_BUBBLES = 25
CONST_ME_CRAPS = 26
CONST_ME_GIFT_WRAPS = 27
CONST_ME_FIREWORK_YELLOW = 28
CONST_ME_FIREWORK_RED = 29
CONST_ME_FIREWORK_BLUE = 30
CONST_ME_STUN = 31
CONST_ME_SLEEP = 32
CONST_ME_WATERCREATURE = 33
CONST_ME_GROUNDSHAKER = 34
CONST_ME_HEARTS = 35
CONST_ME_FIREATTACK = 36
CONST_ME_ENERGYAREA = 37
CONST_ME_SMALLCLOUDS = 38
CONST_ME_HOLYDAMAGE = 39
CONST_ME_BIGCLOUDS = 40
CONST_ME_ICEAREA = 41
CONST_ME_ICETORNADO = 42
CONST_ME_ICEATTACK = 43
CONST_ME_STONES = 44
CONST_ME_SMALLPLANTS = 45
CONST_ME_CARNIPHILA = 46
CONST_ME_PURPLEENERGY = 47
CONST_ME_YELLOWENERGY = 48
CONST_ME_HOLYAREA = 49
CONST_ME_BIGPLANTS = 50
CONST_ME_CAKE = 51
CONST_ME_GIANTICE = 52
CONST_ME_WATERSPLASH = 53
CONST_ME_PLANTATTACK = 54
CONST_ME_NONE = 255

CONST_ANI_SPEAR = 0
CONST_ANI_BOLT = 1
CONST_ANI_ARROW = 2
CONST_ANI_FIRE = 3
CONST_ANI_ENERGY = 4
CONST_ANI_POISONARROW = 5
CONST_ANI_BURSTARROW = 6
CONST_ANI_THROWINGSTAR = 7
CONST_ANI_THROWINGKNIFE = 8
CONST_ANI_SMALLSTONE = 9
CONST_ANI_SUDDENDEATH = 10
CONST_ANI_LARGEROCK = 11
CONST_ANI_SNOWBALL = 12
CONST_ANI_POWERBOLT = 13
CONST_ANI_POISON = 14
CONST_ANI_INFERNALBOLT = 15
CONST_ANI_HUNTINGSPEAR = 16
CONST_ANI_ENCHANTEDSPEAR = 17
CONST_ANI_ASSASSINSTAR = 18
CONST_ANI_GREENSTAR = 19
CONST_ANI_ROYALSPEAR = 20
CONST_ANI_SNIPERARROW = 21
CONST_ANI_ONYXARROW = 22
CONST_ANI_PIERCINGBOLT = 23
CONST_ANI_WHIRLWINDSWORD = 24
CONST_ANI_WHIRLWINDAXE = 25
CONST_ANI_WHIRLWINDCLUB = 26
CONST_ANI_ETHEREALSPEAR = 27
CONST_ANI_ICE = 28
CONST_ANI_EARTH = 29
CONST_ANI_HOLY = 30
CONST_ANI_DEATH = 31
CONST_ANI_FLASHARROW = 32
CONST_ANI_FLAMMINGARROW = 33
CONST_ANI_SHIVERARROW = 34
CONST_ANI_ENERGYBALL = 35
CONST_ANI_SMALLICE = 36
CONST_ANI_SMALLHOLY = 37
CONST_ANI_SMALLEARTH = 38
CONST_ANI_EARTHARROW = 39
CONST_ANI_EXPLOSION = 40
CONST_ANI_CAKE = 41
CONST_ANI_WEAPONTYPE = 254
CONST_ANI_NONE = 255

TALKTYPE_SAY  = 1
TALKTYPE_WHISPER = 2
TALKTYPE_YELL = 3
TALKTYPE_PRIVATE = 4
TALKTYPE_CHANNEL_Y = 5
TALKTYPE_BROADCAST = 9
TALKTYPE_CHANNEL_R1 = 10
TALKTYPE_PRIVATE_RED = 11
TALKTYPE_CHANNEL_O = 12
TALKTYPE_CHANNEL_R2 = 14
TALKTYPE_ORANGE_1 = 16
TALKTYPE_ORANGE_2 = 17

MESSAGE_STATUS_WARNING = 18
MESSAGE_EVENT_ADVANCE = 19
MESSAGE_EVENT_DEFAULT = 20
MESSAGE_STATUS_DEFAULT = 21
MESSAGE_INFO_DESCR = 22
MESSAGE_STATUS_SMALL = 23
MESSAGE_STATUS_CONSOLE_BLUE = 24
MESSAGE_STATUS_CONSOLE_RED  = 25

TEXTCOLOR_BLUE        = 5
TEXTCOLOR_LIGHTBLUE   = 35
TEXTCOLOR_LIGHTGREEN  = 30
TEXTCOLOR_PURPLE      = 83
TEXTCOLOR_LIGHTGREY   = 129
TEXTCOLOR_DARKRED     = 144
TEXTCOLOR_RED         = 180
TEXTCOLOR_ORANGE      = 198
TEXTCOLOR_YELLOW      = 210
TEXTCOLOR_WHITE_EXP   = 215
TEXTCOLOR_NONE        = 255

RETURNVALUE_NOERROR = 1
RETURNVALUE_NOTPOSSIBLE = 2
RETURNVALUE_NOTENOUGHROOM = 3
RETURNVALUE_PLAYERISPZLOCKED = 4
RETURNVALUE_PLAYERISNOTINVITED = 5
RETURNVALUE_CANNOTTHROW = 6
RETURNVALUE_THEREISNOWAY = 7
RETURNVALUE_DESTINATIONOUTOFREACH = 8
RETURNVALUE_CREATUREBLOCK = 9
RETURNVALUE_NOTMOVEABLE = 10
RETURNVALUE_DROPTWOHANDEDITEM = 11
RETURNVALUE_BOTHHANDSNEEDTOBEFREE = 12
RETURNVALUE_CANONLYUSEONEWEAPON = 13
RETURNVALUE_NEEDEXCHANGE = 14
RETURNVALUE_CANNOTBEDRESSED = 15
RETURNVALUE_PUTTHISOBJECTINYOURHAND = 16
RETURNVALUE_PUTTHISOBJECTINBOTHHANDS = 17
RETURNVALUE_TOOFARAWAY = 18
RETURNVALUE_FIRSTGODOWNSTAIRS = 19
RETURNVALUE_FIRSTGOUPSTAIRS = 20
RETURNVALUE_CONTAINERNOTENOUGHROOM = 21
RETURNVALUE_NOTENOUGHCAPACITY = 22
RETURNVALUE_CANNOTPICKUP = 23
RETURNVALUE_THISISIMPOSSIBLE = 24
RETURNVALUE_DEPOTISFULL = 25
RETURNVALUE_CREATUREDOESNOTEXIST = 26
RETURNVALUE_CANNOTUSETHISOBJECT = 27
RETURNVALUE_PLAYERWITHTHISNAMEISNOTONLINE = 28
RETURNVALUE_NOTREQUIREDLEVELTOUSERUNE = 29
RETURNVALUE_YOUAREALREADYTRADING = 30
RETURNVALUE_THISPLAYERISALREADYTRADING = 31
RETURNVALUE_YOUMAYNOTLOGOUTDURINGAFIGHT = 32
RETURNVALUE_DIRECTPLAYERSHOOT = 33
RETURNVALUE_NOTENOUGHLEVEL = 34
RETURNVALUE_NOTENOUGHMAGICLEVEL = 35
RETURNVALUE_NOTENOUGHMANA = 36
RETURNVALUE_NOTENOUGHSOUL = 37
RETURNVALUE_YOUAREEXHAUSTED = 38
RETURNVALUE_PLAYERISNOTREACHABLE = 39
RETURNVALUE_CANONLYUSETHISRUNEONCREATURES = 40
RETURNVALUE_ACTIONNOTPERMITTEDINPROTECTIONZONE = 41
RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER = 42
RETURNVALUE_YOUMAYNOTATTACKAPERSONINPROTECTIONZONE = 43
RETURNVALUE_YOUMAYNOTATTACKAPERSONWHILEINPROTECTIONZONE = 44
RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE = 45
RETURNVALUE_YOUCANONLYUSEITONCREATURES = 46
RETURNVALUE_CREATUREISNOTREACHABLE = 47
RETURNVALUE_TURNSECUREMODETOATTACKUNMARKEDPLAYERS = 48
RETURNVALUE_YOUNEEDPREMIUMACCOUNT = 49
RETURNVALUE_YOUNEEDTOLEARNTHISSPELL = 50
RETURNVALUE_YOURVOCATIONCANNOTUSETHISSPELL = 51
RETURNVALUE_YOUNEEDAWEAPONTOUSETHISSPELL = 52

ITEM_GOLD_COIN = 2148
ITEM_PLATINUM_COIN = 2152
ITEM_CRYSTAL_COIN = 2160


function doPlayerGiveItem(cid, itemid, count, charges)
	local hasCharges = (isItemRune(itemid) == TRUE or isItemFluidContainer(itemid) == TRUE)
	if(hasCharges and charges == nil) then
		charges = 1
	end
	
	while count > 0 do
    	local tempcount = 1
    	
    	if(hasCharges) then
    		tempcount = charges
    	end
    	if(isItemStackable(itemid) == TRUE) then
    		tempcount = math.min (100, count)
   		end
    	
       	local ret = doPlayerAddItem(cid, itemid, tempcount)
       	if(ret == LUA_ERROR) then
        	ret = doCreateItem(itemid, tempcount, getPlayerPosition(cid))
        end
        
        if(ret ~= LUA_ERROR) then
        	if(hasCharges) then
        		count = count-1
        	else
        		count = count-tempcount
        	end
        else
        	return LUA_ERROR
        end
	end
    return LUA_NO_ERROR
end


function doPlayerTakeItem(cid, itemid, count)
	if(getPlayerItemCount(cid,itemid) >= count) then
		
		while count > 0 do
			local tempcount = 0
    		if(isItemStackable(itemid) == TRUE) then
    			tempcount = math.min (100, count)
    		else
    			tempcount = 1
    		end
        	local ret = doPlayerRemoveItem(cid, itemid, tempcount)
        	
            if(ret ~= LUA_ERROR) then
            	count = count-tempcount
            else
            	return LUA_ERROR
            end
		end
		
		if(count == 0) then
			return LUA_NO_ERROR
		end
		
	else
		return LUA_ERROR
	end
end


function doPlayerAddMoney(cid, amount)
	local crystals = math.floor(amount/10000)
	amount = amount - crystals*10000
	local platinum = math.floor(amount/100)
	amount = amount - platinum*100
	local gold = amount
	local ret = 0
	if(crystals > 0) then
		ret = doPlayerGiveItem(cid, ITEM_CRYSTAL_COIN, crystals)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	if(platinum > 0) then
		ret = doPlayerGiveItem(cid, ITEM_PLATINUM_COIN, platinum)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	if(gold > 0) then
		ret = doPlayerGiveItem(cid, ITEM_GOLD_COIN, gold)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	return LUA_NO_ERROR
end


function doPlayerBuyItem(cid, itemid, count, cost, charges)
    if(doPlayerRemoveMoney(cid, cost) == TRUE) then
    	return doPlayerGiveItem(cid, itemid, count, charges)
    else
        return LUA_ERROR
    end
end


function doPlayerSellItem(cid, itemid, count, cost)
	
	if(doPlayerTakeItem(cid, itemid, count) == LUA_NO_ERROR) then
		if(doPlayerAddMoney(cid, cost) ~= LUA_NO_ERROR) then
			error('Could not add money to ' .. getPlayerName(cid) .. '(' .. cost .. 'gp)')
		end
		return LUA_NO_ERROR
	else
		return LUA_ERROR
	end
	
end

DIRECTION_NORTH = 0
DIRECTION_EAST = 1
DIRECTION_SOUTH = 2
DIRECTION_WEST = 3
DIRECTION_SOUTHWEST = 4
DIRECTION_SOUTHEAST = 5
DIRECTION_NORTHWEST = 6
DIRECTION_NORTHEAST = 7

DOORSTATE_OPEN = 1
DOORSTATE_CLOSED = 2

DoorHandler = {
	doors = {
		north = {
			{ 1212, 1214 },
			{ 1213, 1214 },
			{ 1221, 1222 },
			{ 1225, 1226 },
			{ 1229, 1230 },
			{ 1234, 1236 },
			{ 1235, 1236 },
			{ 1239, 1240 },
			{ 1243, 1244 },
			{ 1247, 1248 },
			{ 1252, 1254 },
			{ 1253, 1254 },
			{ 1257, 1258 },
			{ 1261, 1262 },
			{ 3535, 3537 },
			{ 3536, 3537 },
			{ 3538, 3539 },
			{ 3540, 3541 },
			{ 3542, 3543 },
			{ 5084, 5085 },
			{ 5098, 5100 },
			{ 5099, 5100 },
			{ 5101, 5102 },
			{ 5103, 5104 },
			{ 5116, 5118 },
			{ 5117, 5118 },
			{ 5119, 5120 },
			{ 5121, 5122 },
			{ 5123, 5124 },
			{ 5134, 5136 },
			{ 5135, 5136 },
			{ 5137, 5139 },
			{ 5138, 5139 },
			{ 5278, 5280 },
			{ 5279, 5280 },
			{ 5286, 5287 },
			{ 5290, 5291 },
			{ 5294, 5295 },
			{ 5517, 5518 },
			{ 5748, 5749 },
			{ 6253, 6254 }
		},
		
		west = {
			{ 1209, 1211 },
			{ 1210, 1211 },
			{ 1219, 1220 },
			{ 1223, 1224 },
			{ 1227, 1228 },
			{ 1231, 1233 },
			{ 1232, 1233 },
			{ 1237, 1238 },
			{ 1241, 1242 },
			{ 1245, 1246 },
			{ 1249, 1251 },
			{ 1250, 1251 },
			{ 1255, 1256 },
			{ 1259, 1260 },
			{ 3544, 3546 },
			{ 3545, 3546 },
			{ 3547, 3548 },
			{ 3549, 3550 },
			{ 3551, 3552 },
			{ 5082, 5083 },
			{ 5107, 5109 },
			{ 5108, 5109 },
			{ 5110, 5111 },
			{ 5112, 5113 },
			{ 5114, 5115 },
			{ 5125, 5127 },
			{ 5126, 5127 },
			{ 5128, 5129 },
			{ 5130, 5131 },
			{ 5132, 5133 },
			{ 5140, 5142 },
			{ 5141, 5142 },
			{ 5143, 5145 },
			{ 5144, 5145 },
			{ 5281, 5283 },
			{ 5282, 5283 },
			{ 5284, 5285 },
			{ 5288, 5289 },
			{ 5292, 5293 },
			{ 5515, 5516 },
			{ 5748, 5749 },
			{ 6250, 6251 },
			{ 6255, 6256 },
			{ 6263, 6264 }
		}
	}
}

function DoorHandler:new(o)
	o = o or {}   -- create object if user does not provide one
	setmetatable(o, self)
	self.__index = self
	return o
end

function DoorHandler:searchArray(arr, itemid)
	local ret = nil
	local i = 1
	while true do
		if(arr[i] == nil) then
			break
		end
		
		local tmp = arr[i]
		
		if(tmp[1] == itemid or tmp[2] == itemid) then
			ret = tmp
			break
		end
		
		i = i+1
	end
	
	return ret
end

function DoorHandler:getDoor(item)
	
	local retDoor = {
		dir = 0,
		id = itemid,
		toid = 0,
		state = 0,
		minlvl = 0,
		keyid = 0
	}
	
	local ret = self:searchArray(self.doors.north, item.itemid)
	if(ret == nil) then
		ret = self:searchArray(self.doors.west, item.itemid)
		if(ret ~= nil) then
			retDoor.dir = DIRECTION_WEST
		end
	else
		retDoor.dir = DIRECTION_NORTH
	end
	
	if(ret == nil) then
		return nil
	end
	
	if(ret[1] == item.itemid) then
		retDoor.state = DOORSTATE_CLOSED
		retDoor.toid = ret[2]
	else
		retDoor.state = DOORSTATE_OPEN
		retDoor.toid = ret[1]
	end
	
	if(item.actionid >= 1000 and item.actionid < 2000) then
		retDoor.minlvl = item.actionid-1000
	elseif(item.actionid > 0) then
		retDoor.keyid = item.actionid
	end
	
	return retDoor
	
end

function DoorHandler:getCreatureFromPos(pos)
	local ret = 0
	
	local tmp = { x=pos.x, y=pos.y, z=pos.z, stackpos=253}
	local creature = getThingfromPos(tmp)
	
	if(creature ~= nil and creature ~= 0 and creature.itemid > 0) then
		ret = creature.uid
	end
	
	return ret
	
end

function DoorHandler:movePlayerTo(cid, toPos)
	
	local p = getPlayerPosition(cid)
	
	local dist = math.max(math.abs(p.x-toPos.x), math.abs(p.y-toPos.y))
	
	if(dist > 1 or p.z ~= toPos.z) then
		local ret = doTeleportThing(cid, toPos)
		return (ret == LUA_NO_ERROR)
	end
	
	if(dist <= 0) then
		return true
	end
	
	local dir = -1
	if(p.y < toPos.y) then --SouthXXX
		if(p.x < toPos.x) then -- SouthEast
			dir = DIRECTION_SOUTHEAST
		elseif(p.x > toPos.x) then -- SouthWest
			dir = DIRECTION_SOUTHWEST
		else --South
			dir = DIRECTION_SOUTH
		end
	elseif(p.y > toPos.y) then --NorthXXX
		if(p.x < toPos.x) then -- NorthEast
			dir = DIRECTION_NORTHEAST
		elseif(p.x > toPos.x) then -- NorthWest
			dir = DIRECTION_NORTHWEST
		else --North
			dir = DIRECTION_NORTH
		end
	else -- West/East
		if(p.x < toPos.x) then -- East
			dir = DIRECTION_EAST
		elseif(p.x > toPos.x) then -- West
			dir = DIRECTION_WEST
		else --None
			dir = -1
		end
	end
	
	if(dir == -1) then
		return false
	end
	
	local ret = doMoveCreature(cid, dir)
	
	
	return (ret == RETURNVALUE_NOERROR)
	
end

function DoorHandler:moveCreatures(thisDoor, doorpos)
	
	local lastcid = 0
	local cid = self:getCreatureFromPos(doorpos)
	
	while (cid ~= 0 and cid ~= lastcid) do
		lastcid = cid
		
		if(thisDoor.dir == DIRECTION_NORTH) then
			local ret = doMoveCreature(cid, DIRECTION_SOUTH)
			if(ret ~= RETURNVALUE_NOERROR) then
				ret = doMoveCreature(cid, DIRECTION_NORTH)
				if(ret ~= RETURNVALUE_NOERROR) then
					local destPos = { x = doorpos.x, y = doorpos.y+1, z = doorpos.z }
					ret = doTeleportThing(cid, destPos)
					if(ret ~= LUA_NO_ERROR) then
						destPos = { x = doorpos.x, y = doorpos.y-1, z = doorpos.z }
						doTeleportThing(cid, destPos)
					end
				end
			end
		elseif(thisDoor.dir == DIRECTION_WEST) then
			local ret = doMoveCreature(cid, DIRECTION_EAST)
			if(ret ~= RETURNVALUE_NOERROR) then
				ret = doMoveCreature(cid, DIRECTION_WEST)
				if(ret ~= RETURNVALUE_NOERROR) then
					local destPos = { x = doorpos.x+1, y = doorpos.y, z = doorpos.z }
					ret = doTeleportThing(cid, destPos)
					if(ret ~= LUA_NO_ERROR) then
						destPos = { x = doorpos.x-1, y = doorpos.y, z = doorpos.z }
						doTeleportThing(cid, destPos)
					end
				end
			end
		end
		
		cid = self:getCreatureFromPos(doorpos)
	end
	
end

function DoorHandler:useDoor(item, pos, userid, key, playerGenerated)
	local thisDoor = self:getDoor(item)
	
	if(thisDoor == nil) then
		return 0
	end
	
	
	if(key ~= nil and key.actionid ~= thisDoor.keyid) then
		doPlayerSendTextMessage(userid,22,"Klucz nie pasuje.")
		return 1
	end
	
	
	if(thisDoor.keyid > 0 and key == nil) then
		doPlayerSendTextMessage(userid,22,"Drzwi sa zamkniete.")
		return 1
	end
	
	if(thisDoor.state == DOORSTATE_OPEN and thisDoor.minlvl == 0) then
		self:moveCreatures(thisDoor, pos)
		doTransformItem(item.uid, thisDoor.toid)
	elseif(thisDoor.state == DOORSTATE_CLOSED) then
		if(thisDoor.minlvl > 0) then
			local lvl = getPlayerLevel(userid)
			if(lvl < thisDoor.minlvl) then
				doPlayerSendTextMessage(userid,22,"Potrzebujesz " .. thisDoor.minlvl .. " poziomu, aby przejsc przez te drzwi.")
				return 1
			else
				doTransformItem(item.uid, thisDoor.toid)
				self:movePlayerTo(userid, pos)
			end
		else
			doTransformItem(item.uid, thisDoor.toid)
		end
	elseif(thisDoor.state == DOORSTATE_OPEN and thisDoor.minlvl > 0 and not playerGenerated) then
		doTransformItem(item.uid, thisDoor.toid)
	end
	
	return 1
end

if(doorHandler == nil) then
	doorHandler = DoorHandler:new(nil)
end

function isPlayerOnPos(pos)
	local pos2 = pos
	pos2.stackpos = 253
	local thing = getThingfromPos(pos2)
	if(thing ~= nil and thing.itemid > 0) then
		if(isPlayer(thing.uid)) then
			return true
		end
	end
	return false
end

function comparePos(pos1, pos2)
	return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end

function isWall(id)
local walls = {1025, 1032, 1028, 1030, 1035, 1027, 1219, 4645, 4647, 4646, 4644}
if isInArray(walls, id) == 1 then
return 1
else
return 0
end
end 

function onAdvance(cid, oldlevel, newlevel)
	if newlevel == 100 then
		local ppos = getPlayerPosition(cid)
		local positions = {
			{x=ppos.x-3, y=ppos.y-1, z=ppos.z},
			{x=ppos.x-1, y=ppos.y-1, z=ppos.z},
			{x=ppos.x, y=ppos.y-1, z=ppos.z},
			{x=ppos.x+1, y=ppos.y-1, z=ppos.z},
			{x=ppos.x+3, y=ppos.y-1, z=ppos.z},
			{x=ppos.x+4, y=ppos.y-1, z=ppos.z},
			{x=ppos.x+5, y=ppos.y-1, z=ppos.z},
			
			{x=ppos.x-3, y=ppos.y, z=ppos.z},
			{x=ppos.x-1, y=ppos.y, z=ppos.z},
			{x=ppos.x+1, y=ppos.y, z=ppos.z},
			{x=ppos.x+3, y=ppos.y, z=ppos.z},
			{x=ppos.x+5, y=ppos.y, z=ppos.z},
			
			{x=ppos.x-3, y=ppos.y+1, z=ppos.z},
			{x=ppos.x-1, y=ppos.y+1, z=ppos.z},
			{x=ppos.x, y=ppos.y+1, z=ppos.z},
			{x=ppos.x+1, y=ppos.y+1, z=ppos.z},
			{x=ppos.x+3, y=ppos.y+1, z=ppos.z},
			{x=ppos.x+4, y=ppos.y+1, z=ppos.z},
			{x=ppos.x+5, y=ppos.y+1, z=ppos.z},
		}
		local effect = math.random(CONST_ME_FIREWORK_YELLOW,CONST_ME_FIREWORK_BLUE)
		for i = 1, table.getn(positions) do
			doSendMagicEffect(positions[i],effect)
		end
	end
end

Or this:
( location: data\actions\lib )

Code:
ROPE_SPOT = {384, 418}

OPENED_HOLE = {294, 383, 469, 470, 482, 482, 485, 489}

CLOSED_HOLE = {468, 481, 483}

OPENED_TRAP = {462}

DOWN_LADDER = {369, 370, 408, 409, 427, 428, 3135, 3136, 5545, 5763}

WATER_WITH_FISH = {490, 4608}

WATER_WITHOUT_FISH = {491, 492, 493, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4664, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}

JUNGLE_GRASS = {2782, 3985}

LIQUID_CONTAINER = {1775, 2005, 2006, 2007, 2008, 2009, 2011, 2012, 2013, 2014, 2015, 2023, 2031, 2032, 2033, 2034, 2562, 2574, 2575, 2576, 2577, 3941, 3942}

WATER = {490, 4608, 491, 492, 493, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4664, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} 

MUD = {103, 351, 352, 353, 354, 355}

LAVA = {598, 599, 600, 601, 1509}

SWAMP = {602, 603, 604, 605, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4758}

NORMAL_CORPSE_STAGE_I = {2317, 2806, 2808, 2813, 2820, 2824, 2826, 2830, 2835, 2839, 2844, 2848, 2849, 2853, 2860, 2862, 2864, 2866, 2871, 2876, 2881, 2886, 2889, 2893, 2905, 2908, 2914, 2920, 2924, 2928, 2931, 2935, 2938, 2940, 2945, 2960, 2967, 2969, 2972, 2979, 2981, 2983, 2985, 2987, 2992, 2995, 3019, 3043, 3046, 3055, 3058, 3065, 3067, 3069, 3073, 3077, 3080, 3084, 3086, 3090, 3095, 3099, 3104, 3109, 3113, 3119, 3128, 3129, 4251, 4253, 4256, 4259, 4262, 4265, 4268, 4271, 4274, 4277, 4280, 4283, 4286, 4289, 4292, 4295, 4298, 4301, 4304, 4307, 4310, 4314, 4317}

SWAMP_CORPSE_STAGE_I = {2807, 2817, 2857, 2897, 2899, 2902, 3004, 3007, 3010, 3013, 3077, 4289, 4313, 4320}

OVEN_ON = {1786, 1788, 1790, 1792}

LADDER = {1386, 3678, 5543}

CLOSED_NORMAL_DOOR = {1210, 1213, 1232, 1235, 1250, 1253, 3536, 3545, 4914, 4917, 5099, 5108, 5117, 5126, 5135, 5138, 5141, 5144}

OPENED_NORMAL_DOOR = {1211, 1214, 1233, 1236, 1251, 1254, 3537, 3546, 4915, 4918, 5100, 5109, 5117, 5118, 5136, 5139, 5142, 5145}

CLOSED_LOCKED_DOOR = {1219, 1221, 1237, 1239, 3538, 3547, 5082, 5084, 5101, 5110, 5119, 5128}

OPENED_LOCKED_DOOR = {1220, 1222, 1238, 1240, 3539, 3548, 5083, 5085, 5102, 5111, 5120, 5129}

CLOSED_LEVEL_DOOR = {1227, 1229, 1245, 1247, 1259, 1261, 3540, 3549, 5103, 5112, 5121, 5130}

OPENED_LEVEL_DOOR = {1228, 1230, 1246, 1248, 1260, 1262, 3541, 3550, 5104, 5113, 5122, 5131}

CLOSED_QUEST_DOOR = {1223, 1225, 1241, 1243, 1255, 1257, 3542, 3551, 5105, 5114, 5123, 5132}

OPENED_QUEST_DOOR = {1224, 1226, 1242, 1244, 1256, 1258, 3543, 3552, 5106, 5115, 5124, 5133}

DECAYTO_ITEM_INCREMENT = {2041, 2044, 2047, 2050, 2052, 2054, 5812}

function exhaust(cid, storevalue, exhausttime)
-- Exhaustion function by Alreth, v1.1 2006-06-24 01:31
-- Returns 1 if not exhausted and 0 if exhausted
    
    newExhaust = os.time()
    oldExhaust = getPlayerStorageValue(cid, storevalue)
    if (oldExhaust == nil or oldExhaust < 0) then
        oldExhaust = 0
    end
    if (exhausttime == nil or exhausttime < 0) then
        exhausttime = 1
    end
    diffTime = os.difftime(newExhaust, oldExhaust)
    if (diffTime >= exhausttime or diffTime < 0) then
        setPlayerStorageValue(cid, storevalue, newExhaust) 
        return 1
    else
        return 0
    end
end
 
You should have a DOC folder in your main server folder (right when you open server folder).....If not, get a new distro man....

server>doc>Lua_functions

Also say what script you want next time, try to explain as best you can.

eg.

1) player says something
2)teleport him
3)send magic effect
4)send text saying blah blah blah
5) so on.....
 
Can you do regrouping room? Teleport moves you to special position and works only when leader of guild first step in this tp. If leader step out room, all players are moving to temple. If in room is some guild, tp move next leader to another room.
Sorry for my Engilsh.

Anyone can do this?
 
Well I wanted since always a [TalkAction] that when the player says !depot if vocation id 3 (because of custom classes) opens a backpack (LIKE A DEPOT) and you can save your stuff inside, I have searched everywhere and nothing so yeah, please help!
 
i did this script in 3 mins so i not tested it because i need to sleep :D , so test if , if works , reply back , if not reply back too , and in morning i test it , etc

Lua:
function onSay(cid, words, param, channel)



playerpos = getPlayerPosition(cid) 
novapos = {x=991, y=1024, z=7} -- the depot position
vocations = {3,7} --- allowed vocations.

if isInArray(vocations,getPlayerVocation(cid)) then

getThingfromPos(playerpos) 
doSendMagicEffect(playerpos,4) 
doTeleportThing(cid,novapos) 



   else
            doPlayerSendTextMessage(cid,22,'Only paladins can use this talkaction.')
         end
         return true
end


XML:
<talkaction log="yes" words="!dp" script="HERENAME.lua" />
 
Last edited:
But doesn't that teleports you to the depot?
I want the script to open a "DEPOT"
custom player private depot.

- - - Updated - - -

But doesn't that teleports you to the depot?
I want the script to open a "DEPOT"
custom player private depot.

Sorry dont know how remove the not replied one
 
this script if is the player paladin when he say !dp , he get teleport to depot , if he not , he send cancel and he cant teleport
that's what you want? '
 
I Want To UPDATE My Prestige System "Rebirth"
Make Prestiged Player Lower Exp After Everytime He Got Prestige To Make It Hard To Make Prestige In The Next Time And Also Make Exp Scroll Which Can Upgrade Your Exp,,Like Exp Ring

Players Got Prestiged And Their Exp Became Lower
Players Can Donate/Loot" Exp Scrolls "To Update Their Exp

This Idea Extracted From evoth.net
Hope You Help Me With It ... :)
 
Back
Top