Advertisement
Marcel12311

Gothic 2 Online Small AI monster

Jan 2nd, 2022 (edited)
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. // Don't change variables if you don't know what you are doing
  2. local wolf = null;
  3. local warn = 0; // if get 3 warns monster attack hero
  4. local test_npc = null;
  5. local startPosition = null; // variable to calculate first position of monster spawned
  6. local idTimer = null; // timer
  7. local randomnumber = null; // generate random number
  8. local nums = null; // generate random number
  9. local randomObrot = null; // generate random number
  10. local angle = null; // save vector of monster
  11. local x = null; // another timer
  12. local aggressive = false; // if we shot magic/crossbow/bow in high distance so monster are going to try kill us
  13.  
  14. function spawnWolf()
  15. {
  16. spawnNpc(wolf);
  17.  
  18. setPlayerInstance(wolf, "ZOMBIE01");
  19. setPlayerPosition(wolf, 180, -91, -1948);
  20. setPlayerColor(wolf, 255, 0, 0);
  21. setPlayerStrength(wolf, 200);
  22. setPlayerHealth(wolf, 1000);
  23. setPlayerMaxHealth(wolf, 1000);
  24. }
  25.  
  26. local function Wolf_AI()
  27. {
  28. if (isPlayerDead(wolf)) return;
  29.  
  30. local hPos = getPlayerPosition(heroId);
  31. local wPos = getPlayerPosition(wolf);
  32.  
  33. local dist = getDistance3d(hPos.x, hPos.y, hPos.z, wPos.x, wPos.y, wPos.z);
  34. local distWolf = getDistance3d(wPos.x, wPos.y, wPos.z, startPosition.x, startPosition.y, startPosition.z);
  35. nums=rand()%55;
  36.  
  37. if ((dist <= 1100 || aggressive == true) && getPlayerHealth(heroId) > 0)
  38. {
  39. if(warn < 3 && aggressive == false){
  40. setTimerInterval(idTimer,4000);
  41. angle = getVectorAngle(wPos.x, wPos.z, hPos.x, hPos.z);
  42. setPlayerAngle(wolf, angle);
  43.  
  44.  
  45. playAni(wolf,"T_WARN");
  46. setPlayerAngle(wolf, getPlayerAngle(wolf));
  47. warn++;
  48.  
  49. }else if(warn >= 3 || aggressive == true){
  50. setTimerInterval(idTimer,500);
  51. local angle = getVectorAngle(wPos.x, wPos.z, hPos.x, hPos.z);
  52. setPlayerAngle(wolf, angle);
  53. warn++;
  54.  
  55. if (dist <= 250)
  56. {
  57.  
  58. if(dist <= 100)playAni(wolf,"T_FISTJUMPB");
  59. else{
  60.  
  61. randomObrot = rand()%10;
  62. if (randomObrot >= 4 && randomObrot <= 5){playAni(wolf,"T_FISTJUMPB");setTimerInterval(idTimer,800);}
  63. else if (randomObrot >= 6 && randomObrot <= 7){
  64. {playAni(wolf,"T_FISTRUNSTRAFEL");setTimerInterval(idTimer,800);}
  65. }else if (randomObrot >= 8){
  66. {playAni(wolf,"T_FISTRUNSTRAFEL");setTimerInterval(idTimer,800);}
  67. }else{
  68.  
  69. if(getPlayerAni(heroId) == "S_1HATTACK" || getPlayerAni(heroId) == "T_1HATTACKL" || getPlayerAni(heroId) == "T_1HATTACKR"){
  70. playAni(wolf,"T_STUMBLEB");
  71. setTimerInterval(idTimer,3200);
  72. }else {
  73. setTimerInterval(idTimer,1800);
  74. playAni(wolf, "S_FISTATTACK");
  75. if(getPlayerAni(heroId) == "T_1HPARADEJUMPB" || getPlayerAni(heroId) == "T_1HJUMPB"){
  76. }else {setTimerInterval(idTimer,1200);hitPlayer(wolf, heroId);}
  77. }
  78. }
  79. }
  80. }
  81. else{
  82. playAni(wolf, "S_FISTRUNL");}
  83. }
  84.  
  85. if(dist >= 650 && nums == 19){playAni(wolf,"T_WARN");setTimerInterval(idTimer,4500);aggressive=false;}
  86.  
  87. }else{
  88. setTimerInterval(idTimer,500);
  89. warn=0;
  90. if(distWolf >= 60){
  91. local angles = getVectorAngle(wPos.x, wPos.z, startPosition.x, startPosition.z);
  92. setPlayerAngle(wolf, angles);
  93. playAni(wolf, "S_FISTRUNL");
  94. }else{
  95. setTimerInterval(idTimer,5500);
  96. playAni(wolf,"S_FISTRUN")
  97. randomnumber = rand()%3;
  98. if(randomnumber==0)playAni(wolf,"R_ROAM1");
  99. else if(randomnumber==1)playAni(wolf,"R_ROAM2");
  100. else if(randomnumber==2)playAni(wolf,"R_ROAM3");
  101. }
  102. }
  103. }
  104.  
  105. local function hitHandler(kid, pid, dmg)
  106. {
  107. print (kid + " " + pid + " -> " + dmg);
  108. if (pid == wolf){
  109. aggressive = true;
  110. }
  111. }
  112.  
  113. addEventHandler("onPlayerHit", hitHandler);
  114.  
  115. // function delete and spawn monster if we kill it
  116. function SpawnNpcs(){
  117. print("spawned npc!")
  118. unspawnNpc(wolf);
  119. spawnWolf();
  120. if (x != null){
  121. killTimer(x);
  122. }
  123. }
  124.  
  125. local function deadHandler(pid)
  126. {
  127. print ("Die: " + pid);
  128.  
  129. if (pid == wolf)
  130. {
  131. warn = 0;
  132. playAni(pid,"T_DEADB");
  133. x = setTimer(SpawnNpcs,12000,0);
  134. aggressive = false;
  135. }
  136. if (pid == heroId){warn=0;aggressive=false;}
  137. }
  138.  
  139. addEventHandler("onPlayerDead", deadHandler);
  140.  
  141. local function initHandler()
  142. {
  143. enableEvent_Render(true);
  144. // Test NPC
  145. test_npc = createNpc("Graham");
  146. spawnNpc(test_npc);
  147. setPlayerPosition(test_npc, 1310, -90, 332);
  148. setPlayerAngle(test_npc, 270);
  149. setPlayerColor(test_npc, 0, 0, 200);
  150. setPlayerHealth(test_npc, 1000);
  151. setPlayerMaxHealth(test_npc, 1000);
  152. setPlayerVisual(test_npc, "Hum_Body_Naked0", 3, "Hum_Head_Psionic", 59);
  153.  
  154. equipArmor(test_npc, Items.id("ITAR_VLK_H"));
  155. playAni(test_npc, "S_HGUARD");
  156.  
  157. // Our pet
  158. wolf = createNpc("Soiref");
  159. print("Soiref id: " + wolf);
  160. spawnWolf();
  161. startPosition = getPlayerPosition(wolf);
  162. idTimer = setTimer(Wolf_AI, 500, 0);
  163. }
  164.  
  165. addEventHandler("onInit", initHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement