Forum

> > CS2D > Scripts > Man darf nicht über wasser laufen
ForenübersichtCS2D-Übersicht Scripts-ÜbersichtEinloggen, um zu antworten

Deutsch Man darf nicht über wasser laufen

13 Antworten
Zum Anfang Vorherige 1 Nächste Zum Anfang

alt Man darf nicht über wasser laufen

RAIGEKI
User Off Offline

Zitieren
Hi
Ich brauche hilfe bei meinem Script !
Undzwar wie kriege ich das hin ,wie bei den Tibia Maps & Co ,
Das man automatisch zurück geportet wird, wenn man versucht über das Wasser zulaufen!

Vielen Dank!
mfg. Jonleplay

alt Re: Man darf nicht über wasser laufen

Necr0
User Off Offline

Zitieren
Code >


Ich hab keine Ahnung ob's klappt hab's noch nicht ausprobiert, aber so in etwa müsste es gehen.
     ~MFG Necr0

alt Re: Man darf nicht über wasser laufen

Necr0
User Off Offline

Zitieren
upps und gefixxt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nwTiles={}//wasser tile id einfügen

function initArr(s,e,v)
     ret={}
     for i=s,e do
          ret[i]=v
     end
     return ret
end

prevTiles=initArr(1,32,{0,0})
     
function arrContains(arr,v)
     for i,j in pairs(arr) do
          if j==v then
               return true
          end
     end
     return false
end
     
addhook("movetile","mtHook")
function mtHook(id,x,y)
     if arrContains(nwTiles,tile(x,y,"frame")) then
          parse("setpos "..id.." "..prevTiles[id][1]*32+16.." "..prevTiles[id][2]*32+16)
     else
          prevTiles[id][1]=x
          prevTiles[id][2]=y
     end
end

alt Re: Man darf nicht über wasser laufen

gotya2
GAME BANNED Off Offline

Zitieren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function initArray(n,v) 
	local ret = {}
	for i = 1, n do
		ret[i] = v
	end
	return ret
end

a = initArray(32,{0,0})

a[1][1] = 5

print(a[1][1])
print(a[2][1])

Sorry for english, but I just noticed something in your script Necr0.
Be careful with the initarray function when creating objects. All elements of the array point to the local table {0,0}, So in fact a[1] and a[2] point to the same table.

alt Re: Man darf nicht über wasser laufen

RAIGEKI
User Off Offline

Zitieren
Thats My Script Now but now is the Error at Line 32
'near 16..'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
nwTiles={34}

function initArray(n,v) 
     local ret = {}
     for i = 1, n do
          ret[i] = v
     end
     return ret
end

a = initArray(32,{0,0})

a[1][1] = 5

print(a[1][1])
print(a[2][1])

prevTiles=initArr(1,32,{0,0})
     
function arrContains(arr,v)
     for i,j in pairs(arr) do
          if j==v then
               return true
          end
     end
     return false
end
     
addhook("movetile","mtHook")
function mtHook(id,x,y)
     if arrContains(nwTiles,tile(x,y,"frame")) then
          parse("setpos "..id.." "..prevTiles[id][1]*32+16.." "..prevTiles[id][2]*32+16)
     else
          prevTiles[id][1]=x
          prevTiles[id][2]=y
     end
end

alt Re: Man darf nicht über wasser laufen

VADemon
User Off Offline

Zitieren
1
2
--quote
parse("setpos "..id.." "..prevTiles[id][1]*32+16.." "..prevTiles[id][2]*32+16)
richtig:
1
parse("setpos "..id.." "..prevTiles[id][1]*32+16 .." "..prevTiles[id][2]*32+16)

alt Re: Man darf nicht über wasser laufen

RAIGEKI
User Off Offline

Zitieren
Ok Habs jetzt verändert jetzt gehts!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nwTiles={34}

function initArr(s,e,v)
     ret={}
     for i=s,e do
          ret[i]=v
     end
     return ret
end

prevTiles=initArr(1,32,{0,0})
     
function arrContains(arr,v)
     for i,j in pairs(arr) do
          if j==v then
               return true
          end
     end
     return false
end
     
addhook("movetile","mtHook")
function mtHook(id,x,y)
     if arrContains(nwTiles,tile(x,y,"frame")) then
          parse("setpos "..id.." "..prevTiles[id][1]*32+16 .." "..prevTiles[id][2]*32+16)
     else
          prevTiles[id][1]=x
          prevTiles[id][2]=y
     end
end
Danke für eure Hilfe

alt Re: Man darf nicht über wasser laufen

Necr0
User Off Offline

Zitieren
code >


danke an user VADemon der mich auf den fehler hingewiesen hat.
aber noch mehr muss ich user gotya2 danken der mich auf den fatalen fehler hingewiesen hat, dass alle elemente aus der tabelle "prevTiles" auf ein und die selbe variable verweisen..

das heißt, wird ein element aus der tabelle verändert ändern sich alle.

der script, der von dir soeben gepostet wurde, klappt nur mit einem spieler ohne probleme, bei mehreren können schnell probleme auftreten.

so sollte es klappen
     ~MFG Necr0

alt Re: Man darf nicht über wasser laufen

Necr0
User Off Offline

Zitieren
es reicht auch einfach eine leerstelle einzufügen, wie ich es auch in der meinem vorherigen beitrag gemacht habe, anstatt es zu umklammern. (ich würde es zwar mit einem screenshot beweisen können aber puush ist wiedermal down)

alt Re: Man darf nicht über wasser laufen

TimeQuesT
User Off Offline

Zitieren
Oh. Den hatte ich ja ganz übersehen. Das mit der Leerstelle wusste ich nicht. Naja hier muss man nichts beweisen

edit:
user Necr0 hat geschrieben
(ich würde es zwar mit einem screenshot beweisen können...

Wie denn das ?
Zum Anfang Vorherige 1 Nächste Zum Anfang
Einloggen, um zu antworten Scripts-ÜbersichtCS2D-ÜbersichtForenübersicht