76 Targets.Count:= 0; |
76 Targets.Count:= 0; |
77 f:= 0; |
77 f:= 0; |
78 e:= 0; |
78 e:= 0; |
79 for t:= 0 to Pred(TeamsCount) do |
79 for t:= 0 to Pred(TeamsCount) do |
80 with TeamsArray[t]^ do |
80 with TeamsArray[t]^ do |
81 begin |
81 if not hasGone then |
82 for i:= 0 to cMaxHHIndex do |
|
83 if (Hedgehogs[i].Gear <> nil) |
|
84 and (Hedgehogs[i].Gear <> ThinkingHH) then |
|
85 begin |
82 begin |
86 with Targets.ar[Targets.Count], Hedgehogs[i] do |
83 for i:= 0 to cMaxHHIndex do |
87 begin |
84 if (Hedgehogs[i].Gear <> nil) |
88 Point.X:= hwRound(Gear^.X); |
85 and (Hedgehogs[i].Gear <> ThinkingHH) then |
89 Point.Y:= hwRound(Gear^.Y); |
|
90 if Clan <> CurrentTeam^.Clan then |
|
91 begin |
86 begin |
92 Score:= Gear^.Health; |
87 with Targets.ar[Targets.Count], Hedgehogs[i] do |
93 inc(e) |
88 begin |
94 end else |
89 Point.X:= hwRound(Gear^.X); |
95 begin |
90 Point.Y:= hwRound(Gear^.Y); |
96 Score:= -Gear^.Health; |
91 if Clan <> CurrentTeam^.Clan then |
97 inc(f) |
92 begin |
98 end |
93 Score:= Gear^.Health; |
99 end; |
94 inc(e) |
100 inc(Targets.Count) |
95 end else |
|
96 begin |
|
97 Score:= -Gear^.Health; |
|
98 inc(f) |
|
99 end |
|
100 end; |
|
101 inc(Targets.Count) |
|
102 end; |
101 end; |
103 end; |
102 end; |
|
103 |
104 |
104 if e > f then friendlyfactor:= 300 + (e - f) * 30 |
105 if e > f then friendlyfactor:= 300 + (e - f) * 30 |
105 else friendlyfactor:= max(30, 300 - f * 80 div e) |
106 else friendlyfactor:= max(30, 300 - f * 80 div e) |
106 end; |
107 end; |
107 |
108 |
122 begin |
123 begin |
123 bonuses.Count:= 0; |
124 bonuses.Count:= 0; |
124 MyClan:= PHedgehog(ThinkingHH^.Hedgehog)^.Team^.Clan; |
125 MyClan:= PHedgehog(ThinkingHH^.Hedgehog)^.Team^.Clan; |
125 Gear:= GearsList; |
126 Gear:= GearsList; |
126 while Gear <> nil do |
127 while Gear <> nil do |
127 begin |
128 begin |
128 case Gear^.Kind of |
129 case Gear^.Kind of |
129 gtCase: AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 33, 25); |
130 gtCase: AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 33, 25); |
130 gtMine: if (Gear^.State and gstAttacking) = 0 then AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -50) |
131 gtMine: if (Gear^.State and gstAttacking) = 0 then |
131 else AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, -50); // mine is on |
132 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -50) |
132 gtDynamite: AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -75); |
133 else |
133 gtHedgehog: begin |
134 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, -50); // mine is on |
134 if Gear^.Damage >= Gear^.Health then AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 60, -25) else |
135 gtDynamite: AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -75); |
135 if isAfterAttack and (ThinkingHH^.Hedgehog <> Gear^.Hedgehog) then |
136 gtHedgehog: begin |
136 if (MyClan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan) then AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -3) // hedgehog-friend |
137 if Gear^.Damage >= Gear^.Health then |
137 else AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, 3) |
138 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 60, -25) |
138 end; |
139 else |
139 end; |
140 if isAfterAttack and (ThinkingHH^.Hedgehog <> Gear^.Hedgehog) then |
140 Gear:= Gear^.NextGear |
141 if (MyClan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan) then |
141 end; |
142 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -3) // hedgehog-friend |
|
143 else |
|
144 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, 3) |
|
145 end; |
|
146 end; |
|
147 Gear:= Gear^.NextGear |
|
148 end; |
142 if isAfterAttack and (KnownExplosion.Radius > 0) then |
149 if isAfterAttack and (KnownExplosion.Radius > 0) then |
143 with KnownExplosion do |
150 with KnownExplosion do |
144 AddBonus(X, Y, Radius + 10, -Radius); |
151 AddBonus(X, Y, Radius + 10, -Radius); |
145 end; |
152 end; |
146 |
153 |
155 var i, r: LongInt; |
162 var i, r: LongInt; |
156 Result: LongInt; |
163 Result: LongInt; |
157 begin |
164 begin |
158 Result:= 0; |
165 Result:= 0; |
159 for i:= 0 to Pred(bonuses.Count) do |
166 for i:= 0 to Pred(bonuses.Count) do |
160 with bonuses.ar[i] do |
167 with bonuses.ar[i] do |
161 begin |
168 begin |
162 r:= hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y))); |
169 r:= hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y))); |
163 if r < Radius then |
170 if r < Radius then |
164 inc(Result, Score * (Radius - r)) |
171 inc(Result, Score * (Radius - r)) |
165 end; |
172 end; |
166 RatePlace:= Result |
173 RatePlace:= Result |
167 end; |
174 end; |
168 |
175 |
169 function TestColl(x, y, r: LongInt): boolean; |
176 function TestColl(x, y, r: LongInt): boolean; |
170 var b: boolean; |
177 var b: boolean; |
171 begin |
178 begin |