dunnish
New Member
- Joined
- Jun 18, 2009
- Messages
- 268
- Solutions
- 1
- Reaction score
- 2
Hello! im get this error and not sure about them.
data/globalevents/scripts/botmanager.lua
data/lib/105-bot_nowy.lua
Code:
[Error - GlobalEvent Interface]
In a timer event called from:
data/globalevents/scripts/botmanager.lua:onStartup
Description:
(luaSetPlayerModes) Player not found
[Error - GlobalEvent Interface]
In a timer event called from:
data/globalevents/scripts/botmanager.lua:onStartup
Description:
(luaDoTeleportThing) Thing not found
[Error - GlobalEvent Interface]
In a timer event called from:
data/globalevents/scripts/botmanager.lua:onStartup
Description:
(luaSetLastFrags) Creature not found
[Error - GlobalEvent Interface]
In a timer event called from:
data/globalevents/scripts/botmanager.lua:onStartup
Description:
(internalGetPlayerInfo) Player not found when requesting player info #19
[Error - GlobalEvent Interface]
In a timer event called from:
data/globalevents/scripts/botmanager.lua:onStartup
Description:
data/lib/105-bot_nowy.lua:516: attempt to concatenate a boolean value
stack traceback:
data/lib/105-bot_nowy.lua:516: in function 'setBotActive'
data/globalevents/scripts/botmanager.lua:50: in function <data/globalevents/scripts/botmanager.lua:48>
data/globalevents/scripts/botmanager.lua
Lua:
local keepOnline = 50
local maxChange = 3
function onThink(interval, lastExecution, thinkInterval)
keepOnline = math.min(100, math.max(keepOnline+math.random(-1,1), 20))
local online = getPlayersOnline()
local botsOnline = {}
local botsOffline = {}
local playersOnline = {}
for _, cid in pairs(online) do
doPlayerFeed(cid, 9999)
if(isBot(cid) and isBotActive(cid)) then
table.insert(botsOnline, cid)
elseif(not isBot(cid)) then
table.insert(playersOnline, cid)
else
table.insert(botsOffline, cid)
end
end
print("BOTS: " .. #botsOnline .. " (" .. keepOnline .. "), P: " .. #playersOnline)
if(#playersOnline+#botsOnline > keepOnline) then
if(#botsOnline > 0) then
local toRemove = math.min(maxChange, #playersOnline+#botsOnline-keepOnline)
for i = 1, toRemove do
for i, bot in pairs(botsOnline) do
if(getTileInfo(getThingPosition(bot)).protection) then
setBotActive(bot, false)
table.remove(botsOnline, i)
break
end
end
end
end
elseif(#playersOnline+#botsOnline < keepOnline) then
for i = 1, maxChange do
if(#playersOnline+#botsOnline+i <= keepOnline) then
for i, bot in pairs(botsOffline) do
setBotActive(bot, true)
table.remove(botsOffline, i)
break
end
end
end
end
return true
end
function setBotDelayed(name)
setBot(getPlayerByName(name), 1)
setBotActive(getPlayerByName(name), false)
end
function onStartup()
for i=1,200 do
loadPlayer(getBotNameByID(i))
addEvent(setBotDelayed, 1000, getBotNameByID(i))
end
return true
end
Lua:
friendGUIDrange = 10
b_intervals = {}
b_current_floor = {}
b_exhaust_change_floor = {}
b_exhaust_healing = {}
b_exhaust_aggresive = {}
b_exhaust_item = {}
b_possible_targets = {}
b_last_target_change = {}
b_last_attack = {}
b_ignored = {}
b_last_point = {}
b_current_route = {}
b_current_route_point = {}
b_current_route_direction = {}
b_running_away = {}
b_attackersLastSec = {}
b_names = {"Afiliado Do Devilware","Crystalina","Account Managier","Deadpoll","Pally Infernal","Yosemite Sam","Kaizem","Black Kniight","Toddy Nouxy","Matheus Walker","Jhoni Walker","Magnus Infernal","Mc Daleste","Eternal Sorx","Thor Paladin","Tonha Diaba","Eco Cachacero","Demon Holy","Palladina Linda","Forever","Favela Owns","Bruno Rusha'rp","Homer Simpsonp"}
-- trappor
b_stairs = {
{x = 1013, y = 974, z = 7},
{x = 1013, y = 974, z = 6},
{x = 1030, y = 979, z = 6},
{x = 995, y = 1018, z = 6},
{x = 996, y = 1018, z = 6},
{x = 998, y= 998, z = 7},
{x = 998, y = 998, z = 6},
{x = 1000, y = 985, z = 6},
{x = 1030, y = 979, z = 7},
{x=998,y=1002,z=6},
{x=960,y=974,z=7},
{x=960,y=974,z=6},
{x=926,y=947,z=7}
}
tmp_routes = {
{{x = 1009, y = 1000, z = 7},{x = 1020, y = 996, z = 7},{x=1022,y=992,z=7},{x=1022,y=989,z=7},{x=1022,y=985,z=7},{x = 1022, y = 981, z = 7},{x = 1013, y = 974, z = 7}},
{{x = 1017, y = 976, z = 6},{x = 1029, y = 977, z = 6},{x = 1040, y = 980, z = 6},{x = 1042, y = 985, z = 6},{x = 1042, y = 992, z = 6},{x = 1041, y = 999, z = 6},{x = 1031, y = 1009, z = 6},{x = 1022, y = 1013, z = 6},{x = 1015, y = 1018, z = 6},{x = 1015, y = 1021, z = 6},{x = 1008, y = 1021, z = 6},{x = 1003, y = 1025, z = 6},{x = 997, y = 1025, z = 6},{x = 994, y = 1021, z = 6},{x=998,y=1009,z=7},{x=993,y=1013,z=7},{x=1003,y=1008,z=7},{x=1009,y=1003,z=7}},
{{x = 987, y = 1011, z = 6}},
{{x=952,y=953,z=6},{x=952,y=949,z=6},{x=952,y=946,z=6},{x=947,y=946,z=6},{x=942,y=946,z=6},{x=937,y=946,z=6},{x=931,y=946,z=6},{x=931,y=950,z=6},{x=931,y=956,z=6},{x=927,y=959,z=6},{x=919,y=959,z=6},{x=923,y=960,z=6},{x=928,y=960,z=6}},
{{x=940,y=960,z=6},{x=940,y=960,z=6},{x=952,y=960,z=6},{x=958,y=960,z=6},{x=964,y=955,z=6},{x=967,y=951,z=6},{x=973,y=951,z=6}},
{{x=963,y=946,z=6},{x=962,y=946,z=6},{x=962,y=942,z=6},{x=963,y=938,z=6},{x=963,y=934,z=6},{x=963,y=929,z=6},{x=964,y=926,z=6},{x=964,y=922,z=6}, {x=963,y=916,z=6}},
{{x=989,y=1004,z=7},{x=991,y=1001,z=7},{x=991,y=996,z=7},{x=991,y=993,z=7}},
{{x=987,y=989,z=7},{x=988,y=985,z=7},{x=989,y=983,z=7},{x=984,y=980,z=7},{x=980,y=978,z=7},{x=976,y=976,z=7},{x=972,y=975,z=7},{x=968,y=974,z=7},{x=963,y=974,z=7}},
{{x=959,y=974,z=6},{x=954,y=974,z=6},{x=950,y=974,z=6},{x=945,y=975,z=6},{x=943,y=971,z=6},{x=943,y=967,z=6},{x=943,y=964,z=6},{x=943,y=961,z=6},{x=943,y=959,z=6}},
{{x=942,y=960,z=6},{x=942,y=964,z=6},{x=944,y=968,z=6},{x=944,y=971,z=6},{x=946,y=974,z=6},{x=950,y=974,z=6},{x=956,y=974,z=6}},
{{x=963,y=974,z=7},{x=968,y=976,z=7},{x=972,y=976,z=7},{x=978,y=978,z=7},{x=984,y=979,z=7},{x=984,y=983,z=7},{x=987,y=988,z=7},{x=993,y=992,z=7},{x=999,y=992,z=7},{x=1005,y=994,z=7},{x=1010,y=996,z=7}}
}
for _, pos in pairs(b_stairs) do
table.insert(tmp_routes, {pos})
end
b_points = {}
b_routes = {}
for routeID, routePoints in pairs(tmp_routes) do
table.insert(b_routes, {})
for _, point in pairs(routePoints) do
table.insert(b_points, point)
table.insert(b_routes[routeID], #b_points)
end
end
b_points_routes = {}
for routeID, routePoints in pairs(b_routes) do
for _, pointID in pairs(routePoints) do
b_points_routes[pointID] = routeID
end
end
function setCurrentRoute(guid, newRoute)
b_current_route[guid] = newRoute
end
function getCurrentRoute(guid) -- return number
if(b_current_route[guid] == nil) then
return 1
else
return b_current_route[guid]
end
end
function setCurrentRoutePoint(guid, newRoutePoint)
b_current_route_point[guid] = newRoutePoint
end
function getCurrentRoutePoint(guid) -- return number
if(b_current_route_point[guid] == nil) then
return 1
else
return b_current_route_point[guid]
end
end
function setCurrentRouteDirection(guid, newRouteDirection)
b_current_route_direction[guid] = newRouteDirection
end
function getCurrentRouteDirection(guid) -- return number
if(b_current_route_direction[guid] == nil) then
return 1
else
return b_current_route_direction[guid]
end
end
function chooseClosestRoute(pos, cid, guid)
--print('szuka ' .. guid)
local closePositions = {}
local closePositionsSameRoute = {}
local dist = 0
for pointID, pointPos in pairs(b_points) do
dist = getDistanceBetween(pos, pointPos)
if(dist < 10) then
if(b_points_routes[pointID] ~= getCurrentRoute(guid)) then
table.insert(closePositions, pointID)
else
table.insert(closePositionsSameRoute, pointID)
end
end
end
local pointID = 0
local b_rand = 0
while(#closePositions > 0) do
b_rand = math.random(1, #closePositions)
pointID = closePositions[b_rand]
if(canGoTo(cid, b_points[pointID], 0, 1, 1, 1, 12)) then
setCurrentRoute(guid, b_points_routes[pointID])
local pointOfRoute = 1
for routePointID, routePoint in pairs(b_routes[b_points_routes[pointID]]) do
if(routePoint == pointID) then
pointOfRoute = routePointID
break
end
end
setCurrentRoutePoint(guid, pointOfRoute)
if(pointOfRoute >= #b_routes[b_points_routes[pointID]] / 2) then
setCurrentRouteDirection(guid, -1)
else
setCurrentRouteDirection(guid, 1)
end
return pointID
end
table.remove(closePositions, b_rand)
end
if(canGoTo(cid, b_points[b_routes[getCurrentRoute(guid)][getCurrentRoutePoint(guid)]], 0, 1, 1, 1, 12)) then
if(getCurrentRouteDirection(guid) == 1) then
setCurrentRouteDirection(guid, -1)
else
setCurrentRouteDirection(guid, 1)
end
return b_points[b_routes[getCurrentRoute(guid)][getCurrentRoutePoint(guid)]]
end
return 0
end
function reachDestinationPoint(guid, pos)
local walkToPos = b_points[b_routes[getCurrentRoute(guid)][getCurrentRoutePoint(guid)]]
return (getDistanceBetween(walkToPos, pos) <= 1)
end
function updateInterval(guid)
if(b_intervals[guid] == nil) then
b_intervals[guid] = -1
end
b_intervals[guid] = b_intervals[guid] + 1
end
function checkInterval(guid, num)
return (b_intervals[guid] % num == 0)
end
function useHeal(cid, guid, manaCost, health, mana, text, anim, isHeal, isItem)
if(health) then
doCreatureAddHealth(cid, math.ceil(math.random(health[1], health[2])))
end
if(mana) then
doCreatureAddMana(cid, math.ceil(math.random(mana[1], mana[2])))
end
doSendMagicEffect(getThingPos(cid), anim)
doCreatureSay(cid, text, TALKTYPE_ORANGE_1)
if(manaCost > 0) then
doCreatureAddMana(cid, -manaCost, false)
end
if(isHeal) then
setExhaustHealing(guid, 1000)
end
if(isItem) then
setExhaustItem(guid, 1000)
end
end
function useBestHealing(cid, guid)
local exItem = isExhaustItem(guid)
local exHeal = isExhaustHealing(guid)
local level = getPlayerLevel(cid)
local voc = getPlayerVocation(cid)
if(voc == 1 or voc == 2) then
if(getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 90) then
if(not exHeal and math.random(1,2) == 1 and getCreatureMana(cid) > 160) then
-- exura vita
useHeal(cid, guid, 160, {150,300}, nil, "exura vita", CONST_ME_MAGIC_BLUE, true, false)
end
elseif(not exItem and (getCreatureMaxMana(cid) - getCreatureMana(cid) > 850 or (getCreatureMaxMana(cid) - getCreatureMana(cid) > 50 and math.random(1,4) == 2))) then
if(level >= 80) then
-- great mana potion
useHeal(cid, guid, 0, nil, {200,300}, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
else
-- strong mana potion
useHeal(cid, guid, 0, nil, {150,230}, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
end
end
elseif(voc == 3) then
if(not exItem and level > 80 and getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 250 and getCreatureMaxMana(cid) - getCreatureMana(cid) > 150) then
-- great spirit potion
useHeal(cid, guid, 0, {200,400}, {110,190}, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
elseif(getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 50) then
if(not exHeal and math.random(1,2) == 1 and getCreatureMana(cid) > 210) then
-- exura san
useHeal(cid, guid, 210, {450,600}, nil, "exura san", CONST_ME_MAGIC_BLUE, true, false)
elseif(not exItem) then
-- strong health potion
useHeal(cid, guid, 0, {200,400}, nil, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
end
elseif(not exItem and getCreatureMaxMana(cid) - getCreatureMana(cid) > 150) then
-- strong mana potion
useHeal(cid, guid, 0, nil, {150,230}, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
end
elseif(voc == 4) then
if(getCreatureMaxHealth(cid) - getCreatureHealth(cid) > 250) then
if(not exItem and level >= 130) then
-- ultimate health potion
useHeal(cid, guid, 0, {800,1000}, nil, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
elseif(not exItem and level >= 80) then
-- great health potion
useHeal(cid, guid, 0, {500,700}, nil, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
elseif(not exItem) then
-- strong health potion
useHeal(cid, guid, 0, {200,400}, nil, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
end
elseif(not exItem and getCreatureMaxMana(cid) - getCreatureMana(cid) > 150) then
useHeal(cid, guid, 0, nil, {70,130}, "Aaaah...", CONST_ME_MAGIC_BLUE, false, true)
end
end
end
sudden_death = createCombatObject()
setCombatParam(sudden_death, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(sudden_death, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(sudden_death, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(sudden_death, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(sudden_death, COMBAT_FORMULA_LEVELMAGIC, -1, -60, -1, -60, 5, 5, 4, 7)
function castBestAttackingSpell(cid, guid)
local ppos = getThingPosition(cid)
local exItem = isExhaustItem(guid)
local exAggr = isExhaustAggresive(guid)
local level = getPlayerLevel(cid)
local voc = getPlayerVocation(cid)
local mana = getCreatureMana(cid)
local targetCid = getCreatureTarget(cid)
local targetPos = getThingPosition(targetCid)
local target = numberToVariant(targetCid)
if(voc == 1) then
if(not exAggr and checkInterval(guid, 25 + guid % 13) and math.random(1, 5) == 1 and getCreatureMana(cid) - mana < 200) then
local friends = 0
local foes = 0
for _, guyInRange in pairs(getSpectators(ppos, 5,5,false)) do
if(isPlayer(guyInRange)) then
if(isBot(guyInRange) and math.abs(getPlayerGUID(guyInRange) - guid) < friendGUIDrange) then
friends = friends + 1
else
foes = foes + 1
end
end
end
if(friends < foes and friends < 3) then
doCombat(cid, combatTS, target)
doCreatureAddMana(cid, -650, false)
setExhaustAggresive(guid, 2000)
doCreatureSay(cid, "exevo gran mas vis", TALKTYPE_ORANGE_1)
end
end
if(not exItem and not exAggr and getDistanceBetween(targetPos, ppos) <= 7 and isSightClear(targetPos, ppos, 1)) then
doCombat(cid, sudden_death, target)
setExhaustItem(guid, 1000)
setExhaustAggresive(guid, 2000)
setLastAttack(getPlayerGUID(cid), os.time())
end
elseif(voc == 2) then
if(not exItem and not exAggr and getDistanceBetween(targetPos, ppos) <= 7 and isSightClear(targetPos, ppos, 1)) then
doCombat(cid, sudden_death, target)
setExhaustItem(guid, 1000)
setExhaustAggresive(guid, 2000)
setLastAttack(getPlayerGUID(cid), os.time())
end
elseif(voc == 3) then
if(not exAggr and mana >= 25 and getDistanceBetween(targetPos, ppos) <= 6 and isSightClear(targetPos, ppos, 1)) then
doCombat(cid, combatMELLETHROW, target)
doCreatureAddMana(cid, -25, false)
setExhaustAggresive(guid, 2000)
doCreatureSay(cid, "exori con", TALKTYPE_ORANGE_1)
end
elseif(voc == 4) then
if(not exAggr and mana >= 40 and getDistanceBetween(targetPos, ppos) <= 7 and isSightClear(targetPos, ppos, 1)) then
doCombat(cid, combatMELLETHROW, target)
doCreatureAddMana(cid, -40, false)
setExhaustAggresive(guid, 2000)
setLastAttack(getPlayerGUID(cid), os.time())
doCreatureSay(cid, "exori hur", TALKTYPE_ORANGE_1)
elseif(not exAggr and mana >= 340 and getDistanceBetween(targetPos, ppos) < 2) then
doCombat(cid, combatFBER, target)
doCreatureAddMana(cid, -340, false)
setExhaustAggresive(guid, 2000)
doCreatureSay(cid, "exori gran", TALKTYPE_ORANGE_1)
elseif(not exAggr and mana >= 115 and getDistanceBetween(targetPos, ppos) < 2) then
doCombat(cid, combatBER, target)
doCreatureAddMana(cid, -115, false)
setExhaustAggresive(guid, 2000)
doCreatureSay(cid, "exori", TALKTYPE_ORANGE_1)
end
end
end
function setExhaustChangeFloor(guid, exhaust)
b_exhaust_change_floor[guid] = getTime() + exhaust
end
function isExhaustChangeFloor(guid)
return (b_exhaust_change_floor[guid] ~= nil and b_exhaust_change_floor[guid] > getTime())
end
function setExhaustHealing(guid, exhaust)
b_exhaust_healing[guid] = getTime() + exhaust
end
function isExhaustHealing(guid)
return (b_exhaust_healing[guid] ~= nil and b_exhaust_healing[guid] > getTime())
end
function setExhaustAggresive(guid, exhaust)
b_exhaust_aggresive[guid] = getTime() + exhaust
end
function isExhaustAggresive(guid)
return (b_exhaust_aggresive[guid] ~= nil and b_exhaust_aggresive[guid] > getTime())
end
function setExhaustItem(guid, exhaust)
b_exhaust_item[guid] = getTime() + exhaust
end
function isExhaustItem(guid)
return (b_exhaust_item[guid] ~= nil and b_exhaust_item[guid] > getTime())
end
function setCurrentFloor(guid, newCurrentFloor)
b_current_floor[guid] = newCurrentFloor
end
function isCurrentFloor(guid, currentFloor)
return (b_current_floor[guid] ~= nil and b_current_floor[guid] == currentFloor)
end
function getPossibleTargets(guid) -- return nil or table
return b_possible_targets[guid]
end
function updatePossibleTargets(guid, pos)
b_possible_targets[guid] = getSpectators(pos, 8, 6, false)
end
function setNewTarget(cid, guid, newTarget) -- return true/false
if(doPlayerSetTarget(cid, newTarget)) then
setLastAttack(guid, os.time())
setLastTargetChange(guid, os.time())
setPlayerModes(cid, 1,1,1)
return true
else
return false
end
end
function setLastAttack(guid, newTime)
b_last_attack[guid] = newTime
end
function getLastAttack(guid) -- return number
if(b_last_attack[guid] == nil) then
return 0
else
return b_last_attack[guid]
end
end
function setRunningAway(guid, value)
b_running_away[guid] = os.time() + value
end
function isRunningAway(guid)
if(b_running_away[guid] == nil) then
return false
else
return b_running_away[guid] >= os.time()
end
end
function setLastTargetChange(guid, newTime)
b_last_target_change[guid] = newTime
end
function getLastTargetChange(guid) -- return number
if(b_last_target_change[guid] == nil) then
return 0
else
return b_last_target_change[guid]
end
end
function isChangeTargetRequired(cid, guid)
if(getCreatureTarget(cid) == 0) then
return true
elseif(os.time() - getLastTargetChange(guid) > 4 and os.time() - getLastAttack(guid) > 4) then -- jesli atakuje od 4 sekund i nie moze ranic
addIgnored(guid, getCreatureTarget(cid), 12)
return true
elseif(getCreatureTarget(cid) > 0) then -- czy nie wali jednego za dlugo
--print(getCreatureTarget(cid))
--print('tc' ..os.time() - getLastTargetChange(guid))
--print('a' .. os.time() - getLastAttack(guid))
return false
else
return false
end
end
function addIgnored(guid, pid, ignoreTime)
if(ignoreTime == nil) then
ignoreTime = 5
end
if(b_ignored[guid] == nil) then
b_ignored[guid] = {}
end
b_ignored[guid][pid] = os.time() + ignoreTime
end
function resetIgnored(guid)
b_ignored[guid] = {}
end
function updateIgnored(guid)
if(b_ignored[guid] == nil) then
b_ignored[guid] = {}
end
for pid, ignoreTime in pairs(b_ignored[guid]) do
if ignoreTime <= os.time() then
b_ignored[guid][pid] = nil
end
end
end
function isIgnored(guid, pid)
if(b_ignored[guid] == nil) then
b_ignored[guid] = {}
end
if b_ignored[guid][pid] ~= nil then
return true
else
return false
end
end
function getTries(cid)
return math.max(0, getCreatureStorage(cid, 59431))
end
function setTries(cid, value)
doCreatureSetStorage(cid, 59431, value)
end
function isBot(cid)
return (getCreatureStorage(cid, 59432) ~= -1)
end
function setBot(cid, bot)
setPlayerModes(cid, 1,1,1)
return doCreatureSetStorage(cid, 59432, bot)
end
function isBotActive(cid)
return (getCreatureStorage(cid, 59433) > -1)
end
function setBotActive(cid, active)
setPlayerModes(cid, 1,1,1)
if(active) then
recalculateHPandMana(cid)
doTeleportThing(cid, getTownTemplePosition(math.random(1, 5)))
doCreatureSetStorage(cid, 59433, 1)
db.executeQuery("UPDATE `players` SET `online` = 1 WHERE `id` = " .. getPlayerGUID(cid) .. ";")
else
recalculateHPandMana(cid)
doTeleportThing(cid, {x = 12, y = 139, z = 5})
doCreatureSetStorage(cid, 59433, -1)
setTmpDeaths(cid, 0)
setTmpAssists(cid, 0)
setTmpFrags(cid, 0)
setLastAssists(cid, 0)
setLastFrags(cid, 0)
db.executeQuery("UPDATE `players` SET `online` = 0, `tmp_kills` = 0, `tmp_deaths` = 0, `tmp_assists` = 0 WHERE `id` = " .. getPlayerGUID(cid) .. ";")
--db.executeQuery("UPDATE `players` SET `online` = 0, `tmp_kills` = 0, `tmp_deaths` = 0, `tmp_assists` = 0 WHERE `id` = " .. getPlayerGUID(cid) .. ";")
end
end
function getBotNameByID(id)
return b_names[id]
end
--[[
function
end
function
end
function
end
]]
l = loadPlayer
s = setBot
g = getPlayerByName
function b(name)
setBot(getPlayerByName("nob" .. name), 1)
end
function a(number)
loadPlayer("nob" .. number)
end