Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 47.59 KB | None | 0 0
  1.  
  2.  
  3. 
  4.  
  5. import int GetRootMapData(Map&map,uint index)from"mapdata";
  6. import void SetRootMapData(Map&map,uint index,int val)from"mapdata";
  7. import int GetRootMapData(Location&loc,uint index)from"mapdata";
  8. import void SetRootMapData(Location&loc,uint index,int val)from"mapdata";
  9.  
  10. import void AddWaitPlan(Critter&critter,uint waittime)from"npc_common";
  11. import bool AttackCritter(Critter&attacker,Critter&target,uint minhp)from"npc_common";
  12. import bool AttackCritter(Critter&attacker,Critter&target)from"npc_common";
  13. import bool CanUseWeapon(Critter&critter,Item@weapon)from"npc_common";
  14. import bool CanUseWeapon(Critter&critter,uint proto)from"npc_common";
  15. import void ClearIllegalFlags(Critter&critter)from"npc_common";
  16. import bool HasIntelligentBrain(Critter&follower)from"npc_common";
  17. import void SetCritterIllegalFlag(Critter&critter,int reason)from"npc_common";
  18. import void SetCritterIllegalFlag(Critter&critter,int location,int reason)from"npc_common";
  19. import bool HasSameScript(Critter&critter1,Critter&critter2)from"npc_common";
  20. import bool IsFlaggedAsIllegal(Critter&critter)from"npc_common";
  21. import bool IsFlaggedAsIllegal(Critter&critter,int location)from"npc_common";
  22. import bool IsInLocation(Critter&critter,int locationPID)from"npc_common";
  23. import bool MoveByDir(Critter&critter,uint8 dir,uint steps,bool run)from"npc_common";
  24. import void MoveRandom(Critter&npc,uint maxDist)from"npc_common";
  25. import void MoveRandom(Critter&npc,uint maxDist,bool Run)from"npc_common";
  26. import void MoveRandom(Critter&npc,uint maxDist,uint stepDist,bool Run)from"npc_common";
  27. import void TransferToNPCMap(Critter&critter)from"npc_common";
  28. import void UnsetCritterIllegalFlag(Critter&critter)from"npc_common";
  29. import void UnsetCritterIllegalFlag(Critter&critter,int location)from"npc_common";
  30. import void UnsetCritterIllegalFlag(uint id,int location)from"npc_common";
  31. import int GetCritterIllegalFlag(Critter&critter)from"npc_common";
  32. import int GetCritterIllegalFlag(Critter&critter,int location)from"npc_common";
  33. import bool HasUnusableWeapon(Critter&critter,uint bag)from"npc_common";
  34. import bool HasUnusableWeapon(Critter&critter)from"npc_common";
  35. import bool HasUnusableWeapon(uint crpid,uint bag)from"npc_common";
  36. import Item@ArmBestWeapon(Critter&critter)from"npc_common";
  37. import Item@ArmFavoriteWeapon(Critter&critter)from"npc_common";
  38. import void PutAwayItems(Critter&critter)from"npc_common";
  39. import void DropAllItems(Critter&critter)from"npc_common";
  40. import void Heal(Critter&cr)from"npc_common";
  41. import void TryReportOffense(Critter@cr,Critter@offender,int reputationdrop)from"npc_common";
  42. import uint GetCrittersWithScript(Map&map,uint16 pid,uint findType,string&scriptName,string&funcDeclaration,array<Critter@>@critters)from"npc_common";
  43. import uint GetCrittersLoc(Location&loc,uint16 pid,uint findType,array<Critter@>@critters)from"npc_common";
  44. import uint GetNearGuards(Map@map,uint16 hexX,uint16 hexY,uint radius,array<Critter@>@crits)from"npc_common";
  45. import uint GetNearFactionGuards(Map@map,uint16 hexX,uint16 hexY,uint radius,uint faction,array<Critter@>@crits)from"npc_common";
  46. import string GenerateNewName(Critter&critter)from"npc_common";
  47. import string GetStoredName(Critter&critter)from"npc_common";
  48. import string GetStoredFirstName(Critter&critter)from"npc_common";
  49. import bool Flee(Critter&cr)from"npc_common";
  50. import bool Flee(Critter&cr,bool Run)from"npc_common";
  51. import void FindFreeHexes(Map@map,uint16 hexX,uint16 hexY,int&num,array<uint16>&coordsX,array<uint16>&coordsY)from"npc_common";
  52. import bool FindNearestFreeHex(Map@map,uint16 hexX,uint16 hexY,uint16&outX,uint16&outY)from"npc_common";
  53. import void SetDeleteEvent(Critter&cr,uint time)from"npc_common";
  54. import void DropDeleteEvent(Critter&cr)from"npc_common";
  55.  
  56. import bool AddMiscPlane(Critter&npc,uint priority,uint waitMinute,string@funcName)from"npc_planes";
  57. import bool AddMiscPlane(Critter&npc,uint priority,int identifier,uint identifierExt,uint waitSecond,string@funcName)from"npc_planes";
  58. import bool AddWalkPlane(Critter&npc,uint priority,uint16 hexX,uint16 hexY,uint8 dir,bool run,uint cut)from"npc_planes";
  59. import bool AddWalkPlane(Critter&npc,uint priority,int identifier,uint identifierExt,uint16 hexX,uint16 hexY,uint8 dir,bool run,uint cut)from"npc_planes";
  60. import bool AddAttackPlane(Critter&npc,uint priority,Critter&target)from"npc_planes";
  61. import bool AddAttackPlane(Critter&npc,uint priority,uint critId)from"npc_planes";
  62. import bool AddAttackPlane(Critter&npc,uint priority,Critter&target,int minHp)from"npc_planes";
  63. import bool AddAttackPlane(Critter&npc,uint priority,uint critId,int minHp)from"npc_planes";
  64. import bool AddAttackPlane(Critter&npc,uint priority,Critter&target,bool run)from"npc_planes";
  65. import bool AddPickPlane(Critter&npc,uint priority,uint16 hexX,uint16 hexY,uint16 protoId,uint useItemId,bool toOpen)from"npc_planes";
  66. import bool AddPickPlane(Critter&npc,uint priority,Item@item,uint useItemId,bool toOpen)from"npc_planes";
  67. import bool AddPickPlane(Critter&npc,uint priority,Item@item,uint useItemId,bool toOpen,bool run)from"npc_planes";
  68. import bool AddHealCritterPlane(Critter&npc,uint priority,Critter@target,bool run)from"npc_planes";
  69. import bool AddDoctorCritterPlane(Critter&npc,uint priority,Critter@target,bool run)from"npc_planes";
  70.  
  71. import uint EraseAttackPlane(Critter&npc,uint priority,Critter&target)from"npc_planes";
  72. import uint EraseAttackPlane(Critter&npc,uint priority,uint critId)from"npc_planes";
  73.  
  74. uint GetOwnerId(Map&map)
  75. {
  76. return GetRootMapData(map,(5));
  77. }
  78. void SetOwnerId(Map&map,uint playerId)
  79. {
  80. SetRootMapData(map,(5),playerId);
  81. }
  82.  
  83. void MobIdle(Critter&mob)
  84. {
  85.  
  86. if(Random(0,1)==0)
  87. mob.MoveRandom();
  88. mob.Wait((3000)+Random(0,500));
  89. }
  90.  
  91. void MobShowCritter(Critter&mob,Critter&showCrit)
  92. {
  93. if(showCrit.Stat[(112)]!=mob.Stat[(112)])
  94. AddAttackPlane(mob,(50),showCrit);
  95. }
  96.  
  97. bool MobsDead(Map&map,array<uint16>&pids)
  98. {
  99. uint num=0;
  100. for(uint i=0,j=pids.length();i<j;i++)
  101. num+=map.GetCritters(pids[i],(0x03),null);
  102. {;};
  103. return num==0;
  104. }
  105.  
  106. bool MobAttacked(Critter&cr,Critter&attacker)
  107. {
  108. cr.SendMessage((1020),attacker.Id,(2));
  109. return false;
  110. }
  111.  
  112. void MobOnMessage(Critter&cr,Critter&fromCr,int message,int value)
  113. {
  114. if(message==(1020))
  115. AttackCritter(cr,GetCritter(value));
  116. }
  117.  
  118. void check_owner(Critter&cr,int,int,int)
  119. {
  120. cr.Say((11),"Owner: "+GetSafePlayerName(GetOwnerId(cr.GetMap())));
  121. }
  122.  
  123. import Location@GetLocationOf(Critter&critter)from"utils";
  124. import string GetLocationName(uint locId)from"utils";
  125. import string GetLocationName(Location@loc)from"utils";
  126. import bool ReadPids(array<int>&out pids,bool removeinvalid)from"utils";
  127. import void ReadDefines(string@fileName,dictionary&items,array<string>@defines)from"utils";
  128. import void ReadMsgStrings(string&fileName,dictionary&output)from"utils";
  129. import bool ParseDefine(const string&in line,string&out spid,int&out id)from"utils";
  130. import int SkipWhitespaces(const string&in str,int start)from"utils";
  131. import int SkipNonWhitespaces(const string&in str,int start)from"utils";
  132. import bool IsParameterTag(string&str)from"utils";
  133. import string GetParameterString(array<string@>@arr,string&parameter)from"utils";
  134. import int GetIndexOfString(array<string@>@arr,string&str)from"utils";
  135. import string GetConcatenatedString(array<string@>@arr,uint startindex,int stopindex)from"utils";
  136. import string GetMsgStr(int textMsg,uint strNum)from"utils";
  137. import string GetConditionOfCritter(Critter@cr)from"utils";
  138. import string GetExtConditionOfCritter(Critter@cr)from"utils";
  139. import uint GetAllOnlinePlayers(array<Critter@>&out players)from"utils";
  140. import uint GetAuthenticatedPlayers(array<Critter@>&out players)from"utils";
  141. import uint GetAuthenticatedPlayers(array<Critter@>&out players,bool ignorePriviledges)from"utils";
  142. import uint GetNumberOfPlayersOnline()from"utils";
  143. import void SetTurnBasedAvailability(Location@loc)from"utils";
  144. import bool IsEncounterMap(Map@map)from"utils";
  145. import bool IsTown(Map@map)from"utils";
  146. import uint GetMapType(Map@map)from"utils";
  147. import void LockDoor(uint x,uint y,Map@map,uint complexity,uint lockid)from"utils";
  148. import void UnlockDoor(uint x,uint y,Map@map)from"utils";
  149. import void ClearContainer(Item@container)from"utils";
  150. import void MoveItemsCritterToCont(Critter&crFrom,Item&contTo,uint specid)from"utils";
  151. import string GetCritterInfo(Critter&cr)from"utils";
  152. import bool AddExpTeam(Critter&critter,int xp)from"utils";
  153. import void ClearEnemyStack(Critter&critter)from"utils";
  154. import void ClearEnemyStacksOnMap(Map@map)from"utils";
  155. import bool IsCurrentEnemy(Critter&cr,uint targetId)from"utils";
  156. import string@GetSafePlayerName(uint id)from"utils";
  157. import string GetSafePlayerName(uint id,string&onSuccess,string&onError)from"utils";
  158. import IDateTime@GetCurrentDateTime()from"utils";
  159. import string GetCurrentDateTimeString()from"utils";
  160. import string GetCurrentDateTimeString(bool date,bool time)from"utils";
  161. import Critter@GetMostSkilled(array<Critter@>@group,int skill)from"utils";
  162. import string GetAuthString(Critter&player)from"utils";
  163. import string GetAuthString(int accesslevel)from"utils";
  164. import bool CanRequestHelp(Critter&player)from"utils";
  165. import void SetRequestedHelp(Critter&player)from"utils";
  166. import void SetRequestedHelp(Critter&player,int minutes)from"utils";
  167. import Critter@GetOnlineGM()from"utils";
  168. import void Preprocess(Critter&player,string&commandString)from"utils";
  169. import bool IsHumanoid(Critter@cr)from"utils";
  170. import uint GetGroupIndex(Critter&cr)from"utils";
  171. import uint GetGroupIndex(int st)from"utils";
  172. import void SetGroupIndex(Critter&cr,uint val)from"utils";
  173. import uint GetGroupRank(Critter&cr)from"utils";
  174. import void SetGroupRank(Critter&cr,uint val)from"utils";
  175. import uint GetGroupMode(Critter&cr)from"utils";
  176. import void SetGroupMode(Critter&cr,uint val)from"utils";
  177. import void SetGroupInfo(Critter&cr,uint faction,uint rank,uint mode)from"utils";
  178. import void SetGroupInfoPack(Critter&cr,uint packInfo)from"utils";
  179. import void ClearEvents(Critter&cr)from"utils";
  180. import void MapRefreshVisible(Map@map,uint hexX,uint hexY,uint radius)from"utils";
  181.  
  182. import int GetGvar(uint gvar)from"utils";
  183. import void SetGvar(uint gvar,uint value)from"utils";
  184. import int GetLLvar(Location&location,uint llvar)from"utils";
  185. import int GetLLvar(uint locationId,uint llvar)from"utils";
  186. import void SetLLvar(Location&location,uint llvar,uint value)from"utils";
  187. import int GetLMvar(Map&map,uint llvar)from"utils";
  188. import int GetLMvar(uint mapId,uint llvar)from"utils";
  189. import void SetLMvar(Map&map,uint llvar,uint value)from"utils";
  190. import int GetLIvar(Item&item,uint llvar)from"utils";
  191. import int GetLIvar(uint itemId,uint llvar)from"utils";
  192. import void SetLIvar(Item&item,uint llvar,uint value)from"utils";
  193. import int GetLvar(Critter&critter,uint lvar)from"utils";
  194. import int GetLvar(uint id,uint lvar)from"utils";
  195. import void SetLvar(Critter&critter,uint lvar,uint value)from"utils";
  196. import void SetLvar(uint id,uint lvar,uint value)from"utils";
  197. import int GetUvar(uint uvar,uint key,uint index)from"utils";
  198. import void SetUvar(uint uvar,uint key,uint index,uint value)from"utils";
  199. import void SetLLvar(uint locationId,uint llvar,uint value)from"utils";
  200.  
  201. import uint GetContainerValue(Item@container)from"utils";
  202. import uint BaseItemValue(uint pid,bool ammo)from"utils";
  203. import uint BaseItemValue(uint pid,uint broken,uint det,bool ammo)from"utils";
  204. import uint BaseItemValue(Item@item)from"utils";
  205. import uint BaseItemValue(Item@item,uint proc)from"utils";
  206. import uint BaseSingleItemValue(Item@item)from"utils";
  207. import uint BaseSingleItemValue(Item@item,uint proc)from"utils";
  208.  
  209. import void SetBloodType(Critter@cr)from"utils";
  210. import string GetBloodType(Critter@cr)from"utils";
  211. import string GetBloodRandom()from"utils";
  212.  
  213. import void LogCommandUsage(Critter&player,string&commandString)from"utils";
  214. import void DropTimeouts(Critter&cr)from"utils";
  215.  
  216. import bool HasItem(Critter@cr,uint pid)from"utils";
  217. import bool HasSomeWeapon(Critter@cr)from"utils";
  218. import uint GetBestWeaponSkill(Critter@cr)from"utils";
  219. import void GiveBag(uint bag,Critter@cr)from"utils";
  220. import void SetQuestGarbager(uint time,uint playerid,uint locid,uint var,uint val)from"utils";
  221. import Critter@AddNpc(Map@map,uint16 pid,uint16 x,uint16 y,uint8 dir,uint dialogId,string&script,uint aiPack,uint bagId,uint teamId,bool isMob,uint level)from"utils";
  222. import Critter@AddNpc(Map@map,uint16 pid,uint16 x,uint16 y,uint8 dir,uint dialogId,string&script,uint aiPack,uint bagId,uint teamId,uint factionRank,uint factionMode,bool isMob,uint level)from"utils";
  223. import Critter@AddNpc(Map@map,uint16 pid,uint16 x,uint16 y,uint8 dir,array<int>params,uint dialogId,string&script,uint aiPack,uint bagId,uint teamId,bool isMob,uint level)from"utils";
  224. import Critter@AddNpc(Map@map,uint16 pid,uint16 x,uint16 y,uint8 dir,array<int>params,uint dialogId,string&script,uint aiPack,uint bagId,uint teamId,uint factionRank,uint factionMode,bool isMob,uint level)from"utils";
  225. import void AddScore(Critter@cr,uint score,uint points)from"utils";
  226.  
  227. import bool ReloadWeapon(Critter&cr)from"utils";
  228. import Item@GetRadio(Critter&cr)from"utils";
  229. import Item@GetRepairTool(Critter&cr)from"utils";
  230. import Item@GetEquippedItem(Critter&cr,uint Pid)from"utils";
  231. import Item@GetEquippedItem(Critter&cr,array<uint>&Pids)from"utils";
  232. import Item@GetEquippedItemByType(Critter&cr,uint ItemType)from"utils";
  233.  
  234. import bool SkillRoll(Critter@cr,int skill,int bonus)from"utils";
  235. import int SkillCheck(Critter&cr,int skill,int skillused,Item@item,int bonus)from"utils";
  236. import string SkillName(uint8 skill)from"utils";
  237. import void ChangeCrTypeSafe(Critter&cr,uint16 crType)from"utils";
  238.  
  239. import bool Pickable(Item@item)from"utils";
  240.  
  241. import void TransferItemsToContOnMap(Critter&cr,Map@map,int entid,int contpid,int itemtypes)from"utils";
  242. import void TransferItemsFromContOnMap(Critter&cr,Map@map,int entid,int contpid)from"utils";
  243.  
  244. import string IpToString(uint ip)from"utils";
  245.  
  246. import void VerboseAction(Critter&cr,string&text)from"utils";
  247. import void VerboseAction(Critter&cr,Critter&target,string&text)from"utils";
  248. import void VerboseExperience(Critter&cr,int xpDiff,int levelDiff)from"utils";
  249.  
  250. import void SetChosenActions(Critter&cr,array<int>&actions)from"utils";
  251.  
  252. import void HexLine(uint16 x0,uint16 y0,uint16 x1,uint16 y1,array<uint16>@xList,array<uint16>@yList)from"utils";
  253. import void HexCircle(uint16 x0,uint16 y0,uint16 radius,array<uint16>@xList,array<uint16>@yList)from"utils";
  254.  
  255. import bool FindPreferredGridApprox(Map&map,uint16&hx,uint16&hy)from"utils";
  256.  
  257. import bool StrToInt(string@s,uint64&inout val)from"strtoint";
  258. import bool StrToInt(string@s,uint&inout val)from"strtoint";
  259. import bool StrToInt(string@s,uint16&inout val)from"strtoint";
  260. import bool StrToInt(string@s,uint8&inout val)from"strtoint";
  261. import bool StrToInt(string@s,int64&inout val)from"strtoint";
  262. import bool StrToInt(string@s,int16&inout val)from"strtoint";
  263. import bool StrToInt(string@s,int8&inout val)from"strtoint";
  264.  
  265. import int FindInArray(array<int>&arr,int value)from"utils";
  266. import int FindInArray(array<uint>&arr,uint value)from"utils";
  267. import int FindInArray(array<uint16>&arr,uint16 value)from"utils";
  268. import int FindInArray(array<uint8>&arr,uint8 value)from"utils";
  269. import bool FindInArray(array<int>&arr,int id,int&index)from"utils";
  270. import bool FindInArray(array<uint>&arr,uint id,int&index)from"utils";
  271. import bool FindInArray(array<uint8>&arr,uint8 id,int&index)from"utils";
  272. import int FindInArray(array<string>&arr,string&value)from"utils";
  273. import int FindInArray(array<string@>@arr,string&value)from"utils";
  274. import bool Present(int what,array<int>&where)from"utils";
  275. import bool Present(uint what,array<uint>&where)from"utils";
  276. import bool Present(uint16 what,array<uint16>&where)from"utils";
  277. import bool Present(string&what,array<string>&where)from"utils";
  278. import bool Present(string&what,array<string@>@where)from"utils";
  279.  
  280. import uint CreateLocationForGroup(Critter&player,uint16 pid,uint16 worldX,uint16 worldY,array<Critter@>&)from"utils";
  281. import bool FindFirstFreeHex(Map@map,uint16&x,uint16&y,uint8 dir,uint16 maxSteps)from"utils";
  282. import bool FindNearestFreeHex(Map&map,uint16&x,uint16&y,uint radius)from"utils";
  283.  
  284. import bool GetItemCoordinates(Item&item,uint&mapID,uint16&x,uint16&y)from"utils";
  285. import bool ItemOnHex(uint16 pid,Map@map,uint16 x,uint16 y)from"utils";
  286.  
  287. import void PrintCallstack()from"utils";
  288. import void PrintCallstack(int level)from"utils";
  289.  
  290. import bool LocationHasCritters(Location&loc,uint findType)from"utils";
  291. import uint LocationGetCritters(Location&loc,uint findType,array<Critter@>@critters)from"utils";
  292. import bool LocationHasItems(Location&loc,uint16 protoId)from"utils";
  293. import uint LocationGetItems(Location&loc,uint16 protoId,array<Item@>@items)from"utils";
  294. import void LocationDeleteItems(Location&loc,uint16 protoId)from"utils";
  295.  
  296. import bool IsDisposableEncounter(Location@loc)from"utils";
  297.  
  298. shared class CPosition
  299. {
  300. uint x;
  301. uint y;
  302. uint dir;
  303. };
  304.  
  305. shared interface IRect
  306. {
  307. bool IsWithin(Critter&cr);
  308. };
  309.  
  310. shared class Rect:IRect
  311. {
  312. uint x1;
  313. uint y1;
  314. uint x2;
  315. uint y2;
  316.  
  317. Rect(uint x1,uint y1,uint x2,uint y2)
  318. {
  319. this.x1=x1;
  320. this.y1=y1;
  321. this.x2=x2;
  322. this.y2=y2;
  323. }
  324.  
  325. bool IsWithin(Critter&cr)
  326. {
  327. return((cr.HexX>=this.x1&&cr.HexX<=this.x2)&&(cr.HexY>=this.y1&&cr.HexY<=this.y2));
  328. }
  329. };
  330.  
  331. shared interface IDateTime
  332. {
  333. uint16 get_Year();
  334. uint16 get_Month();
  335. uint16 get_DayOfWeek();
  336. uint16 get_Day();
  337. uint16 get_Hour();
  338. uint16 get_Minute();
  339. uint16 get_Second();
  340. uint16 get_Milliseconds();
  341. string@ToString();
  342. };
  343.  
  344. uint[][]PositionDirs=
  345. {
  346. {0},
  347.  
  348. {1,4,3,2,1,0,5,2,3,4,5,0,1},
  349. {1,5,0,1,2,3,4,1,0,5,4,3,2},
  350. {1,4,2},
  351. {1,5,1},
  352. {2,1,2,0,0,1,2,3,3,0,0,4,5,3,3,4,5},
  353. {2,1,2,4,5},
  354. {2,4,4,0,0,4,4,3,3,0,0,2,2,3,3,2,2},
  355. {2,5,5,0,0,5,5,3,3,0,0,1,1,3,3,1,1},
  356. {2,1,2,0,0,0,0,1,2,3,3,3,3,0,0,0,0,4,5,3,3,3,3,4,5}
  357. };
  358.  
  359. shared interface IZone
  360. {
  361. uint GetX();
  362. uint GetY();
  363. uint GetTerrain();
  364. uint8 GetFactor();
  365. void SetFactor(uint8 factor);
  366. int GetValue();
  367. void SetValue(int val);
  368. void AddValue(int val);
  369. void SubValue(uint val);
  370. bool ContainsFlag(uint flag);
  371. void SetQuantity(uint group,uint quantity);
  372. void ChangeQuantity(uint group,int mod);
  373. uint GetBaseQuantity(uint group);
  374. uint GetQuantity(uint group);
  375. uint GetLocationPids(array<uint16>&pids);
  376. };
  377.  
  378. import IZone@GetZone(uint wx,uint wy)from"worldmap";
  379.  
  380. shared class Entire
  381. {
  382. int Number;
  383. uint16 HexX;
  384. uint16 HexY;
  385. uint8 Direction;
  386. };
  387.  
  388. uint ParseEntires(Map&map,array<Entire>&entires,int number)
  389. {
  390. uint oldCount=entires.length();
  391. uint count=map.CountEntire(number);
  392. entires.resize(oldCount+count);
  393.  
  394. for(uint i=0;i<count;i++)
  395. {
  396. Entire@ent=entires[oldCount+i];
  397. if(map.GetEntireCoords(number,i,ent.HexX,ent.HexY,ent.Direction)==false)
  398. return 0;
  399. ent.Number=number;
  400. }
  401.  
  402. return count;
  403. }
  404.  
  405. bool IsEntireFree(uint mappid,int number)
  406. {
  407. Map@map=GetMapByPid(mappid,0);
  408. return IsEntireFree(map,number);
  409. }
  410.  
  411. bool IsEntireFree(Map&map,int number)
  412. {
  413. uint16 x,y;
  414. x=0;
  415. y=0;
  416. return GetEntireFreeHex(map,number,x,y);
  417. }
  418.  
  419. bool GetEntireFreeHex(Map&map,int number,uint16&hx,uint16&hy,uint skip=0)
  420. {
  421. uint count=map.CountEntire(number);
  422.  
  423. for(uint i=skip;i<count;i++)
  424. {
  425. if(map.GetEntireCoords(number,i,hx,hy)&&map.IsHexPassed(hx,hy))
  426. return true;
  427. }
  428.  
  429. if(hx==0||hy==0||hx>=map.GetWidth()-1||hy>=map.GetHeight()-1)
  430. return false;
  431.  
  432. for(uint i=0;i<count;i++)
  433. {
  434. if(map.GetEntireCoords(number,i,hx,hy))
  435. {
  436. for(int x=-1;x<=1;x++)
  437. {
  438. for(int y=-1;y<=1;y++)
  439. {
  440. if(x==0&&y==0)
  441. continue;
  442. if(__MapHexagonal)
  443. {
  444. if((hx%2)==1&&((x==-1&&y==1)||(x==1&&y==1)))
  445. continue;
  446. if((hx%2)==0&&((x==-1&&y==-1)||(x==1&&y==-1)))
  447. continue;
  448. }
  449.  
  450. if(map.IsHexPassed(hx+x,hy+y))
  451. {
  452. hx+=x;
  453. hy+=y;
  454. return true;
  455. }
  456. }
  457. }
  458. }
  459. }
  460. return false;
  461. }
  462.  
  463. bool GetNearEntire(Map&map,int number,uint16&hx,uint16&hy)
  464. {
  465. uint16 hxBase=hx;
  466. uint16 hyBase=hy;
  467.  
  468. array<Entire>entires;
  469. uint count=ParseEntires(map,entires,number);
  470. if(count==0)
  471. return false;
  472.  
  473. hx=entires[0].HexX;
  474. hy=entires[0].HexY;
  475. for(uint i=1;i<count;i++)
  476. {
  477. Entire@ent=entires[i];
  478. if(GetDistantion(hxBase,hyBase,ent.HexX,ent.HexY)<GetDistantion(hxBase,hyBase,hx,hy))
  479. {
  480. hx=ent.HexX;
  481. hy=ent.HexY;
  482. }
  483. }
  484.  
  485. return true;
  486. }
  487.  
  488. bool GetNearEntire(Map&map,int number,uint16&hx,uint16&hy,uint8&dir)
  489. {
  490. uint16 hxBase=hx;
  491. uint16 hyBase=hy;
  492.  
  493. array<Entire>entires;
  494. uint count=ParseEntires(map,entires,number);
  495. if(count==0)
  496. return false;
  497.  
  498. hx=entires[0].HexX;
  499. hy=entires[0].HexY;
  500. dir=entires[0].Direction;
  501. for(uint i=1;i<count;i++)
  502. {
  503. Entire@ent=entires[i];
  504. if(GetDistantion(hxBase,hyBase,ent.HexX,ent.HexY)<GetDistantion(hxBase,hyBase,hx,hy))
  505. {
  506. hx=ent.HexX;
  507. hy=ent.HexY;
  508. dir=ent.Direction;
  509. }
  510. }
  511.  
  512. return true;
  513. }
  514.  
  515. uint __GetColor(int r,int g,int b,int a=0xFF)
  516. {
  517. r=(((r)>(255))?(255):(((r)<(0))?(0):(r)));
  518. g=(((g)>(255))?(255):(((g)<(0))?(0):(g)));
  519. b=(((b)>(255))?(255):(((b)<(0))?(0):(b)));
  520. a=(((a)>(255))?(255):(((a)<(0))?(0):(a)));
  521. return(uint(((a)<<24)|(((r)&0xFF)<<16)|(((g)&0xFF)<<8)|((b)&0xFF)));
  522. }
  523.  
  524. array<uint16>zombPids={257};
  525.  
  526. void r_SpawnLoc(Critter&player,Critter@npc)
  527. {
  528.  
  529. uint zoneX=Random(39,41);
  530. uint zoneY=Random(39,41);
  531.  
  532. uint wx=zoneX*__GlobalMapZoneLength;
  533. uint wy=zoneY*__GlobalMapZoneLength;
  534. wx+=Random(0,__GlobalMapZoneLength);
  535. wy+=Random(0,__GlobalMapZoneLength);
  536.  
  537. array<uint16>locationIds={189};
  538. uint num=locationIds.length;
  539.  
  540. uint16 locPid=locationIds[Random(0,num-1)];
  541.  
  542. Critter@[]crits={player};
  543. int loc=CreateLocation(locPid,wx,wy,crits);
  544. if(loc==0)
  545. return;
  546. player.SetKnownLoc(true,loc);
  547.  
  548. GameVar@locidv=GetLocalVar((16272),player.Id);
  549. locidv=loc;
  550.  
  551. Location@location=GetLocation(loc);
  552. location.Color=((uint((((120))<<24)|(((255)&0xFF)<<16)|(((128)&0xFF)<<8)|((0)&0xFF))));
  553. location.Update();
  554.  
  555. if(player.Mode[(516)]==(2))
  556. SetTurnBasedAvailability(location);
  557.  
  558. location.AutoGarbage=false;
  559.  
  560. array<Map@>maps;
  561. uint mapcount=location.GetMaps(maps);
  562. for(uint c=0;c<mapcount;c++)
  563. {
  564. maps[c].SetScript(null);
  565. maps[c].SetEvent((6),null);
  566. maps[c].SetEvent((8),null);
  567. }
  568.  
  569. Map@map=GetLocation(loc).GetMapByIndex(0);
  570. SetOwnerId(map,player.Id);
  571.  
  572. bool spawned=false;
  573. while(!spawned)
  574. {
  575.  
  576. array<Entire>entires;
  577. ParseEntires(map,entires,666);
  578.  
  579. Entire@ent=(entires[Random(0,entires.length()-1)]);
  580. uint16 hx=ent.HexX;
  581. uint16 hy=ent.HexY;
  582. map.GetHexCoord(ent.HexX,ent.HexY,hx,hy,Random(0,359),Random(10,30));
  583.  
  584. for(uint i=0,j=Random(1,1);i<j;i++)
  585. {
  586. uint8 dir=Random(0,5);
  587. uint step=Random(1,5);
  588. map.MoveHexByDir(hx,hy,dir,step);
  589. uint16 npcPid=zombPids[Random(0,zombPids.length()-1)];
  590.  
  591. int[]params=
  592. {
  593.  
  594. (107),365,
  595.  
  596. (84),(-2),
  597.  
  598. (104),(23286)
  599. };
  600.  
  601. Critter@zomb=map.AddNpc(npcPid,hx,hy,Random(0,5),params,null,"quest_bos1@critter_init");
  602. if((@zomb!=null))
  603. {
  604. spawned=true;
  605. }
  606. }
  607. }
  608.  
  609. SetQuestGarbager(12*60,player.Id,loc,(16271),(4));
  610. }
  611.  
  612. void r_DeleteLoc(Critter&player,Critter@npc)
  613. {
  614. GameVar@var=GetLocalVar((16272),player.Id);
  615. DeleteLocation(var.GetValue());
  616. }
  617.  
  618. void critter_init(Critter&cr,bool firstTime)
  619. {
  620. cr.StatBase[(84)]=(-2);
  621. cr.SetEvent((2),"_zombDead");
  622. cr.SetEvent((16),"_zombAttacked");
  623. cr.SetEvent((18),"_zombOnMessage");
  624. cr.SetEvent((0),"_zombIdle");
  625. cr.SetEvent((4),"_zombShowCritter");
  626.  
  627. (cr.ModeBase[(534)]=cr.Mode[(534)]|((0x00000004)));
  628. }
  629.  
  630. void _zombIdle(Critter&mob)
  631. {
  632. MobIdle(mob);
  633. }
  634.  
  635. void _zombShowCritter(Critter&mob,Critter&showCrit)
  636. {
  637. if((((showCrit.Mode[(534)]&((0x00000020)))!=0))||showCrit.IsPlayer())
  638. AddAttackPlane(mob,(50),showCrit);
  639. }
  640.  
  641. void _zombDead(Critter&cr,Critter@killer)
  642. {
  643. Map@map=cr.GetMap();
  644. if(MobsDead(map,zombPids))
  645. {
  646. GameVar@var=GetLocalVar((16271),GetOwnerId(map));
  647.  
  648. var=(2);
  649. }
  650. }
  651.  
  652. bool _zombAttacked(Critter&cr,Critter&attacker)
  653. {
  654. return MobAttacked(cr,attacker);
  655. }
  656.  
  657. void _zombOnMessage(Critter&cr,Critter&fromCr,int message,int value)
  658. {
  659. MobOnMessage(cr,fromCr,message,value);
  660. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement