RE: Blitz NPC AI 
			 
			
				In order to get it into shape so it can be edited to make it so an Admin can create an npc and that npc will go into the world with no limits relative to radius and can basically act just like a actual player character is to figure out what this script does and then tweak it... so here it is. 
Its pretty big but the functions are pretty big so not too many actual functions. 
 
 
 
 
VERSION=0.56b 
 
[comment installation] 
You will need to add e_npcai_players to eventsplayer and e_npcai to eventspet in sphere.ini in order for this script to work properly. 
 
When first loading this script be sure to set npcai_maps and: 
 
use .enable_npcai once to enable all NPCs with this AI script 
or 
use .enable_npcai <map#> to enable all NPCs on <map#> with this AI script 
 
Enjoy. 
 
[plevel 6] 
enable_npcai 
 
[defname npcai] 
npcai_maps				5							//Total amount of maps your server uses. 
 
npcai_can_eatfood_pack			1							//Do NPCs eat food out of pack? 
npcai_can_eatfood_corpse		1							//Do NPCs eat corpses? 
npcai_can_eatfood_hunt			1							//Do NPCs hunt and kill for food? 
npcai_can_eatfood_eggs			1							//Do NPCs eat eggs? 
npcai_can_eatfood_changecolor		1							//Do NPCs change colors if they eat? 
npcai_can_poo_rat			1							//Do Rats 'poo'? 
npcai_can_poo_horse			1							//Do Horses 'poo'? 
npcai_can_poo_effect			1							//Do Rat 'poos' have a spelleffect? (Defined below) 
npcai_can_mine				1							//Do NPCs mine ore? 
npcai_can_chop				1							//Do NPCs chop wood? 
npcai_can_chop_kindling			1							//Do NPCs chop kindling? 
npcai_can_fish				1							//Do NPCs fish? 
npcai_can_lay_eggs_alligators		1							//Do Alligators lay eggs? 
npcai_can_lay_eggs_birds		1							//Do Birds lay eggs? 
npcai_can_lay_eggs_chickens		1							//Do Chickens lay eggs? 
npcai_can_lay_eggs_snakes		1							//Do Snakes lay eggs? 
npcai_can_step_eggs			1							//Do eggs get crushed when stepped on? 
npcai_can_throw_rock			1							//Do NPCs throw rocks? 
npcai_can_throw_rock_need		1							//Do NPCs need a rock in their pack? 
npcai_can_breath_fire			1							//Do NPCs breath fire? 
 
npcai_id_eatfood_changecolor		t_ore, t_ingot, t_log, t_board				//NPCs will change colors to these item ids and types when eaten. 
npcai_id_poo_rat			i_horse_dung						//ID of 'poo' for Rats 
npcai_id_poo_horse			i_horse_dung						//ID of 'poo' for Horses 
npcai_id_kindling			i_kindling						//ID of the kindling NPCs chop 
npcai_id_rock				i_rock_plain						//ID of Rock(s) thrown by Cyclops, Ettins, Ogres, Titans, Trolls 
npcai_id_breath				i_fire_column						//ID of fire breathed by NPCs 
npcai_id_breath_explosion		i_fx_explode						//ID of explosion breathed by NPCs 
npcai_id_eggs				i_eggs_fresh						//ID of freshly laid eggs 
npcai_id_eggs_stepped			i_eggshells						//ID of stepped on eggs 
 
npcai_resource_ore			mr_nothing, mr_rusty, mr_iron, mr_copper		//Region Resource ID(s) for NPCs that mine ore 
npcai_resource_chop			mr_nothing, mr_tree					//Region Resource ID(s) for NPCs that chop wood 
npcai_resource_fish			mr_nothing, mr_fish1, mr_fish2, mr_fish3, mr_fish4	//Region Resource ID(s) for NPCs that fish fish 
 
npcai_snd_eat				{03a 03c}						//SFX for eating food, corpses, eggs 
npcai_snd_fish				{025 026}						//SFX for fishing fish 
npcai_snd_chop				{0147 0148}						//SFX for chopping a tree 
npcai_snd_mine				{0125 0126}						//SFX for mining ore 
npcai_snd_eggs_stepped			{01c2 01c6}						//SFX of stepping on eggs 
 
npcai_poo_effect			s_poison						//Spelleffect of poisonous Rat 'poo' 
npcai_poo_effect_strength		10.0							//Strength of the spelleffect of poisonous Rat 'poo' 
 
npcai_dam_rock				{10 15}							//Damage received when being hit by a rock 
npcai_dam_breath			{45 50}							//Damage received when being hit by dragon's breath 
 
npcai_timer_delay			{1 360}							//Delay in seconds between 'checks' for NPCs to do 'things' - larger the range in value the less CPU this script will use, lower the value and NPCs will do 'things' more often, default: {1 360} - Use cautiously 
npcai_timer_fish			{15 30}							//Time between the use of fishing by NPCs 
npcai_timer_chop			{15 30}							//Time between the use of lumberjacking by NPCs 
npcai_timer_mine			{15 30}							//Time between the use of mining by NPCs 
npcai_timer_eatfood_decay		10							//Time until food drops by 1 in value 
npcai_timer_eatfood_hungry		{600 660}						//Time between eating food if NPC is hungry 
npcai_timer_eatfood_hungrier		{330 360}						//Time between eating food if NPC is very hungry 
npcai_timer_eatfood_hungriest		{180 210}						//Time between eating food if NPC is extremely hungry 
npcai_timer_eatfood_replenish		30							//Time until an NPC replenishes it's foodtypes after becoming full 
npcai_timer_poo_rat			{1200 1800}						//Time between each Rat 'poo' 
npcai_timer_poo_horse			{900 1200}						//Time between each Horse 'poo' 
npcai_timer_lay_eggs			{450 600}						//Time between eggs laid by NPCs 
npcai_timer_throw_rock			{15 30}							//Time between each rock thrown by an NPC 
 
[function enable_npcai] 
if (<dargn2>==1) 
 if (<ischar>) 
  if (<isplayer>) 
   if !(<isevent.e_npcai_players>) 
    events +e_npcai_players 
   endif 
  else 
   if !(<tag0.npcai>) 
    npcai 
   endif 
  endif 
 endif 
elseif (<dargn2>==2) 
 forchars 9999 
  enable_npcai 0, 1 
 endfor 
 region.allcharsidle enable_npcai 0, 1 
else 
 local.p=<p> 
 local.maxlooptimes=<serv.maxlooptimes> 
 local.freezerestarttime=<serv.freezerestarttime> 
 serv.maxlooptimes=0 
 serv.freezerestarttime=0fffffff 
 local.p=<p> 
 if !(<argn1>) 
  for map 0 <def0.npcai_maps> 
   p=<serv.map(1,1,0,<dlocal.map>).region.name> 
   enable_npcai 0, 2 
  endwhile 
 else 
  p=<serv.map(1,1,0,<dargn1>).region.name> 
  enable_npcai 0, 2 
 endif 
 serv.maxlooptimes=<local.maxlooptimes> 
 serv.freezerestarttime=<local.freezerestarttime> 
 p=<local.p> 
endif 
 
[function npcai] 
if (<ischar>) 
 if !(<isplayer>) 
  if (<p.x> > 0) && (<p.y> > 0) 
   tag.npcai=1 
   if !(strmatch(*e_npcai*,<serv.eventspet>) 
    if !(<isevent.e_npcai>) 
     events +e_npcai 
    endif 
   endif 
   if !( <flags> & statf_invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
    if !(<tag0.ate>) 
     if (<food> < 15) 
      if (<def0.npcai_can_eatfood_pack>) 
       npcai_eatfoodtype <npc> 
      endif 
      if (<def0.npcai_can_eatfood_corpse>) 
       npcai_eatcorpse <body> 
      endif 
      if (<def0.npcai_can_eatfood_hunt>) 
       npcai_huntforfood <body> 
      endif 
      if (<body>==c_alligator) || (<body>==c_snake) || (<body>==c_snake_giant) 
       if (<def0.npcai_can_eatfood_eggs>) 
        npcai_eateggs <body> 
       endif 
      endif 
     endif 
    endif 
    if (<food> > 0) 
     if (<dargn1> >= <eval <qval <isempty <def.npcai_timer_eatfood_decay>> ?<serv.gameminutelength>:<def0.npcai_timer_eatfood_decay>>>) 
      food -= 1 
      argn1=0 
     endif 
    else 
     argn1=0 
    endif 
    if (<npc>==brain_animal) 
     if (<body>==c_bear_grizzly) || (<body>==c_bear_polar) || (<body>==c_bear_brown) 
      if (<food> < 10) 
       if !(<notogetflag <uid>>==6) 
        tag.old_karma=k:<karma> 
        karma=-2999 
       endif 
      else 
       if (<notogetflag <uid>>==6) 
        if !(<isempty <tag.old_karma>>) 
         karma=<strsub 2 0 <tag0.old_karma>> 
	 tag.old_karma= 
        else 
         karma=-799 
        endif 
       endif 
      endif 
      if !(<tag0.usingskill>) 
       if (<def0.npcai_can_fish>) 
        npcai_fish 
       endif 
      endif 
     elseif (<body>==c_alligator) 
      if (<def0.npcai_can_lay_eggs_alligators>) 
       if !(<tag0.actioninuse>) 
        npcai_lay_eggs <body> 
       endif 
      endif 
     elseif (<body>==c_bird) || (<body>==c_eagle) 
      if (<def0.npcai_can_lay_eggs_birds>) 
       if !(<tag0.actioninuse>) 
        npcai_lay_eggs <body> 
       endif 
      endif 
     elseif (<body>==c_chicken) 
      if (<def0.npcai_can_lay_eggs_chickens>) 
       if !(<tag0.actioninuse>) 
        npcai_lay_eggs <body> 
       endif 
      endif 
     elseif (<body>==c_snake) || (<body>==c_snake_giant) 
      if (<def0.npcai_can_lay_eggs_snakes>) 
       if !(<tag0.actioninuse>) 
        npcai_lay_eggs <body> 
       endif 
      endif 
     elseif (<body>==c_rat) || (<body>==c_rat_giant) 
      if (<def0.npcai_can_poo_rat>) 
       if !(<tag0.actioninuse>) 
        npcai_poo <body> 
       endif 
      endif 
     elseif (<body>==c_horse_brown_lt) || (<body>==c_horse_brown_dk) || (<body>==c_horse_tan) || (<body>==c_horse_gray) 
      if (<def0.npcai_can_poo_horse>) 
       if !(<tag0.actioninuse>) 
        npcai_poo <body> 
       endif 
      endif 
     endif 
    elseif (<npc>==brain_vendor) || (<npc>==brain_human) 
     if (<def0.npcai_can_mine>) 
      if !(<tag0.usingskill>) 
       if (<findtype.t_weapon_mace_pick>) 
        npcai_mine 
       endif 
      endif 
     endif 
     if (<def0.npcai_can_chop>) 
      if !(<tag0.usingskill>) 
       if (<findtype.t_weapon_sword>) 
        npcai_chop 
       endif 
      endif 
     endif 
     if (<def0.npcai_can_chop_kindling>) 
      if !(<tag0.usingskill>) 
       if (<findtype.t_weapon_fence>) 
        npcai_chop_kindling 
       endif 
      endif 
     endif 
     if (<def0.npcai_can_fish>) 
      if !(<tag0.usingskill>) 
       if (<findtype.t_fish_pole>) 
        npcai_fish 
       endif 
      endif 
     endif 
    endif 
   endif 
   timerf <eval <qval <isempty <def.npcai_timer_delay>> ?{1 360}:<def0.npcai_timer_delay>>>, npcai <eval <argn1> +1> 
  endif 
 endif 
endif 
 
[function npcai_fish] 
for x -3 3 
 for y -3 3 
  if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics>) 
   local.isplatform= 
   for s 0 <eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics> +-1> 
    if !(<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.type>==t_water) 
     if (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +15> >= <z>) && (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +-15> <= <z>) 
      if ( <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.can> & can_i_platform ) 
       local.isplatform=1 
      endif 
     endif 
    endif 
   endfor 
   if (<local.isplatform>) 
    for s 0 <eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics> +-1> 
     if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.type>==t_water) 
      local.water += 1 
      local.water_p<dlocal.water>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z>,<map> 
     endif 
    endfor 
   endif 
  endif 
  if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).type>==t_water) 
   local.water += 1 
   local.water_p<dlocal.water>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).terrain.z>,<map> 
  endif 
 endfor 
endfor 
if (<local.water>) 
 local.water=<eval {1 <local.water>}> 
 local.water_p=<local.water_p<dlocal.water>> 
 local.resource=<npcai_getresource t_water, <local.water_p>> 
 if !(<local.resource>) 
  serv.newitem=i_worldgem_bit 
  new.type=t_water 
  new.attr=attr_move_never|attr_invis|attr_decay 
  new.p=<local.water_p> 
  local.resource=<new.uid> 
 endif 
 if !(<isempty <def.npcai_resource_fish>>) 
  local.resourceid=<def0.npcai_resource_fish> 
  while !(strmatch(<local.resourceid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.resourceid>> 
   local.resourceid=<streat <local.resourceid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
 endif 
 if (<serv.regionresource.<local.id.<dlocal.x>>>) 
  uid.<local.resource>.more1=<local.id.<dlocal.x>> 
 else 
  dorand 5 
   uid.<local.resource>.more1=mr_nothing 
   uid.<local.resource>.more1=mr_fish1 
   uid.<local.resource>.more1=mr_fish2 
   uid.<local.resource>.more1=mr_fish3 
   uid.<local.resource>.more1=mr_fish4 
  enddo 
 endif 
 uid.<local.resource>.timer=<eval {<serv.regionresource.<uid.<local.resource>.more1>.regen>}> 
 act=<local.resource> 
 for t 0 <eval <eval <serv.skill.skill_fishing.delay> /10> +1> 
  timerf <dlocal.t>, sound=<eval {025 026}> 
  timerf <dlocal.t>, bow 
  timerf <dlocal.t>, face=<act.uid> 
 endfor 
 emote splashes around the shoreline 
 timerf <eval <eval <serv.skill.skill_fishing.delay> /10> +1>, trigger @npcai_skillsuccess,1,<eval <def0.skill_fishing> & ~0c0000000>, <act.uid> 
 tag.usingskill=1 
endif 
 
[function npcai_mine] 
for x -3 3 
 for y -3 3 
  if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics>) 
   for s 0 <eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics> +-1> 
    if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.type>==t_rock) 
     if (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +5> >= <z>) && (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +-5> <= <z>) 
      local.rock += 1 
      local.rock_p<dlocal.rock>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z>,<map> 
     endif 
    endif 
   endfor 
  endif 
 endfor 
endfor 
if !(<local.rock>) 
 for x -3 3 
  for y -3 3 
   if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).type>==t_rock) 
    if (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).terrain.z> +5> >= <z>) && (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).terrain.z> +-5> <= <z>) 
     local.rock += 1 
     local.rock_p<dlocal.rock>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).terrain.z>,<map> 
    endif 
   endif 
  endfor 
 endfor 
