Shawak
Intermediate OT User
Here a litle game about life and dead .
Map something like this ...
Then paste script,
data/actions/scripts/roulette.lua
Then go to,
data/actions/actions.xml
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.
It's for TFS 0.3.4.
I hope you like it :thumbup:.
Regards,
Shawak
Map something like this ...
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: