Homunculus.pm
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. package AI::Slave::Homunculus;
  2. use Log qw/message warning error debug/;
  3. use strict;
  4. use base qw/AI::Slave/;
  5. use Globals;
  6. use Log qw/message warning error debug/;
  7. use AI;
  8. use Utils;
  9. use Misc;
  10. use Translation;
  11. sub iterate {
  12. my $slave = shift;
  13. # homunculus is in rest
  14. if ($slave->{state} & 2) {
  15. # homunculus is dead
  16. } elsif ($slave->{state} & 4) {
  17. # homunculus is alive
  18. } elsif ($slave->{appear_time} && $field{name} eq $slave->{map}) {
  19. # auto-feed homunculus
  20. $config{homunculus_intimacyMax} = 999 if (!$config{homunculus_intimacyMax});
  21. $config{homunculus_intimacyMin} = 911 if (!$config{homunculus_intimacyMin});
  22. $config{homunculus_hungerTimeoutMax} = 60 if (!$config{homunculus_hungerTimeoutMax});
  23. $config{homunculus_hungerTimeoutMin} = 10 if (!$config{homunculus_hungerTimeoutMin});
  24. $config{homunculus_hungerMin} = 11 if (!$config{homunculus_hungerMin});
  25. $config{homunculus_hungerMax} = 24 if (!$config{homunculus_hungerMax});
  26. # Stop feeding when homunculus reaches 999~1000 intimacy, its useless to keep feeding from this point on
  27. # you can starve it till it gets 911 hunger (actually you can starve it till 1 but we wanna keep its intimacy loyal).
  28. if (($slave->{intimacy} >= $config{homunculus_intimacyMax}) && $slave->{feed}) {
  29. $slave->{feed} = 0
  30. } elsif (($slave->{intimacy} <= $config{homunculus_intimacyMin}) && !$slave->{feed}) {
  31. $slave->{feed} = 1
  32. }
  33. if ($slave->{hungerThreshold} 
  34. && $slave->{hunger} ne '' 
  35. && $slave->{hunger} <= $slave->{hungerThreshold} 
  36. && timeOut($slave->{feed_time}, $slave->{feed_timeout})
  37. && $slave->{feed}
  38. && $config{homunculus_autoFeed} 
  39. && (existsInList($config{homunculus_autoFeedAllowedMaps}, $field{'name'}) || !$config{homunculus_autoFeedAllowedMaps})) {
  40. $slave->processFeeding();
  41. message T("Auto-feeding your Homunculus (".$slave->{hunger}." hunger).n"), 'slave';
  42. $messageSender->sendHomunculusFeed();
  43. message ("Next feeding at: ".$slave->{hungerThreshold}." hunger.n"), 'slave';
  44. # No random value at initial start of Kore, lets make a few =)
  45. } elsif ($slave->{actorType} eq 'Homunculus' && !$slave->{hungerThreshold}) {
  46. $slave->processFeeding();
  47. } else {
  48. $slave->SUPER::iterate;
  49. }
  50. }
  51. }
  52. sub processFeeding {
  53. my $slave = shift;
  54. # Homun loses intimacy if you let hunger fall lower than 11 and if you feed it above 75 (?)
  55. $slave->{hungerThreshold} = $config{homunculus_hungerMin}+ int(rand($config{homunculus_hungerMax} - $config{homunculus_hungerMin}));
  56. # Make a random timeout, to appear more humanlike when we have to feed our homun more than once in a row.
  57. $slave->{feed_timeout} = int(rand(($config{homunculus_hungerTimeoutMax})-$config{homunculus_hungerTimeoutMin}))+$config{homunculus_hungerTimeoutMin};
  58. $slave->{feed_time} = time;
  59. }
  60. 1;