PenUltima Online Forum Index Official Core: 096.7
Official Core: 097 2008-02-26
Donate towards the POL web hosting bill!
 POL Home   FAQ   Search    Memberlist   Usergroups    Register    Profile   Log in to check your private messages   Log in
Another trouble with allocation

 
Post new topic   Reply to topic    PenUltima Online Forum Index -> Bug Reports 097
Display posts from previous:   

Author Message
coltain



Joined: 20 Mar 2007
Posts: 96
Location: Poland

PostPosted: Fri Dec 07, 2007 4:00 pm    Post subject: Another trouble with allocation Reply with quote

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

PostPosted: Tue Feb 12, 2008 8:59 am    Post subject: Reply with quote

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
coltain



Joined: 20 Mar 2007
Posts: 96
Location: Poland

PostPosted: Tue Feb 12, 2008 10:24 am    Post subject: Reply with quote

pobierz_wymiary function is just simple function to recive max coordinates of map


case(realm)
"britannia": return {britx,brity};
"ilshenar": return {ilshx,ilshy};
endcase

I made some tests... And I think there is an error in elsewhere

start.src <- here

a simple loop in start.src and my server has allocation error after 10s

Author Message
MontuZ
Distro Developer


Joined: 10 Feb 2006
Posts: 293
Location: Myrtle Beach, South Carolina

PostPosted: Tue Feb 12, 2008 1:34 pm    Post subject: Reply with quote

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

Author Message
OldnGrey



Joined: 04 Feb 2006
Posts: 517

PostPosted: Tue Feb 12, 2008 10:32 pm    Post subject: Reply with quote

I was always scared of creating an array that big Smile

Author Message
CWO



Joined: 04 Feb 2006
Posts: 685
Location: Chicago, IL USA

PostPosted: Wed Feb 13, 2008 5:11 am    Post subject: Reply with quote

Its not too bad to use an array that big as long as you're obviously not iterating through it excessively in a short period of time.

Author Message
coltain



Joined: 20 Mar 2007
Posts: 96
Location: Poland

PostPosted: Wed Feb 13, 2008 4:47 pm    Post subject: Reply with quote

Hem, and what about a memory usage? My script should keep a constant memory usage. What if a script caches an array 20000 size big ?

Author Message
Austin
POL Developer


Joined: 30 Jan 2006
Posts: 354
Location: San Diego, California

PostPosted: Wed Feb 13, 2008 10:18 pm    Post subject: Reply with quote

Well if its an array of stuff that falls under UObject like mobiles and items then it uses very little memory. In the back end it would just be pointers to the actual object rather than a copy.

If you have an array of strings, and numbers, then you take up more memory because every instance is another object in memory until it goes out of scope and is deleted.

Post new topic   Reply to topic    PenUltima Online Forum Index -> Bug Reports 097 All times are GMT - 4 Hours
Page 1 of 1

 




Powered by phpBB © 2001, 2005 phpBB Group :: Theme & Graphics by GHS & Scott E. Royalty