endif 
if (<local.rock>) 
 local.rock=<eval {1 <local.rock>}> 
 local.rock_p=<local.rock_p<dlocal.rock>> 
 local.resource=<npcai_getresource t_rock, <local.rock_p>> 
 if !(<local.resource>) 
  serv.newitem=i_worldgem_bit 
  new.type=t_rock 
  new.attr=attr_move_never|attr_invis|attr_decay 
  new.p=<local.rock_p> 
  local.resource=<new.uid> 
 endif 
 if !(<isempty <def.npcai_resource_mine>>) 
  local.resourceid=<def0.npcai_resource_mine> 
  while !(strmatch(<local.resourceid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.resourceid>> 
   local.resourceid=<streat <local.resourceid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
 endif 
 if (<serv.regionresource.<local.id.<dlocal.x>>>) 
  uid.<local.resource>.more1=<local.id.<dlocal.x>> 
 else 
  dorand 4 
   uid.<local.resource>.more1=mr_nothing 
   uid.<local.resource>.more1=mr_rusty 
   uid.<local.resource>.more1=mr_iron 
   uid.<local.resource>.more1=mr_copper 
  enddo 
 endif 
 uid.<local.resource>.timer=<eval {<serv.regionresource.<uid.<local.resource>.more1>.regen>}> 
 act=<local.resource> 
 for t 0 <eval <eval <eval <serv.skill.skill_mining.delay> /10> +1> *3> 
  timerf <dlocal.t>, sound=<eval {0125 0126}> 
  timerf <dlocal.t>, anim 9 
  timerf <dlocal.t>, face=<act.uid> 
 endfor 
 emote dig the earth for ore 
 timerf <eval <eval <eval <serv.skill.skill_mining.delay> /10> +1> *3>, trigger @npcai_skillsuccess,1,<eval <def0.skill_mining> & ~0c0000000>, <act.uid> 
 tag.usingskill=1 
endif 
 
[function npcai_chop] 
if (<isneartype t_tree 1>) 
 local.dist=1 
elseif (<isneartype t_tree 2>) 
 local.dist=2 
else 
 local.dist=3 
endif 
for x -<dlocal.dist> <local.dist> 
 for y -<dlocal.dist> <local.dist> 
  if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics>) 
   for s 0 <eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics> +-1> 
    if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.type>==t_tree) 
     if (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +5> >= <z>) && (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +-5> <= <z>) 
      local.tree += 1 
      local.tree_p<dlocal.tree>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z>,<map> 
     endif 
    endif 
   endfor 
  endif 
 endfor 
