hi,i'm from china,my english not so good,may be i can't express clearly.when i play mud with mush,it takes more and more memory,at last crash. has some wrong with my lua script?
follows
room description:
map_nanyang={
[1]={
roomid=1,
roomname="æäµÀ",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÄÏÑô¸®¾³ÄÚµÄÒ»ÌõæäµÀ¡£Â·ÉÏÈËÀ´ÈËÍù£¬³¾ÍÁ·ÉÑï¡£²»Ê±ÓÐÁ½ÈýÆï¿ìÂí·É³Û¶ø¹ý£¬ÑïÆðһ·³¾°£¡£ÂíÉϵÄÈ˸ö¸öÉíמ¢×°£¬Ò¼×ÏÊÃ÷£¬ÓеĻ¹ËæÉíÅå´ø×ŵ¶½£¡£¿´À´¶¼ÊÇЩϰÎäµÄ½ºþÈË¡£µÀ·Á½ÅÔÊÇÕûÕûÆëÆëµÄÑîÊ÷ÁÖ¡£´ÓÕâÀïÏò±±Ò»Ö±×ß¾ÍÊÇÄÏÑô³ÇÁË¡£",
roomcx=0,
roomcy=0,
roomcz=0,
roomexists={
["e"]=9,
["n"]=2
}
},
[2]={
roomid=2,
roomname="ÄÏÃÅ",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÀïÊÇÄÏÑô¸®µÄÄϳÇÃÅ£¬ÒòΪÄÏÑôµØ´¦ÓÚÏåÑô±±È¥µÄÒª³å£¬ËùÒÔ·ÉÏÍùÀ´µÄÈ˺ܶࡣ¸Ï³µµÄÂí·ò¡¢ÉϾ©¸Ï¿¼µÄÊéÉú¡¢Ìôµ£µÄ½Å·ò¡¢ÍƳµµÄС··¡¢ÎõÎõÈÁÈÁ£¬ºÜÊÇÈÈÄÖ¡£²»Ê±ÓÐÁ½ÈýÆï¿ìÂí´ÓÉí±ß·É³Û¶ø¹ý£¬ÑïÆðһ·³¾°£¡£",
roomcx=0,
roomcy=-1,
roomcz=0,
roomexists={
["s"]=1,
["n"]=3
}
},
[3]={
roomid=3,
roomname="ʯ°å·",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÄÏÑô³ÇÖеÄÒ»Ìõʯ°å·£¬½ÖµÀ²»ÊÇºÜ¿í£¬Á½±ßÔÔ×ÅÐí¶à°×ÑîÊ÷¡£Â·ÉÏÍùÀ´µÄÐÐÈË£¬Óм¸¸ö´Ó×°ÊøÀ´¿´ËƺõÊÇÎäÁÖÖÐÈË¡£ËûÃÇÒ»¸ö¸öÐÐÉ«´Ò´Ò´ÓÄãÉí±ß¾¹ý£¬Íù¶«±ßµÄ²íµÀ¶øÈ¥¡£»¹ÓÐЩ¸Ï×Å´ó³µµÄÂí·ò£¬Ðе½ÕâÀïºóÒ²·×·×¹ÕÉÏÁËÏò¶«µÄ²íµÀ£¬¶«±ßµÄ²íµÀͨÍùÐí¼Ò¼¯¡£",
roomcx=0,
roomcy=-2,
roomcz=0,
roomexists={
["e"]=4,
["s"]=2,
["n"]=14
}
},
[4]={
roomid=4,
roomname="С·",
roomindex=1,
roomnumber=2,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÒ»ÌõƧ¾²µÄС·£¬Á½ÅÔÊÇïÃܵĴÔÁÖ¡£Â·ÉÏÒÀÏ¡¿É¼û³µÂí×ß¹ýÁôϵĺۼ£¡£Å¼¶ûÓм¸¸öÐÐÈËÐÐÉ«´Ò´Ò´ÓÄãÉí±ß¾¹ý£¬Íù¶«±ßµÄÐí¼Ò¼¯¶øÈ¥¡£Î÷Ãæ·½ÏòÊÇÄÏÑô³Ç¡£",
roomcx=1,
roomcy=-2,
roomcz=0,
roomexists={
["e"]=5,
["w"]=3
}
},
[5]={
roomid=5,
roomname="Çàʯ·",
roomindex=1,
roomnumber=2,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÐí¼Ò¼¯ÉϵÄÒ»ÌõÇàʯ·£¬Â·ÃæÉÏÆÌ×ÅÒ»²ãϸËéµÄʯ×Ó£¬Â·ÉϵÄÐÐÈ˲»¶à¡£ÄÏÃæÊÇÐí¼Ò¼¯µÄÊм¯¡£¶«ÃæÓÐÒ»ÌõС·ͨÍù¾ÛÏÍׯ¡£",
roomcx=2,
roomcy=-2,
roomcz=0,
roomexists={
["e"]=10,
["s"]=6,
["w"]=4
}
},
[6]={
roomid=6,
roomname="Ðí¼Ò¼¯",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÄÏÑô¸½½üµÄÐí¼Ò¼¯£¬Êм¯ÉϺÜÈÈÄÖ£¬¸½½üµÄÅ©Ãñ¾³£µ½ÕâÀïÀ´½»Ò××Ô¼ºÐÁ¿àÀͶ¯µÄ³É¹û¡£¼¯ÊÐÅÔ±ßÓÐÆ¬¿ÕµØ£¬Í£×ż¸Á¾Âí³µ¡£¶«ÃæÓмҿÍÕ»£¬ÃÅ¿ÚÕý¶Ô×ÅÕâÀï¡£",
roomcx=2,
roomcy=-1,
roomcz=0,
roomexists={
["e"]=7,
["sw"]=9,
["s"]=8,
["n"]=5
}
},
[7]={
roomid=7,
roomname="¿ÍÕ»",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÊǸ½½üÔ¶½üÎÅÃûµÄÔÃÀ´¿ÍÕ»£¬ÉúÒâ·Ç³£ÐË¡¡£ÍâµØÓοͶàÑ¡ÔñÔÚÕâÀïÂä½Å£¬Äã¿ÉÒÔÔÚÕâÀï´òÌýµ½¸÷µØµÄ·çÍÁÈËÇé¡£µêС¶þÀïÀïÍâÍâæµÃÍÅÍÅת£¬½Ó´ý×ÅÄÏÇ»±±µ÷µÄ¿ÍÈË¡£Ç½ÉϹÒ×ÅÒ»¸öÅÆ×Ó(paizi)¡£",
roomcx=3,
roomcy=-1,
roomcz=0,
roomexists={
["w"]=6
}
},
[8]={
roomid=8,
roomname="Çàʯ·",
roomindex=2,
roomnumber=2,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÐí¼Ò¼¯ÉϵÄÒ»ÌõÇàʯ·£¬Â·ÃæÉÏÆÌ×ÅÒ»²ãϸËéµÄʯ×Ó£¬Â·ÉϵÄÐÐÈ˲»¶à¡£±±ÃæÊÇÐí¼Ò¼¯µÄÊм¯¡£",
roomcx=2,
roomcy=0,
roomcz=0,
roomexists={
["n"]=6
}
},
[9]={
roomid=9,
roomname="²í·",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÒ»ÌõƧ¾²µÄС·£¬Á½ÅÔÊÇïÃܵĴÔÁÖ¡£Â·ÉÏÒÀÏ¡¿É¼û³µÂí×ß¹ýÁôϵĺۼ£¡£´ÓÕâÀïÍù¶«±±·½ÏòÊÇÄÏÑô¸®Ðí¼Ò¼¯£¬Î÷±ß·½Ïò×ßÊÇͨÍùÏåÑôºÍÄÏÑôÖ®¼äµÄÒ»ÌõæäµÀ¡£",
roomcx=1,
roomcy=0,
roomcz=0,
roomexists={
["ne"]=6,
["w"]=1
}
},
[10]={
roomid=10,
roomname="С·",
roomindex=2,
roomnumber=2,
roomflag=0,
roomnpc={},
roomdes="ÕâÊÇÒ»ÌõƧ¾²µÄС·£¬Á½ÅÔÊÇïÃܵĴÔÁÖ¡£Â·ÉÏÒÀÏ¡¿É¼û³µÂí×ß¹ýÁôϵĺۼ£¡£´ÓÕâÀïÍù¶«±±·½ÏòÊǸ½½üÔ¶½üÎÅÃûµÄ¾ÛÏÍׯ£¬Î÷ÃæÊÇͨÍùÐí¼Ò¼¯µÄÇàʯ·¡£ÕâÀïÆ½³£Ã»ÓÐʲôÈË¡£",
roomcx=3,
roomcy=-2,
roomcz=0,
roomexists={
["ne"]=11,
["w"]=5
}
},
[11]={
roomid=11,
roomname="¾ÛÏÍׯ´óÃÅ",
roomindex=1,
roomnumber=1,
roomflag=0,
roomnpc={},
roomdes="Äã×ßµ½Ò»×ù¸ßÕ¬´óÔºµÄÃſڣ¬´óÃÅ¿ª×Å£¬ÃÅǰ×óÓÒÓÐÁ½¸öʯʨ×Ó£¬ËÄÎå¼¶Çàʯ̨½×ÉÏÊÇÁ½Éȶ¤ÂúͶ¤µÄ´óÃÅ¡£¿´µÃ³öÕâÀïÊÇÒ»´ó»§È˼ҵÄסËù¡£ÃÅ¿ÚÕýÖÐÑë¸ßÐü×ÅÒ»¿éºÚµ×½ð×ֵĴóØÒ£¬ØÒÉÏдÓÐÈý¸ö´ó×Ö£º¡¾¾ÛÏÍׯ¡¿¡£",
roomcx=4,
roomcy=-3,
roomcz=0,
roomexists={
["sw"]=10,
["n"]=12
}
}
walk lua script:
--»ñÈ¡·¿¼äsid,didÖ®¼äµÄ·¾¶
function getroompath(city,sid,did)
local bestroom,temproom
openlist={}
closedlist={}
if sid==did then return "" end
table.insert(openlist,createnode(sid,0,"",nil,nil))
while table.getn(openlist)~=0 do
table.sort(openlist,function(a,b) return a.g<b.g end)
bestroom=openlist[1]
if bestroom.key==0 then
print(city.."·¿¼ä"..bestroom.prevnode.."Óгö¿ÚÖ¸Ïò0£¬Çë²éÖ¤")
return ""
end
table.remove(openlist,1)
if not checkclosedlist(bestroom.key) then closedlist[bestroom.key]=bestroom end
if bestroom.key==did then return getpathfromlist(sid,did) end
for k,v in pairs(sjmap[city][bestroom.key].roomexists) do
if not checkopenlist(v) then
if not checkclosedlist(v) then table.insert(openlist,createnode(v,bestroom.g+1,k,bestroom.key,nil)) end
end
end
end
end
function checkopenlist(key)
for k,v in pairs(openlist) do
if key==v.key then return true end
end
return false
end
function checkclosedlist(key)
if closedlist[key]~=nil then
return true
else
return false
end
end
function getpathfromlist(sid,did)
local tmp
local path=""
tmp=closedlist[did]
path=tmp.path
while tmp.prevnode~=sid do
tmp=closedlist[tmp.prevnode]
path=tmp.path..";"..path
end
return path
end
has memory leak in my code?
thanks |