What's new

Lua Functions Skrypt masowej teleportacji

Status
Not open for further replies.

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
Pomys? narodzi? si? w tym temacie:
Link do tematu z pomys?em

Szukamy pliku 050-function.lua w data/lib i na samym ko?cu wklejamy:
PHP:
function isWalkable(pos, creature, proj, pz) 
if getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).itemid == 0 then return false end 
if getTopCreature(pos).uid > 0 and creature then return false end 
if getTileInfo(pos).protection and pz then return false, true end 
local n = not proj and 3 or 2 
for i = 0, 255 do 
    pos.stackpos = i 
    local tile = getTileThingByPos(pos) 
    if tile.itemid ~= 0 and not isCreature(tile.uid) then 
        if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then 
            return false 
        end 
    end 
end 
return true 
end 

local _f = doTeleportThing 
function doTeleportThing(cid, newpos, pushmove, ignoreBlocking) 
    return (ignoreBlocking or isWalkable(newpos, false, true, false) or false) and _f(cid, newpos, pushmove) 
end 

function getFreeTile(pos, rangeX, rangeY, ignoreCreature) 
for x = 0, rangeX * 2 do 
    for y = 0, rangeY * 2 do 
        pos.x = pos.x + (x > rangeX and -x + rangeX or x) 
        pos.y = pos.y + (y > rangeY and -y + rangeX or y) 
        if isWalkable(pos, ignoreCreature, true, false) then 
            return pos 
        end 
    end 
end 
return false 
end 

function doTeleportMassThings(leftTopCorner, rightBottomCorner, newPos, minPlayerCount, toSameNewPos, teleportOnlyPlayer) 
local rangeX, rangeY = math.abs(rightBottomCorner.x - leftTopCorner.x)/2, math.abs(rightBottomCorner.y - leftTopCorner.y)/2 
local center, player = {x=leftTopCorner.x+rangeX,y=rightBottomCorner.y-rangeY}, {} 
for z = math.min(leftTopCorner.z, rightBottomCorner.z), math.max(leftTopCorner.z, rightBottomCorner.z) do 
    center.z = z 
    if getSpectators(center, rangeX, rangeY) then 
        for _, cid in pairs(getSpectators(center, rangeX, rangeY)) do 
            table.insert(player, cid) 
        end 
    end 
end 
if #player >= minPlayerCount then 
    for _, cid in pairs(player) do 
        local newPos = (toSameNewPos and newPos or getFreeTile(newPos, 5, 5, true)) 
        if newPos and (teleportOnlyPlayer and isPlayer(cid) or isCreature(cid)) then 
            doTeleportThing(cid, newPos, true, true) 
        else 
            print('ERROR: [newPos value is false or some object is not a creature].') 
        end 
    end 
end 
return true 
end

Od teraz mo?emy si? cieszy? now? funkcj? masowej teleportacji.
Jak to dzia?a? Ju? t?umacz?:
PHP:
doTeleportMassThings(leftTopCorner, rightBottomCorner, newPos, minPlayerCount, toSameNewPos, teleportOnlyPlayer)
leftTopCorner to lewy g?rny r?g kwadratu, z kt?rego ma pobiera? wszystkie obiekty, na pozycji 'z' mo?ecie wpisa? od lub do kt?rego pi?tra ma wy?apywa? obiekty.
rightBottomCorner jak wy?ej tylko jest to prawy dolny r?g kwadratu, tutaj tak samo z pozycj? 'z' jak w powy?szej zmiennej.
newPos pozycja, na kt?r? b?dzie teleportowa? wszystkie obiekty znalezione wcze?niej.
minPlayerCount opcjonalne, minimalna ilo?? obiekt?w by teleportacja si? powiod?a.
toSameNewPos czy ma wszystkich teleportowa? na jedn? kratk? czy w okre?lonej przestrzeni.
teleportOnlyPlayer czy ma teleportowa? tylko graczy czy NPCty i potwory tak?e
 

Shires29

User
Joined
Apr 11, 2012
Messages
31
Reaction score
0
Odp: Skrypt masowej teleportacji

Ciekawa funkcja, takie rzeczy zawsze s? mile widziane. Mo?e mie? wiele zastosowa? w grze w questach i nie tylko. Z pewno?ci? si? przyda. :)
 

Oskar

Forum friend
Joined
Jan 24, 2009
Messages
2,256
Reaction score
331
Odp: Skrypt masowej teleportacji

Od?wie?am. Mo?e ma kto? pomys?y jak to udoskonali??
 

Arkam

Forum friend
Joined
Dec 20, 2008
Messages
1,980
Reaction score
180
Odp: Skrypt masowej teleportacji

;D Widze przez te pol roku co mnie nie bylo nie wiele sie zmienilo ;D Juz nie ma developerow? ;DD btw Wrocilem i umiem troche [duzo] wiecej niz ostatnio ;p ew msg na gg
//Topic: ciekawe i pomyslowe ale nie widze ludzi ktorzy chcieli by to wykorzystac ;D teraz serwy to dno i wodorosty i 'prawie' nikt madry w to nie idzie juz ;/
 

rtoip

Active User
Joined
Feb 17, 2009
Messages
96
Reaction score
12
Odp: Skrypt masowej teleportacji

Zamiast rightBottomCorner mo?e szeroko?? i wysoko?? prostok?ta.
Mo?na te? zrobi? "funkcj? wy?szego rz?du". Czyli w miejsce teleportOnlyPlayer przekazujemy funkcj?.

Code:
if newPos and teleportOnlyPlayer(cid) then

Przyk?ady u?ycia:

Code:
doTeleportMassThings(leftTopCorner, width, height, newPos, minPlayerCount, toSameNewPos, isCreature)
doTeleportMassThings(leftTopCorner, width, height, newPos, minPlayerCount, toSameNewPos, isPlayer)
doTeleportMassThings(leftTopCorner, width, height, newPos, minPlayerCount, toSameNewPos, function(cid) return getPlayerLevel(cid) > 100 end)
 
Status
Not open for further replies.
Top