 |
 |
 |
 |
| Author |
Message |
coltain
Joined: 20 Mar 2007 Posts: 96 Location: Poland
|
Posted: Fri Dec 07, 2007 4:00 pm Post subject: Another trouble with allocation |
|
|
I wrote a simple script that scanns whole world for mobiles and restarts them.
And when the script was in about half of the way an allocation problem occured (POL097 was restarted minute earlier)
code:
| Code: |
program resmobs(kto)
var list_realms_sp := {"britannia","ilshenar"};
foreach map in (list_realms_sp)
var i := 0;
for(i := -100; i <= 120; i:=i+20)
var x := 0;
var y := 0;
for(x:=50;x<=pobierz_wymiary(map)[1];x:=x+100)
for(y:=50;y<=pobierz_wymiary(map)[2];y:=y+100)
print("kolejna wspolrzedna: "+x+"/"+y+"/"+i+" mapa: "+cstr(map));
res(x,y,i,map);
sleepms(20);
endfor //y
endfor //x
endfor //z
endforeach
sendsysmessage(kto,"Zakonczono restartowanie mobow");
endprogram
function res(ax,ay,az,amap)
foreach wpis in (ListMobilesNearLocation( ax,ay,az, 55, cstr(amap) ))
sleepms(2);
if(wpis.npctemplate)
print("Restart moba: "+wpis.name);
RestartScript(wpis);
endif
sleepms(10);
endforeach
endfunction
|
I`m really troubled with this allocation problem so I search everywhere |
|
 |
|
|
 |
 |
| Author |
Message |
OldnGrey
Joined: 04 Feb 2006 Posts: 517
|
Posted: Tue Feb 12, 2008 8:59 am Post subject: |
|
|
The WoD scripts do a similar thing although it was written for just britannia and so the realms stuff is different. Are you checking that it's not trying to search outside realm.width etc?
I have no idea what pobierz_wymiary(map)[1]; is in your script.
| Code: | program textcmd_restartai(character, ai_script)
if ( !ai_script )
SendSysMessage(character, "You must provide an NPC script to restart.");
return 0;
endif
var number := 0;
var x, y;
for ( x := 6144 ; x > 64 ; x -= 128 )
SendSysMessage(character, "Restarting NPCs, X=" + x);
for ( y := 64; y < 4096; y += 128 )
foreach item in ListObjectsInBox(x - 64, y - 64, -128, x + 64, y + 64, +127, character.realm)
if ( item.npctemplate )
if ( item.script[ai_script] )
RestartScript(item);
number := number + 1;
endif
endif
endforeach
endfor
sleep(1);
endfor
SendSysMessage(character, "Total NPCs restarted: " + number);
endprogram |
I use this script occasionally and have never had memory allocation problems with it. Of course I am not straying to Ilshenar with this script!! |
|
 |
|
|
 |
 |
|
 |
 |
| Author |
Message |
MontuZ Distro Developer
Joined: 10 Feb 2006 Posts: 293 Location: Myrtle Beach, South Carolina
|
Posted: Tue Feb 12, 2008 1:34 pm Post subject: |
|
|
Seems like you have a lot of unnecessary code. Just try using ListObjectsInBox with the top left corner of the map(0,0,-127(min z height)) and whatever the realm bottom x y is with a z of 126(max z height). Here's an example I use to restart all npcs.
| Code: |
use os;
use uo;
include "include/client";
program TextCMD_Test(mobile)
var objects := ListObjectsInBox(0, 0, -127, 6144, 4096, 126, mobile.realm);
var count := 0;
foreach object in (objects)
if ( object.IsA(POLCLASS_NPC) )
RestartScript(object);
count := count + 1;
endif
SleepMS(2);
endforeach
SendSysMessage(mobile, "Restarted "+count+" npcs.", FONT_NORMAL, 2479);
endprogram
|
|
|
 |
|
|