endfor 
if (<local.tree>) 
 local.tree=<eval {1 <local.tree>}> 
 local.tree_p=<local.tree_p<dlocal.tree>> 
 local.resource=<npcai_getresource t_tree, <local.tree_p>> 
 if !(<local.resource>) 
  serv.newitem=i_worldgem_bit 
  new.type=t_tree 
  new.attr=attr_move_never|attr_invis|attr_decay 
  new.p=<local.tree_p> 
  local.resource=<new.uid> 
 endif 
 if !(<isempty <def.npcai_resource_chop>>) 
  local.resourceid=<def0.npcai_resource_chop> 
  while !(strmatch(<local.resourceid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.resourceid>> 
   local.resourceid=<streat <local.resourceid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
 endif 
 if (<serv.regionresource.<local.id.<dlocal.x>>>) 
  uid.<local.resource>.more1=<local.id.<dlocal.x>> 
 else 
  dorand 2 
   uid.<local.resource>.more1=mr_nothing 
   uid.<local.resource>.more1=mr_tree 
  enddo 
 endif 
 uid.<local.resource>.timer=<eval {<serv.regionresource.<uid.<local.resource>.more1>.regen>}> 
 act=<local.resource> 
 for t 0 <eval <eval <eval <serv.skill.skill_lumberjack.delay> /10> +1> *4> 
  timerf <dlocal.t>, sound=<eval {0147 0148}> 
  timerf <dlocal.t>, anim 9 
  timerf <dlocal.t>, face=<act.uid> 
 endfor 
 emote chop a tree 
 timerf <eval <eval <eval <serv.skill.skill_lumberjack.delay> /10> +1> *4>, trigger @npcai_skillsuccess,1,<eval <def0.skill_lumberjack> & ~0c0000000>, <act.uid> 
 tag.usingskill=1 
endif 
 
[function npcai_chop_kindling] 
for x -3 3 
 for y -3 3 
  if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics>) 
   for s 0 <eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics> +-1> 
    if (<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.type>==t_tree) 
     if (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +5> >= <z>) && (<eval <serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z> +-5> <= <z>) 
      local.tree += 1 
      local.tree_p<dlocal.tree>=<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,<serv.map(<eval <p.x> +<local.x>>,<eval <p.y> +<local.y>>,0,<map>).statics.<local.s>.z>,<map> 
     endif 
    endif 
   endfor 
  endif 
 endfor 
endfor 
if (<local.tree>) 
 local.tree=<eval {1 <local.tree>}> 
 local.tree_p=<local.tree_p<dlocal.tree>> 
 local.resource=<npcai_getresource t_tree, <local.tree_p>> 
 if !(<local.resource>) 
  serv.newitem=i_worldgem_bit 
  new.type=t_tree 
  new.attr=attr_move_never|attr_invis|attr_decay 
  new.p=<local.tree_p> 
  local.resource=<new.uid> 
 endif 
 if !(<isempty <def.npcai_resource_chop>>) 
  local.resourceid=<def0.npcai_resource_chop> 
  while !(strmatch(<local.resourceid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.resourceid>> 
   local.resourceid=<streat <local.resourceid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
  uid.<local.resource>.more1=<local.id.<dlocal.x>> 
 else 
  dorand 2 
   uid.<local.resource>.more1=mr_nothing 
   uid.<local.resource>.more1=mr_tree 
  enddo 
 endif 
 uid.<local.resource>.timer=<eval {<serv.regionresource.<uid.<local.resource>.more1>.regen>}> 
 act=<local.resource> 
 for t 0 <eval <eval <eval <serv.skill.skill_lumberjack.delay> /10> +1> *4> 
  timerf <dlocal.t>, sound=<eval {0147 0148}> 
  timerf <dlocal.t>, anim 9 
  timerf <dlocal.t>, face=<act.uid> 
 endfor 
 emote chop a tree for kindling 
 timerf <eval <eval <eval <serv.skill.skill_lumberjack.delay> /10> +1> *4>, trigger @npcai_skillsuccess,1,<eval <def0.skill_lumberjack> & ~0c0000000>, <act.uid>, 1 
 tag.usingskill=1 
endif 
 
[function npcai_getresource] 
local.p=<p> 
p=<streat <args>> 
foritems 0 
 if (<baseid>==i_worldgem_bit) 
  if (<type>==<strarg <args>>) 
   local.resource=<uid> 
  endif 
 endif 
endfor 
p=<local.p> 
return <local.resource> 
 
[function npcai_eatfoodtype] 
local.foodtype=<foodtype> 
if (<argn1>==<def0.brain_banker>) || (<argn1>==<def0.brain_vendor>) || (<argn1>==<def0.brain_guard>) || (<argn1>==<def0.brain_human>) 
 while !(<isempty <strarg <streat <local.foodtype>>>>) 
  if !(<local.ate>) 
   if (<findlayer.21>) 
    if (<serv.typedef.<strarg <streat <local.foodtype>>>>) 
     if (<findlayer.21.findtype.<strarg <streat <local.foodtype>>>>) 
      emote eat a <findlayer.21.findtype.<strarg <streat <local.foodtype>>>.name> 
      if (<eval <findlayer.21.findtype.<strarg <streat <local.foodtype>>>.amount> +-1> < 1) 
       findlayer.21.findtype.<strarg <streat <local.foodtype>>>.remove 
      else 
       findlayer.21.findtype.<strarg <streat <local.foodtype>>>.amount=<findlayer.21.findtype.<strarg <streat <local.foodtype>>>.amount> +-1 
       findlayer.21.findtype.<strarg <streat <local.foodtype>>>.update 
      endif 
      if (<def0.npcai_can_eatfood_changecolor>) 
       local.changecolortypes=<def0.npcai_types_eatfood_changecolor> 
       while !(strmatch(<local.changecolortypes>,0)) 
        if !(<local.atecolor>) 
         if (strmatch(<strarg <streat <local.foodtype>>>,<strarg <local.changecolortypes>>) 
          local.atecolor=<findlayer.21.findtype.<strarg <streat <local.foodtype>>>.color> 
         endif 
        endif 
        local.changecolortypes=<streat <local.changecolortypes>> 
       endwhile 
      endif 
      local.ate=1 
     endif 
    elseif (<serv.itemdef.<strarg <streat <local.foodtype>>>>) 
     if (<findlayer.21.findid.<strarg <streat <local.foodtype>>>>) 
      emote eat a <findlayer.21.findid.<strarg <streat <local.foodtype>>>.name> 
      if (<eval <findlayer.21.findid.<strarg <streat <local.foodtype>>>.amount> +-1> < 1) 
       findlayer.21.findid.<strarg <streat <local.foodtype>>>.remove 
      else 
       findlayer.21.findid.<strarg <streat <local.foodtype>>>.amount=<findlayer.21.findid.<strarg <streat <local.foodtype>>>.amount> +-1 
       findlayer.21.findid.<strarg <streat <local.foodtype>>>.update 
      endif 
      if (<def0.npcai_can_eatfood_changecolor>) 
       local.changecolortypes=<def0.npcai_types_eatfood_changecolor> 
       while !(strmatch(<local.changecolortypes>,0)) 
        if !(<local.atecolor>) 
         if (<findlayer.21.findid.<strarg <streat <local.foodtype>>>.type>==<strarg <local.changecolortypes>>) 
          local.atecolor=<findlayer.21.findid.<strarg <streat <local.foodtype>>>.color> 
         endif 
        endif 
        local.changecolortypes=<streat <local.changecolortypes>> 
       endwhile 
      endif 
      local.ate=1 
     endif 
    endif 
   endif 
  endif 
  if (<def0.<strarg <streat <local.foodtype>>>>==<def0.t_food>) || (<def0.<strarg <streat <local.foodtype>>>>==<def0.t_fruit>) || (<serv.itemdef.<strarg <streat <local.foodtype>>>.type>==t_food) || (<serv.itemdef.<strarg <streat <local.foodtype>>>.type>==t_fruit) 
   local.replenishable=1 
  endif 
  local.foodtype=<streat <streat <local.foodtype>>> 
 endwhile 
endif 
local.uid=<uid> 
if !(<local.ate>) 
 foritems 3 
  if !(<local.ate>) 
   if (<uid.<local.uid>.canseelos <uid>>) 
    local.foodtype=<uid.<local.uid>.foodtype> 
    while !(<isempty <strarg <streat <local.foodtype>>>>) 
     if (<serv.typedef.<strarg <streat <local.foodtype>>>>) 
      if (<type>==<strarg <streat <local.foodtype>>>) 
       if (<type>==t_fish) 
        serv.newitem=i_fish_raw_whole 
        new.color=<color> 
        trysrc <local.uid> new.drop 
       elseif (<dispid>==i_eggs_fresh) 
        serv.newitem=i_eggshells 
        new.color=<color> 
        trysrc <local.uid> new.drop 
        sound=<eval {01c3 01c6}> 
       endif 
       uid.<local.uid>.emote eat a <name> 
       amount=<amount> +-1 
       if (<amount> < 1) 
        remove 
       else 
        update 
       endif 
       if (<def0.npcai_can_eatfood_changecolor>) 
        local.changecolortypes=<def0.npcai_types_eatfood_changecolor> 
        while !(strmatch(<local.changecolortypes>,0)) 
         if !(<local.atecolor>) 
          if (<type>==<strarg <local.changecolortypes>>) 
           local.atecolor=<color> 
          endif 
         endif 
         local.changecolortypes=<streat <local.changecolortypes>> 
        endwhile 
       endif 
       local.ate=1 
      endif 
     elseif (<serv.itemdef.<strarg <streat <local.foodtype>>>>) 
      if (<baseid>==<strarg <streat <local.foodtype>>>) 
       if (<type>==t_fish) 
        serv.newitem=i_fish_raw_whole 
        new.color=<color> 
        trysrc <local.uid> new.drop 
       elseif (<dispid>==i_eggs_fresh) 
        serv.newitem=i_eggshells 
        new.color=<color> 
        trysrc <local.uid> new.drop 
        sound=<eval {01c3 01c6}> 
       endif 
       uid.<local.uid>.emote eat a <name> 
       amount=<amount> +-1 
       if (<amount> < 1) 
        remove 
       else 
        update 
       endif 
       if (<def0.npcai_can_eatfood_changecolor>) 
        local.changecolortypes=<def0.npcai_types_eatfood_changecolor> 
        while !(strmatch(<local.changecolortypes>,0)) 
         if !(<local.atecolor>) 
          if (<baseid>==<strarg <local.changecolortypes>>) 
           local.atecolor=<findlayer.21.findid.<strarg <streat <local.foodtype>>>.color> 
          endif 
         endif 
         local.changecolortypes=<streat <local.changecolortypes>> 
        endwhile 
       endif 
       local.ate=1 
      endif 
     endif 
     if (<local.ate>) 
      local.foodtype= 
     else 
      local.foodtype=<streat <streat <local.foodtype>>> 
     endif 
    endwhile 
   endif 
  endif 
 endfor 
endif 
if (<local.ate>) 
 salute 
 sound=<eval <qval <isempty <def.npcai_snd_eat>> ?{03a 03c}:<def0.npcai_snd_eat>>> 
 food += 1 
 tag.ate=1 
 if (<food> < 5) 
  timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungriest>> ?{5 15}:<def0.npcai_timer_eatfood_hungriest>>>, tag.ate= 
 elseif (<food> < 10) 
  timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungrier>> ?{30 60}:<def0.npcai_timer_eatfood_hungrier>>>, tag.ate= 
 elseif (<food> < 15) 
  timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungry>> ?{90 120}:<def0.npcai_timer_eatfood_hungry>>>, tag.ate= 
 else 
  timerf <eval <qval <isempty <def.npcai_timer_eatfood_replenish>> ?{180 210}:<def0.npcai_timer_eatfood_replenish>>>, npcai_replenishfoodtype 
 endif 
else 
 if (<local.replenishable>) 
  npcai_replenishfoodtype 
 endif 
endif 
 
[function npcai_replenishfoodtype] 
if (<ischar>) 
 for <eval {3 5}> 
  if (<maxweight> > <weight>) 
   serv.newitem=random_food 
   if (<maxweight> > <eval <weight> +<new.weight>>) 
    trysrc <uid> new.bounce 
   else 
    new.remove 
   endif 
  endif 
 endfor 
endif 
 
[function npcai_eatcorpse] 
if (<serv.chardef.<argv[0]>.baseid>==c_bear_grizzly) || (<serv.chardef.<argv[0]>.baseid>==c_bear_polar) || (<serv.chardef.<argv[0]>.baseid>==c_bear_brown) || (<serv.chardef.<argv[0]>.baseid>==c_wolf) || (<serv.chardef.<argv[0]>.baseid>==c_snake_giant) || (<serv.chardef.<argv[0]>.baseid>==c_spider_giant) || (<serv.chardef.<argv[0]>.baseid>==c_toad_giant) 
 local.uid=<uid> 
 foritems 3 
  if !(<local.corpse>) 
   if (<type>==t_corpse) 
    if (<uid.<local.uid>.canseelos <uid>>) 
     if (<tag0.npc>==<def0.brain_human>) || (<tag0.npc>==<def0.brain_vendor>) || (<tag0.npc>==<def0.brain_banker>) || (<tag0.npc>==<def0.brain_guard>) || (<tag0.npc>==<def0.brain_animal>) || (<tag0.npc>==<def0.brain_monster>) || (<tag0.npc>==<def0.brain_dragon>) || (<link.isplayer>) 
      if !(<tag0.waseaten>) 
       local.corpse=<uid> 
      endif 
     endif 
    endif 
   endif 
  endif 
 endfor 
 if (<local.corpse>) 
  face=<local.corpse> 
  goto <uid.<local.corpse>.p> 
  uid.<local.corpse>.tag.waseaten=1 
  serv.newitem=i_blood_pool_large 
  new.color=<serv.chardef.<uid.<local.corpse>.tag0.baseid>.bloodcolor> 
  new.attr=attr_move_never|attr_decay 
  new.p=<uid.<local.corpse>.p> 
  new.timer=<eval <serv.decaytimer> *60> 
  bow 
  emote eat some <uid.<local.corpse>.name> 
  sound=<eval <qval <isempty <def.npcai_snd_eat>> ?{03a 03c}:<def0.npcai_snd_eat>>> 
  food += 1 
  tag.ate=1 
  if (<food> < 5) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungriest>> ?{5 15}:<def0.npcai_timer_eatfood_hungriest>>>, tag.ate= 
  elseif (<food> < 10) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungrier>> ?{30 60}:<def0.npcai_timer_eatfood_hungrier>>>, tag.ate= 
  elseif (<food> < 15) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungry>> ?{90 120}:<def0.npcai_timer_eatfood_hungry>>>, tag.ate= 
  else 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_replenish>> ?{180 210}:<def0.npcai_timer_eatfood_replenish>>>, npcai_replenishfoodtype 
  endif 
 endif 
endif 
 
[function npcai_eateggs] 
if (<serv.chardef.<argv[0]>.baseid>==c_alligator) || (<serv.chardef.<argv[0]>.baseid>==c_snake) || (<serv.chardef.<argv[0]>.baseid>==c_snake_giant) 
 local.uid=<uid> 
 foritems 3 
  if !(<local.ate>) 
   if (<uid.<local.uid>.canseelos <uid>>) 
    if (<baseid>==<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>>) 
     local.ate=<uid> 
    endif 
   endif 
  endif 
 endfor 
 if (<local.ate>) 
  face=<local.ate> 
  goto <uid.<local.ate>.uid> 
  bow 
  emote eat <uid.<local.ate>.name> 
  if (<uid.<local.ate>.amount> > 1) 
   uid.<local.ate>.amount -= 1 
   uid.<local.ate>.update 
  else 
   uid.<local.ate>.remove 
  endif 
  sound=<eval <qval <isempty <def.npcai_snd_eat>> ?{03a 03c}:<def0.npcai_snd_eat>>> 
  food += 1 
  tag.ate=1 
  if (<food> < 5) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungriest>> ?{5 15}:<def0.npcai_timer_eatfood_hungriest>>>, tag.ate= 
  elseif (<food> < 10) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungrier>> ?{30 60}:<def0.npcai_timer_eatfood_hungrier>>>, tag.ate= 
  elseif (<food> < 15) 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_hungry>> ?{90 120}:<def0.npcai_timer_eatfood_hungry>>>, tag.ate= 
  else 
   timerf <eval <qval <isempty <def.npcai_timer_eatfood_replenish>> ?{180 210}:<def0.npcai_timer_eatfood_replenish>>>, npcai_replenishfoodtype 
  endif 
 endif 
endif 
 
[function npcai_huntforfood] 
if !(<tag0.isattacking>) 
 if (<serv.chardef.<argv[0]>.baseid>==c_bear_grizzly) || (<serv.chardef.<argv[0]>.baseid>==c_bear_polar) || (<serv.chardef.<argv[0]>.baseid>==c_bear_brown) 
  local.uid=<uid> 
  forchars <serv.distancetalk> 
   if !(<local.attack>) 
    if !(<uid>==<local.uid>) 
     if (<notogetflag <uid>>==3) 
      if (<str> < <uid.<local.uid>.str>) 
       if !(<body>==c_bear_grizzly) && !(<body>==c_bear_polar) && !(<body>==c_bear_brown) 
        if !( <flags> & statf_invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
         local.attack=<uid> 
        endif 
       endif 
      endif 
     endif 
    endif 
   endif 
  endfor 
  if (<local.attack>) 
   emote growl 
   bark 2 
   tag.isattacking=<local.attack> 
   attack=<local.attack> 
   uid.<local.attack>.tag.isattackedby=<uid> 
  endif 
 elseif (<serv.chardef.<argv[0]>.baseid>==c_wolf) 
  forchars <serv.distancetalk> 
   if !(<local.attack>) 
    if !(<uid>==<local.uid>) 
     if (<notogetflag <uid>>==3) 
      if (<str> < <uid.<local.uid>.str>) 
       if !(<body>==c_wolf) 
        if !( <flags> & statf-invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
         local.attack=<uid> 
        endif 
       endif 
      endif 
     endif 
    endif 
   endif 
  endfor 
  if (<local.attack>) 
   emote growl 
   bark 2 
   tag.isattacking=<local.attack> 
   attack=<local.attack> 
   uid.<local.attack>.tag.isattackedby=<uid> 
  endif 
 elseif (<serv.chardef.<argv[0]>.baseid>==c_toad_giant) 
  forchars <serv.distancetalk> 
   if !(<local.attack>) 
    if !(<uid>==<local.uid>) 
     if (<notogetflag <uid>>==3) || (<notogetflag <uid>>==6) 
      if (<str> < <uid.<local.uid>.str>) 
       if !(<body>==c_toad_giant) 
        if !( <flags> & statf-invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
         local.attack=<uid> 
        endif 
       endif 
      endif 
     endif 
    endif 
   endif 
  endfor 
  if (<local.attack>) 
   bark 2 
   tag.isattacking=<local.attack> 
   attack=<local.attack> 
   uid.<local.attack>.tag.isattackedby=<uid> 
  endif 
 elseif (<serv.chardef.<argv[0]>.baseid>==c_spider_giant) 
  forchars <serv.distancetalk> 
   if !(<local.attack>) 
    if !(<uid>==<local.uid>) 
     if (<notogetflag <uid>>==3) || (<notogetflag <uid>>==6) 
      if (<str> < <uid.<local.uid>.str>) 
       if !(<body>==c_spider_giant) 
        if !( <flags> & statf-invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
         local.attack=<uid> 
        endif 
       endif 
      endif 
     endif 
    endif 
   endif 
  endfor 
  if (<local.attack>) 
   bark 2 
   tag.isattacking=<local.attack> 
   attack=<local.attack> 
   uid.<local.attack>.tag.isattackedby=<uid> 
  endif 
 elseif (<serv.chardef.<argv[0]>.baseid>==c_snake_giant) 
  forchars <serv.distancetalk> 
   if !(<local.attack>) 
    if !(<uid>==<local.uid>) 
     if (<notogetflag <uid>>==3) || (<notogetflag <uid>>==6) 
      if (<str> < <uid.<local.uid>.str>) 
       if !(<body>==c_snake_giant) 
        if !( <flags> & statf-invul ) && !( <flags> & statf_freeze ) && !( <flags> & statf_invisible ) && !( <flags> & statf_sleeping ) && !( <flags> & statf_insubstantial ) && !( <flags> & statf_stone ) && !( <flags> & statf_hidden ) && !( <flags> & statf_ridden ) 
         local.attack=<uid> 
        endif 
       endif 
      endif 
     endif 
    endif 
   endif 
  endfor 
  if (<local.attack>) 
   emote hiss 
   bark 2 
   tag.isattacking=<local.attack> 
   attack=<local.attack> 
   uid.<local.attack>.tag.isattackedby=<uid> 
  endif 
 endif 
endif 
 
[function npcai_lay_eggs] 
if (<serv.chardef.<argv[0]>.baseid>==c_alligator) 
 serv.newitem=<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>> 
 new.name=alligator eggs 
 new.link=<uid> 
 new.attr |= attr_decay 
 new.p=<p> 
 new.timer=<eval <serv.decaytimer> *60> 
 emote lay <new.name> 
 bark 2 
 anim=4 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_lay_eggs>> ?{300 450}:<def0.npcai_timer_lay_eggs>>>, tag.actioninuse= 
elseif (<serv.chardef.<argv[0]>.baseid>==c_bird) || (<serv.chardef.<argv[0]>.baseid>==c_eagle) 
 serv.newitem=<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>> 
 new.name=bird eggs 
 new.color=colors_blue 
 new.link=<uid> 
 new.attr |= attr_decay 
 new.p=<p> 
 new.timer=<eval <serv.decaytimer> *60> 
 emote lay <new.name> 
 bark 2 
 anim=4 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_lay_eggs>> ?{300 450}:<def0.npcai_timer_lay_eggs>>>, tag.actioninuse= 
elseif (<serv.chardef.<argv[0]>.baseid>==c_chicken) 
 serv.newitem=<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>> 
 new.link=<uid> 
 new.attr |= attr_decay 
 new.p=<p> 
 new.timer=<eval <serv.decaytimer> *60> 
 emote lay <new.name> 
 bark 2 
 anim=4 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_lay_eggs>> ?{300 450}:<def0.npcai_timer_lay_eggs>>>, tag.actioninuse= 
elseif (<serv.chardef.<argv[0]>.baseid>==c_snake) || (<serv.chardef.<argv[0]>.baseid>==c_snake_giant) 
 serv.newitem=<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>> 
 new.name=snake eggs 
 new.color=colors_green 
 new.link=<uid> 
 new.attr |= attr_decay 
 new.p=<p> 
 new.timer=<eval <serv.decaytimer> *60> 
 emote lay <new.name> 
 bark 2 
 anim=4 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_lay_eggs>> ?{300 450}:<def0.npcai_timer_lay_eggs>>>, tag.actioninuse= 
endif 
 
[function npcai_poo] 
if (<serv.chardef.<argv[0]>.baseid>==c_rat) || (<serv.chardef.<argv[0]>.baseid>==c_rat_giant) 
 emote lay a turd 
 anim 1 
 bark 4 
 if !(<isempty <def.npcai_id_poo_rat>>) 
  local.pooid=<def0.npcai_id_poo_rat> 
  while !(strmatch(<local.pooid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.pooid>> 
   local.pooid=<streat <local.pooid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
 endif 
 if (<serv.itemdef.<local.id.<dlocal.x>>>) 
  serv.newitem=<local.id.<dlocal.x>> 
 else 
  serv.newitem=i_horse_dung 
 endif 
 new.name=rat poo 
 new.attr |= attr_move_never|attr_decay 
 if (<def0.npcai_can_poo_effect>) 
  new.morex=<qval !<def0.npcai_poo_effect> ?s_poison:<def0.npcai_poo_effect>> 
  new.morey=<qval !<def0.npcai_poo_effect_strength> ?10.0:<def0.npcai_poo_effect_strength>> 
 endif 
 new.p=<p> 
 new.timer=<eval <serv.decaytimer> *60> 
 new.link=<uid> 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_poo_rat>> ?{600 900}:<def0.npcai_timer_poo_rat>>>, tag.actioninuse= 
elseif (<serv.chardef.<argv[0]>.baseid>==c_horse_brown_lt) || (<serv.chardef.<argv[0]>.baseid>==c_horse_brown_dk) || (<serv.chardef.<argv[0]>.baseid>==c_horse_tan) || (<serv.chardef.<argv[0]>.baseid>==c_horse_gray) 
 emote pinch a loaf 
 anim 3 
 bark 3 
 if !(<isempty <def.npcai_id_poo_horse>>) 
  local.pooid=<def0.npcai_id_poo_horse> 
  while !(strmatch(<local.pooid>,0)) 
   local.x += 1 
   local.id.<dlocal.x>=<strarg <local.pooid>> 
   local.pooid=<streat <local.pooid>> 
  endwhile 
  local.x=<eval {1 <local.x>}> 
 endif 
 if (<serv.itemdef.<local.id.<dlocal.x>>>) 
  serv.newitem=<local.id.<dlocal.x>> 
 else 
  serv.newitem=i_horse_dung 
 endif 
 new.attr |= attr_move_never|attr_decay 
 doswitch <dir> 
  new.p=<p.x>,<eval <p.y> +1>,<z>,<map> 
  new.p=<eval <p.x> +-1>,<eval <p.y> +1>,<z>,<map> 
  new.p=<eval <p.x> +-1>,<p.y>,<z>,<map> 
  new.p=<eval <p.x> +-1>,<eval <p.y> +-1>,<z>,<map> 
  new.p=<p.x>,<eval <p.y> +-1>,<z>,<map> 
  new.p=<eval <p.x> +1>,<eval <p.y> +-1>,<z>,<map> 
  new.p=<eval <p.x> +1>,<p.y>,<z>,<map> 
  new.p=<eval <p.x> +1>,<eval <p.y> +1>,<z>,<map> 
 end 
 new.timer=<eval <serv.decaytimer> *60> 
 tag.actioninuse=1 
 timerf <eval <qval <isempty <def.npcai_timer_poo_horse>> ?{600 900}:<def0.npcai_timer_poo_horse>>>, tag.actioninuse= 
endif 
 
[function npcai_throw_rock] 
local.rockid=<findid.<argv[0]>.dispiddec> 
local.color=<findid.<argv[0]>.color> 
if (<def0.npcai_can_throw_rock_need>) 
 if (<findid.<argv[0]>>) 
  consume 1 <argv[0]> 
  local.canthrowrock=1 
 endif 
else 
 local.canthrowrock=1 
endif 
if (<local.canthrowrock>) 
 serv.newitem=<local.rockid> 
 new.attr |= attr_decay 
 new.color=<local.color> 
 new.p=<streat <streat <args>>> 
 new.timer=30 
 effectto <new.dispiddec>, <p.x>, <p.y>, <eval <p.z> +7>, <new.p.x>, <new.p.y>, <eval <new.z> +3>, 0, 0, 0, <qval <local.color> ? <eval <local.color> +-1>:<local.color>>, 0 
 if (<distance <argv[1]>> < <serv.distancetalk>) 
  if (<uid.<argv[1]>.distance <new.uid>>==0) 
   uid.<argv[1]>.damage=<eval <qval <isempty <def.npcai_dam_rock>> ?{10 15}:<def0.npcai_dam_rock>>> 01 <uid> 
  endif 
 endif 
 bark=2 
endif 
tag.npcfightaction=2 
 
[function npcai_breath_fire] 
serv.newitem=<qval <isempty <def.npcai_id_breath_explosion>> ?i_fx_explode:<def0.npcai_id_breath_explosion>> 
new.attr |= attr_decay|attr_move_never 
if !(<isempty <def.color_ice>>) 
 if (<color>==<def0.color_ice>) 
  local.color=<def0.color_ice> 
 endif 
endif 
new.color=<local.color> 
new.p=<streat <args>> 
new.timer=3 
effectto <qval <isempty <def.npcai_id_breath>> ?<new.dispiddec>:<def0.npcai_id_breath>>, <p.x>, <p.y>, <eval <p.z> +7>, <new.p.x>, <new.p.y>, <eval <new.z> +3>, 1, 0, 0, <qval <local.color> ? <eval <local.color> +-1>:<local.color>>, 0 
new.npcai_breath_fire_explosion <uid> 
new.timerf 1, npcai_breath_fire_explosion <uid> 
new.timerf 2, npcai_breath_fire_explosion <uid> 
bark=3 
tag.npcfightaction=2 
 
[function npcai_breath_fire_explosion] 
local.uid=<uid> 
forchars 3 
 if (<isplayer>) 
  damage=<eval <eval <qval <isempty <def.npcai_dam_breath>> ?{45 50}:<def0.npcai_dam_breath>>> /<qval !<distance <local.uid>> ?1:<distance <local.uid>>>> 01 <argn1> 
 endif 
endfor 
 
[events e_npcai] 
on=@deathcorpse 
uid.<argo.uid>.tag.npc=<npc> 
 
on=@destroy 
if (<uid.<tag0.isattackedby>.ischar>) 
 uid.<tag0.isattackedby>.tag.isattacking= 
endif 
 
on=@npcactfight 
if (<dtag0.npcfightaction>==1) 
 return 1 
elseif (<dtag0.npcfightaction>==2) 
 tag.npcfightaction=3 
 timerf 30, tag.npcfightaction= 
endif 
if !(<tag0.npcfightaction>) 
 if (<serv.skill.<action>.key>==wrestling) 
  if (<distance> > 3) 
   if (<body>==c_cyclops) || (<body>==c_ettin) || (<body>==c_ettin_w_axe) || (<body>==c_ogre) || (<body>==c_titan) || (<body>==c_troll) || (<body>==c_troll_w_mace) || (<body>==c_troll_w_axe) 
    if (<def0.npcai_can_throw_rock>) 
     if !(<isempty <def.npcai_id_rock>>) 
      local.rock=<def0.npcai_id_rock> 
      while !(strmatch(<local.rock>,0)) 
       local.x += 1 
       local.rock.<dlocal.x>=<strarg <local.rock>> 
       local.rock=<streat <local.rock>> 
      endwhile 
      local.x=<eval {1 <local.x>}> 
      local.rock=<local.rock.<dlocal.x>> 
     else 
      local.rock=i_rock_plain 
     endif 
     if (<def0.npcai_can_throw_rock_need>) 
      if (<restest <local.rock>>) 
       local.canthrowrock=1 
      endif 
     else 
      local.canthrowrock=1 
     endif 
     if (<local.canthrowrock>) 
      anim=12 
      emote throw a rock at <src.name> 
      timerf 3, npcai_throw_rock <local.rock>, <src.uid>, <src.p> 
      tag.npcfightaction=1 
     endif 
    endif 
   endif 
   if (<npc>==brain_dragon) 
    if (<def0.npcai_can_breath_fire>) 
     anim=12 
     emote breath fire at <src.name> 
     timerf 3, npcai_breath_fire <src.uid>, <src.p> 
     tag.npcfightaction=1 
    endif 
   endif 
  endif 
 endif 
endif 
return 0 
 
on=@skillgain 
if (<eval <<serv.skill.<argn1>.key>>> < <qval <serv.skillclass.0.<serv.skill.<argn1>.key>> ?<serv.skillclass.0.<serv.skill.<argn1>.key>>:1000>) 
 local.rand=<eval {<eval <<serv.skill.<argn1>.key>> <qval <serv.skillclass.0.<serv.skill.<argn1>.key>> ?<serv.skillclass.0.<serv.skill.<argn1>.key>>:1000>}> 
 if (<dlocal.rand> < 25) 
  <serv.skill.<argn1>.key>=<<serv.skill.<argn1>.key>> +0.1 
 endif 
endif 
 
on=@regionenter 
if !(<tag0.npcai>) 
 npcai 
endif 
 
on=@npcai_skillsuccess 
if (<serv.skill.<argn1>.key>==fishing) 
 if (<uid.<argn2>.isitem>) 
  if !(<uid.<argn2>.more1>==mr_nothing) 
   local.rand=<eval {<eval <fishing>> 1000}> 
   if (<dlocal.rand> > 25) 
    uid.<argn2>.amount=1 
    serv.newitem=<serv.regionresource.<uid.<argn2>.more1>.reap> 
    new.amount=<uid.<argn2>.amount> 
    effectto <new.dispiddec>, <uid.<argn2>.p.x>, <uid.<argn2>.p.y>, <eval <uid.<argn2>.z> +3>, <p.x>, <p.y>, <eval <z> +7>, 1, <dir>, 0, <qval <new.color> ?<eval <new.color> +-1>:0>, 0 
    trysrc <uid> new.drop 
    emote catch a <new.name> 
    sound=<eval <qval <isempty <def.npcai_snd_fish>> ?{025 026}:<def0.npcai_snd_fish>>> 
   endif 
   skillgain fishing <eval <fishing> /10> 
  endif 
 else 
  emote could not find anything 
 endif 
 timerf <eval <qval <isempty <def.npcai_timer_fish>> ?{15 30}:<def0.npcai_timer_fish>>>, tag.usingskill= 
elseif (<serv.skill.<argn1>.key>==mining) 
 if (<uid.<argn2>.isitem>) 
  if !(<uid.<argn2>.more1>==mr_nothing) 
   local.rand=<eval {<eval <mining>> 1000}> 
   if (<dlocal.rand> > 25) 
    uid.<argn2>.amount=<eval {1 5}> 
    serv.newitem=<serv.regionresource.<uid.<argn2>.more1>.reap> 
    new.amount=<uid.<argn2>.amount> 
    effectto <new.dispiddec>, <uid.<argn2>.p.x>, <uid.<argn2>.p.y>, <eval <uid.<argn2>.z> +3>, <p.x>, <p.y>, <eval <z> +7>, 1, <dir>, 0, <qval <new.color> ?<eval <new.color> +-1>:0>, 0 
    trysrc <uid> new.bounce 
    emote dig <new.name> 
    sound=<eval <qval <isempty <def.npcai_snd_mine>> ?{0125 0126}:<def0.npcai_snd_mine>>> 
   endif 
   skillgain mining <eval <mining> /10> 
  endif 
 else 
  emote could not find anything 
 endif 
 timerf <eval <qval <isempty <def.npcai_timer_mine>> ?{15 30}:<def0.npcai_timer_mine>>>, tag.usingskill= 
elseif (<serv.skill.<argn1>.key>==lumberjacking) 
 if (<uid.<argn2>.isitem>) 
  if !(<uid.<argn2>.more1>==mr_nothing) 
   local.rand=<eval {<eval <lumberjacking>> 1000}> 
   if (<dlocal.rand> > 25) 
    uid.<argn2>.amount=<eval {1 3}> 
    if (<argn3>) 
     serv.newitem=i_kindling 
    else 
     serv.newitem=<serv.regionresource.<uid.<argn2>.more1>.reap> 
    endif 
    new.amount=<uid.<argn2>.amount> 
    effectto <new.dispiddec>, <uid.<argn2>.p.x>, <uid.<argn2>.p.y>, <eval <uid.<argn2>.z> +3>, <p.x>, <p.y>, <eval <z> +7>, 1, <dir>, 0, <qval <new.color> ?<eval <new.color> +-1>:0>, 0 
    trysrc <uid> new.bounce 
    if (<new.baseid>==i_log) || (<new.baseid>==i_kindling) 
     emote chop <new.name> 
    else 
     emote chop <qval <new.amount>==1 ?<new.name> log:<new.name> logs> 
    endif 
    sound=<eval <qval <isempty <def.npcai_snd_chop>> ?{0147 0148}:<def0.npcai_snd_chop>>> 
   endif 
   skillgain mining <eval <lumberjacking> /10> 
  endif 
 else 
  emote could not find anything 
 endif 
 timerf <eval <qval <isempty <def.npcai_timer_chop>> ?{15 30}:<def0.npcai_timer_chop>>>, tag.usingskill= 
endif 
 
[events e_npcai_players] 
on=@itemstep 
if (<def0.npcai_can_poo_effect>) 
 if (<act.baseid>==<qval <isempty <def.npcai_id_poo>> ?i_horse_dung:<def0.npcai_id_poo>>) 
  if (<act.morex>) && (<act.morey>) 
   spelleffect <act.morex>, <act.morey>, <act.link.uid> 
   //effectcmp=3,<serv.spell.<act.morex>.effect_id>,15,15,1 
   //sound=<serv.spell.<act.morex>.sound> 
  endif 
 endif 
endif 
if (<def0.npcai_can_step_eggs>) 
 if (<serv.itemdef.<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>>>) 
  if (<act.dispid>==<qval <isempty <def.npcai_id_eggs>> ?i_eggs_fresh:<def0.npcai_id_eggs>>) 
   act.dispid=<qval <isempty <def.npcai_id_eggs_stepped>> ?i_eggshells:<def0.npcai_id_eggs_stepped>> 
   act.name=<serv.itemdef.<act.dispid>.name> 
   act.update 
   act.sound=<eval <def0.npcai_snd_eggs_stepped>> 
  endif 
 endif 
endif 
 
[function effectto] 
forclients 18 
 if (<account.resdisp> >= 4) 
  sendpacket 0c0 00 00 00 00 00 00 00 00 00 W<argv[0]> W<argv[1]> W<argv[2]> B<argv[3]> W<argv[4]> W<argv[5]> B<argv[6]> B<argv[7]> 00 00 00 B<argv[8]> B<argv[9]> D<argv[10]> D<argv[11]> 
 endif 
endfor 
 
[function effectcmp] 
if !(<isempty <strarg <argv[4]>>>) 
 local.explode=<strarg <argv[4]>> 
endif 
if !(<isempty <strarg <streat <argv[4]>>>>) 
 local.color=<strarg <streat <argv[4]>>> 
endif 
if !(<isempty <strarg <streat <streat <argv[4]>>>>>) 
 local.render=<strarg <streat <streat <argv[4]>>>> 
endif 
if !(<isempty <argv[5]>>) 
 local.render=<argv[5]> 
endif 
local.src=<uid> 
if !(<eval <argv[0]>>) 
 forclients 18 
  if (<account.resdisp> >= 4) 
   sendpacket 0c0 b<argv[0]> d<src.uid> d<local.src> w<argv[1]> w<src.p.x> w<src.p.y> b<src.z> w<uid.<local.src>.p.x> w<uid.<local.src>.p.y> b<uid.<local.src>.z> b<argv[2]> b<argv[3]> w0 b01 b<local.explode> d<local.color> d<local.render> 
  endif 
 endfor 
elseif (<eval <argv[0]>>==1) && !(<isitem>) 
 forclients 18 
  if (<account.resdisp> >= 4) 
   sendpacket 0c0 b<argv[0]> d<local.src> d<uid> w0 w0 w0 b0 w0 w0 b0 b0 b0 w0 b0 b0 d0 d0 
  endif 
 endfor 
elseif (<eval <argv[0]>>==2) && (<isitem>) 
 forclients 18 
  if (<account.resdisp> >= 4) 
   sendpacket 0c0 b<argv[0]> d<local.src> d<uid> w<argv[1]> w<uid.<local.src>.p.x> w<uid.<local.src>.p.y> b<uid.<local.src>.z> w0 w0 b0 b<argv[2]> b<argv[3]> w0 b01 b0 d<local.color> d<local.render> 
  endif 
 endfor 
elseif (<eval <argv[0]>>==3) && !(<isitem>) 
 forclients 18 
  if (<account.resdisp> >= 4) 
   sendpacket 0c0 b<argv[0]> d<local.src> d<uid> w<argv[1]> w<uid.<local.src>.p.x> w<uid.<local.src>.p.y> b<uid.<local.src>.z> w0 w0 b0 b<argv[2]> b<argv[3]> w0 b01 b0 d<local.color> d<local.render> 
  endif 
 endfor 
elseif (<eval <argv[0]>>==4) 
 if (<account.resdisp> >= 4) 
  sendpacket 070 b<argv[0]> d<local.src> d<uid> w<argv[1]> w0 w0 b0 w0 w0 b0 b0 b0 w0 b0 b0 
 endif 
endif 
 
[eof] 
 
********************************************************************************* 
  
***************************************************************** 
[plevel 6] 
enable_npcai 
//******************************************** This command enables the script in game 
 
 
 
[defname npcai] 
npcai_maps 5 //Total amount of maps your server uses. 
 
//******************************************  This is how many maps you want the script to work on..Mine is set to one 
 
/////*********************** All these are variables (things the npc can so ) so this could be stuff like fight and one thing is sell and buy from vendors.. Kind of have to think what a player does, but buy and sell to vendors would add the ability to create an AI functioning economy.. 
 
 
 
npcai_can_eatfood_pack 1 //Do NPCs eat food out of pack? 
npcai_can_eatfood_corpse 1 //Do NPCs eat corpses? 
npcai_can_eatfood_hunt 1 //Do NPCs hunt and kill for food? 
npcai_can_eatfood_eggs 1 //Do NPCs eat eggs? 
npcai_can_eatfood_changecolor 1 //Do NPCs change colors if they eat? 
npcai_can_poo_rat 1 //Do Rats 'poo'? 
npcai_can_poo_horse 1 //Do Horses 'poo'? 
npcai_can_poo_effect 1 //Do Rat 'poos' have a spelleffect? (Defined below) 
npcai_can_mine 1 //Do NPCs mine ore? 
npcai_can_chop 1 //Do NPCs chop wood? 
npcai_can_chop_kindling 1 //Do NPCs chop kindling? 
npcai_can_fish 1 //Do NPCs fish? 
npcai_can_lay_eggs_alligators 1 //Do Alligators lay eggs? 
npcai_can_lay_eggs_birds 1 //Do Birds lay eggs? 
npcai_can_lay_eggs_chickens 1 //Do Chickens lay eggs? 
npcai_can_lay_eggs_snakes 1 //Do Snakes lay eggs? 
npcai_can_step_eggs 1 //Do eggs get crushed when stepped on? 
npcai_can_throw_rock 1 //Do NPCs throw rocks? 
npcai_can_throw_rock_need 1 //Do NPCs need a rock in their pack? 
npcai_can_breath_fire 1 //Do NPCs breath fire? 
 
npcai_id_eatfood_changecolor t_ore, t_ingot, t_log, t_board //NPCs will change colors to these item ids and types when eaten. 
npcai_id_poo_rat i_horse_dung //ID of 'poo' for Rats 
npcai_id_poo_horse i_horse_dung //ID of 'poo' for Horses 
npcai_id_kindling i_kindling //ID of the kindling NPCs chop 
npcai_id_rock i_rock_plain //ID of Rock(s) thrown by Cyclops, Ettins, Ogres, Titans, Trolls 
npcai_id_breath i_fire_column //ID of fire breathed by NPCs 
npcai_id_breath_explosion i_fx_explode //ID of explosion breathed by NPCs 
npcai_id_eggs i_eggs_fresh //ID of freshly laid eggs 
npcai_id_eggs_stepped i_eggshells //ID of stepped on eggs 
 
npcai_resource_ore mr_nothing, mr_rusty, mr_iron, mr_copper //Region Resource ID(s) for NPCs that mine ore 
npcai_resource_chop mr_nothing, mr_tree //Region Resource ID(s) for NPCs that chop wood 
npcai_resource_fish mr_nothing, mr_fish1, mr_fish2, mr_fish3, mr_fish4 //Region Resource ID(s) for NPCs that fish fish 
 
npcai_snd_eat {03a 03c} //SFX for eating food, corpses, eggs 
npcai_snd_fish {025 026} //SFX for fishing fish 
npcai_snd_chop {0147 0148} //SFX for chopping a tree 
npcai_snd_mine {0125 0126} //SFX for mining ore 
npcai_snd_eggs_stepped {01c2 01c6} //SFX of stepping on eggs 
 
npcai_poo_effect s_poison //Spelleffect of poisonous Rat 'poo' 
npcai_poo_effect_strength 10.0 //Strength of the spelleffect of poisonous Rat 'poo' 
 
npcai_dam_rock {10 15} //Damage received when being hit by a rock 
npcai_dam_breath {45 50} //Damage received when being hit by dragon's breath 
 
npcai_timer_delay {1 360} //Delay in seconds between 'checks' for NPCs to do 'things' - larger the range in value the less CPU this script will use, lower the value and NPCs will do 'things' more often, default: {1 360} - Use cautiously 
 
 
//****************** This section is where stuff like fight and craft would be extended and also buy and sell. 
 
npcai_timer_fish {15 30} //Time between the use of fishing by NPCs 
npcai_timer_chop {15 30} //Time between the use of lumberjacking by NPCs 
npcai_timer_mine {15 30} //Time between the use of mining by NPCs 
 
 
// Some ideas to add to make the npc more player like 
 
// npcai_timer_sell {15 30} 
// npcai_timer_buy {15 30} 
// npcai_timer_huntmonsters {15 30} 
//npcai_timer_craft_tinker{15 30} 
//npcai_timer_craft_blacksmith{15 30} 
//npcai_timer_craft_carpentry{15 30} 
 
 
 
//******************************************************************* 
 
npcai_timer_eatfood_decay 10 //Time until food drops by 1 in value 
npcai_timer_eatfood_hungry {600 660} //Time between eating food if NPC is hungry 
npcai_timer_eatfood_hungrier {330 360} //Time between eating food if NPC is very hungry 
npcai_timer_eatfood_hungriest {180 210} //Time between eating food if NPC is extremely hungry 
npcai_timer_eatfood_replenish 30 //Time until an NPC replenishes it's foodtypes after becoming full 
npcai_timer_poo_rat {1200 1800} //Time between each Rat 'poo' 
npcai_timer_poo_horse {900 1200} //Time between each Horse 'poo' 
npcai_timer_lay_eggs {450 600} //Time between eggs laid by NPCs 
npcai_timer_throw_rock {15 30} //Time between each rock thrown by an NPC 
******************************************************************************* 
 
//***************  So thats a nice chunk of the entire code just used for variables.
			
			
			
			
				
(This post was last modified: 01-16-2020 12:50 PM by Lestatnine.)
 
				
			 
		 |