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

Action [Fun Script] Roulette

Shawak

Intermediate OT User
Joined
Sep 11, 2008
Messages
1,984
Solutions
2
Reaction score
119
Location
Germany
GitHub
Shawak
Here a litle game about life and dead :D.

Map something like this ...
jh6jo1.jpg


Then paste script,
data/actions/scripts/roulette.lua
Lua:
--[[
--[[
	Russian Roulette
	by Maxi (Shawak)

]]--
	local positions = {
		{x = 1116, y = 1148, z = 7, stackpos = 253},
		{x = 1118, y = 1150, z = 7, stackpos = 253},
		{x = 1116, y = 1152, z = 7, stackpos = 253},
		{x = 1114, y = 1150, z = 7, stackpos = 253}
	}

local fight = createConditionObject(CONDITION_INFIGHT,24*60*60*1000)
function onUse(cid, item, frompos, item2, topos)

	local cfg = { active = 9995, speed = 200, addSpeed = 100, maxSpeed = 1100 }

	local cfg, active, speed, addSpeed, maxSpeed, player, ded_player_pos = cfg, cfg.active, cfg.speed, cfg.addSpeed, cfg.maxSpeed, {0, 0, 0, 0}, {}

	local player1 = getThingfromPos(positions[1])
	local player2 = getThingfromPos(positions[2])
	local player3 = getThingfromPos(positions[3])
	local player4 = getThingfromPos(positions[4])

	if getGlobalStorageValue(active) == 0 or getGlobalStorageValue(active) == -1 then
		if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then
			-- if getPlayerGroupId(player1) == 1 and getPlayerGroupId(player2) == 1 and getPlayerGroupId(player3) == 1 and getPlayerGroupId(player4) == 1 and isPlayer(player1) == TRUE and isPlayer(player2) == TRUE and isPlayer(player3) == TRUE and isPlayer(player4) == TRUE then
				setGlobalStorageValue(active, 1)
				for i = 1 ,4 do
					player[i] = getThingfromPos(positions[i])
					doAddCondition(player[i].uid, fight)
					doCreatureSetNoMove(player[i].uid, 1)
				end
				doSendAnimatedText(frompos,"~~GO!~~",180)
				addEvent(system,100,{cfg = cfg, player1 = player1, player2 = player2, player3 = player3, player4 = player4, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
			-- else
			-- 	doPlayerSendTextMessage(cid,18,"This game works only with players.")
			-- end
		else
			doPlayerSendTextMessage(cid,18,"You need 4 players.")
		end
	else
		doPlayerSendTextMessage(cid,18,"The game is already been running.")
	end
	return TRUE
end

function system(parameters)
	local cfg, player1, player2, player3, player4, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.player1, parameters.player2, parameters.player3, parameters.player4, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

	if speed < maxSpeed then
		addEvent(effect1,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	elseif speed >= maxSpeed then
		local player = {0, 0, 0, 0}
		local ded_player = getThingfromPos(ded_player_pos)
		doSendAnimatedText(ded_player_pos,"~~PENG~~",180)
		doCreatureAddHealth(ded_player.uid,-getCreatureHealth(ded_player.uid))
		for i = 1 ,4 do
			player[i] = getThingfromPos(positions[i])
			if player[i].itemid > 0 then
				doCreatureSetNoMove(player[i].uid, 0)
				doRemoveCondition(player[i].uid, CONDITION_INFIGHT)
			end
		end
		speed = cfg.speed
		addSpeed = cfg.addSpeed
		setGlobalStorageValue(active,0)
	end
	return TRUE
end

function effect1(parameters)
	local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

	if speed < maxSpeed then
		if math.random(1,25) <= 5 then
			speed = speed+addSpeed
		end
		doSendMagicEffect(positions[1],39)
		ded_player_pos = positions[1]
		addEvent(effect2,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	else
		addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	end
	return TRUE
end

function effect2(parameters)
	local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

	if speed < maxSpeed then
		if math.random(1,25) <= 5 then
			speed = speed+addSpeed
		end
		doSendMagicEffect(positions[2],39)
		ded_player_pos =  positions[2]
		addEvent(effect3,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	else
		addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	end
	return TRUE
end

function effect3(parameters)
	local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

	if speed < maxSpeed then
		if math.random(1,25) <= 5 then
			speed = speed+addSpeed
		end
		doSendMagicEffect(positions[3],39)
		ded_player_pos =  positions[3]
		addEvent(effect4,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	else
		addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	end
	return TRUE
end

function effect4(parameters)
	local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

	if speed < maxSpeed then
		if math.random(1,25) <= 5 then
			speed = speed+addSpeed
		end
		doSendMagicEffect(positions[4],39)
		ded_player_pos =  positions[4]
		addEvent(effect1,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	else
		addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
	end
	return TRUE
end

Then go to,
data/actions/actions.xml

HTML:
	<action actionid="8888" event="script" value="roulette.lua"/>

After that, give the items in the midle of the 4 Positions (set them in roulette.lua) the actionID 8888.

WARNING:


If you have any error with playerdeath.lua, use this one.

Lua:
local config = {
	deathListEnabled = getBooleanFromString(getConfigInfo('deathListEnabled')),
	sqlType = getConfigInfo('sqlType'),
	maxDeathRecords = getConfigInfo('maxDeathRecords')
}

config.sqlType = config.sqlType == "sqlite" and DATABASE_ENGINE_SQLITE or DATABASE_ENGINE_MYSQL

function onDeath(cid, corpse, lastHitKiller, mostDamageKiller)
	if(config.deathListEnabled ~= TRUE) then
		return
	end

	local hitKillerName = "field item"
	local damageKillerName = ""
	if(lastHitKiller ~= FALSE) then
		if(isPlayer(lastHitKiller) == TRUE) then
			hitKillerName = getPlayerGUID(lastHitKiller)
		elseif(isMonster(lastHitKiller) == TRUE) then
			hitKillerName = getCreatureName(lastHitKiller)
		end

		if(mostDamageKiller ~= FALSE and mostDamageKiller ~= lastHitKiller and getCreatureName(mostDamageKiller) ~= getCreatureName(lastHitKiller)) then
			if(isPlayer(mostDamageKiller) == TRUE) then
				damageKillerName = getPlayerGUID(mostDamageKiller)
			elseif(isMonster(mostDamageKiller) == TRUE) then
				damageKillerName = getCreatureName(mostDamageKiller)
			end
		end
	end

	db.executeQuery("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `altkilled_by`) VALUES (" .. getPlayerGUID(cid) .. ", " .. os.time() .. ", " .. getPlayerLevel(cid) .. ", " .. db.escapeString(hitKillerName) .. ", " .. db.escapeString(damageKillerName) .. ");")
	local rows = db.getResult("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";")
	if(rows:getID() ~= -1) then
		local amount = rows:getRows(true) - config.maxDeathRecords
		if(amount > 0) then
			if(config.sqlType == DATABASE_ENGINE_SQLITE) then
				for i = 1, amount do
					db.executeQuery("DELETE FROM `player_deaths` WHERE `rowid` = (SELECT `rowid` FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT 1);")
				end
			else
				db.executeQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. getPlayerGUID(cid) .. " ORDER BY `time` LIMIT " .. amount .. ";")
			end
		end
	end
end

It's for TFS 0.3.4.
I hope you like it :thumbup:.

Regards,
Shawak
 
Last edited:
how i can add that after a player die, the 3 players left go teleported to a room =p?
 
how i can add that after a player die, the 3 players left go teleported to a room =p?

Lua:
  --[[
        Russian Roulette
        by Maxi (Shawak)

]]--
	local newPos = {x=XXX,y=YYY,z=Z} -- position there you get teleportet after win the game

        local positions = {
        ----------------------------------------------------------------------
        ---------------- CONFIG ----------------------------------------------
        ----------------------------------------------------------------------

                {x = 1116, y = 1148, z = 7, stackpos = 253},
                {x = 1118, y = 1150, z = 7, stackpos = 253},
                {x = 1116, y = 1152, z = 7, stackpos = 253},
                {x = 1114, y = 1150, z = 7, stackpos = 253},

        ----------------------------------------------------------------------
        ---------------- CONFIG END ------------------------------------------
        ----------------------------------------------------------------------
        }

local fight = createConditionObject(CONDITION_INFIGHT,24*60*60*1000)
function onUse(cid, item, frompos, item2, topos)
        local cfg = { active = 9999, speed = 200, addSpeed = 100, maxSpeed = 1100 }
        local cfg, active, speed, addSpeed, maxSpeed, player, ded_player_pos = cfg, cfg.active, cfg.speed, cfg.addSpeed, cfg.maxSpeed, {0, 0, 0, 0}, {}
        local player1 = getThingfromPos(positions[1])
        local player2 = getThingfromPos(positions[2])
        local player3 = getThingfromPos(positions[3])
        local player4 = getThingfromPos(positions[4])

        if getGlobalStorageValue(active) == 0 or getGlobalStorageValue(active) == -1 then
                if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then
                        -- if getPlayerGroupId(player1) == 1 and getPlayerGroupId(player2) == 1 and getPlayerGroupId(player3) == 1 and getPlayerGroupId(player4) == 1 and isPlayer(player1) == TRUE and isPlayer(player2) == TRUE and isPlayer(player3) == TRUE and isPlayer(player4) == TRUE then
                                setGlobalStorageValue(active, 1)
                                for i = 1 ,4 do
                                        player[i] = getThingfromPos(positions[i])
                                        doAddCondition(player[i].uid, fight)
                                        doCreatureSetNoMove(player[i].uid, 1)
                                end
                                doSendAnimatedText(frompos,"~~GO!~~",180)
                                addEvent(system,100,{cfg = cfg, player1 = player1, player2 = player2, player3 = player3, player4 = player4, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
                        -- else
                        --      doPlayerSendTextMessage(cid,18,"This game works only with players.")
                        -- end
                else
                        doPlayerSendTextMessage(cid,18,"You need 4 players.")
                end
        else
                doPlayerSendTextMessage(cid,18,"The game is already been running.")
        end
        return TRUE
end

function system(parameters)
        local cfg, player1, player2, player3, player4, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.player1, parameters.player2, parameters.player3, parameters.player4, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

        if speed < maxSpeed then
                addEvent(effect1,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        elseif speed >= maxSpeed then
                local player = {0, 0, 0, 0}
                local ded_player = getThingfromPos(ded_player_pos)
                doSendAnimatedText(ded_player_pos,"~~PENG~~",180)
                doCreatureAddHealth(ded_player.uid,-getCreatureHealth(ded_player.uid))
                for i = 1 ,4 do
                        player[i] = getThingfromPos(positions[i])
                        if player[i].itemid > 0 then
                                doCreatureSetNoMove(player[i].uid, 0)
                                doRemoveCondition(player[i].uid, CONDITION_INFIGHT)
				doTeleportThing(player[i].uid ,newPos)
                        end
                end
                speed = cfg.speed
                addSpeed = cfg.addSpeed
                setGlobalStorageValue(active,0)
        end
        return TRUE
end

function effect1(parameters)
        local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

        if speed < maxSpeed then
                if math.random(1,25) <= 5 then
                        speed = speed+addSpeed
                end
                doSendMagicEffect(positions[1],39)
                ded_player_pos = positions[1]
                addEvent(effect2,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        else
                addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        end
        return TRUE
end

function effect2(parameters)
        local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

        if speed < maxSpeed then
                if math.random(1,25) <= 5 then
                        speed = speed+addSpeed
                end
                doSendMagicEffect(positions[2],39)
                ded_player_pos =  positions[2]
                addEvent(effect3,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        else
                addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        end
        return TRUE
end

function effect3(parameters)
        local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

        if speed < maxSpeed then
                if math.random(1,25) <= 5 then
                        speed = speed+addSpeed
                end
                doSendMagicEffect(positions[3],39)
                ded_player_pos =  positions[3]
                addEvent(effect4,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        else
                addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        end
        return TRUE
end

function effect4(parameters)
        local cfg, positions, active, speed, addSpeed, maxSpeed, ded_player_pos  = parameters.cfg, parameters.positions, parameters.active, parameters.speed, parameters.addSpeed, parameters.maxSpeed, parameters.ded_player_pos

        if speed < maxSpeed then
                if math.random(1,25) <= 5 then
                        speed = speed+addSpeed
                end
                doSendMagicEffect(positions[4],39)
                ded_player_pos =  positions[4]
                addEvent(effect1,speed,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        else
                addEvent(system,100,{cfg = cfg, positions = positions, active = active, speed = speed, addSpeed = addSpeed, maxSpeed = maxSpeed, ded_player_pos = ded_player_pos})
        end
        return TRUE
end

I added it for you, change..
Lua:
local newPos = {x=XXX,y=YYY,z=Z}
.. to your position.

Regards,
Shawak
 
Last edited:
Ok, explain what it is lol

Its an effect that go from player 1 to player 2, then to player 3, then the effect go to player 4 and then to player 1 again.

The effekt becomes slower and stop by a player, <- the player die :).

Regards,
Shawak
 
This script doesnt even work, It constantly says the game has been already running.
 
Change..
Code:
        local cfg = { active = [COLOR="Red"]9999[/COLOR], speed = 200, addSpeed = 100, maxSpeed = 1100 }
9999 to any other number, example: 9998.

Regards,
Shawak
 
Last edited:
[04/08/2009 03:49:22] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/roulette.lua)
[04/08/2009 03:49:22] data/actions/scripts/roulette.lua:2: nesting of [[...]] is deprecated near '['


Huh?
 
that wasn't fun for a while:(

now i got this..

Code:
[04/08/2009 04:01:06] Lua Script Error: [MoveEvents Interface] 
[04/08/2009 04:01:06] data/movements/scripts/tiles.lua:onStepIn

[04/08/2009 04:01:06] data/movements/scripts/tiles.lua:99: attempt to compare number with nil
[04/08/2009 04:01:06] stack traceback:
[04/08/2009 04:01:06] 	data/movements/scripts/tiles.lua:99: in function <data/movements/scripts/tiles.lua:10>
 
Back
Top