root/dev/common/includes/class.kill.php @ 376

Revision 376, 32.7 KB (checked in by kovell, 11 years ago)

MyISAM can be selected again on install
duplicate item descriptions removed from install
alliance/corp/pilot optional installs now have external id and correct structure
alliance/corp/pilot/kill details can be selected by external id
corp/alliance/kill now have get and set methods for external ids
killlist has method to select only kills with an external id set
monthly views mod now shows clock and combined kills if selected
optimisations and fixes to killlists and toplists

Line 
1<?php
2require_once('common/includes/class.item.php');
3require_once('common/includes/class.corp.php');
4require_once('common/includes/class.alliance.php');
5require_once('common/includes/class.ship.php');
6require_once('common/includes/class.system.php');
7require_once('common/includes/class.pilot.php');
8require_once('common/includes/class.killlist.php');
9require_once('common/includes/class.itemlist.php');
10
11class Kill
12{
13        function Kill($id = 0, $external = false)
14        {
15                if($id && $external)
16                {
17                        $qry = new DBQuery();
18                        $qry->execute("SELECT kll_id FROM kb3_kills WHERE kll_external_id = ".$id);
19                        if($qry->recordCount())
20                        {
21                                $result = $qry->getRow();
22                                $this->id_ = $result['kll_id'];
23                                $this->externalid_ = $id;
24                        }
25                        else
26                        {
27                                $this->id_ = 0;
28                                $this->external_id = 0;
29                        }
30                }
31                else
32                {
33                        $this->id_ = $id;
34                        $this->externalid_ = 0;
35                }
36                $this->involvedparties_ = array();
37                $this->destroyeditems_ = array();
38                $this->droppeditems_ = array();
39        }
40
41        function set($var, $value)
42        {
43                $this->$var = $value;
44        }
45
46        function getID()
47        {
48                return $this->id_;
49        }
50
51        function getExternalID()
52        {
53                if($this->externalid_) return $this->externalid_;
54                $this->execQuery();
55                return $this->externalid_;
56        }
57
58        function getTimeStamp()
59        {
60                $this->execQuery();
61                return $this->timestamp_;
62        }
63
64        function getVictimName()
65        {
66                $this->execQuery();
67                return $this->victimname_;
68        }
69
70        function getVictimID()
71        {
72                $this->execQuery();
73                return $this->victimid_;
74        }
75
76        function getVictimPortrait($size = 32)
77        {
78                $this->execQuery();
79                $plt = new Pilot($this->victimid_);
80                return $plt->getPortraitURL($size);
81        }
82
83        function getVictimCorpID()
84        {
85                $this->execQuery();
86                return $this->victimcorpid_;
87        }
88
89        function getVictimCorpName()
90        {
91                $this->execQuery();
92                return $this->victimcorpname_;
93        }
94
95        function getVictimAllianceName()
96        {
97                $this->execQuery();
98                return $this->victimalliancename_;
99        }
100
101        function getVictimAllianceID()
102        {
103                $this->execQuery();
104                return $this->victimallianceid_;
105        }
106
107        function getVictimShip()
108        {
109                $this->execQuery();
110                return $this->victimship_;
111        }
112
113        function getSystem()
114        {
115                $this->execQuery();
116                return $this->solarsystem_;
117        }
118
119        function getFBPilotID()
120        {
121                $this->execQuery();
122                if (!$this->fbpilotid_) return "null";
123                else return $this->fbpilotid_;
124        }
125
126        function getFBPilotName()
127        {
128                $this->execQuery();
129                return $this->fbpilotname_;
130        }
131
132        function getFBCorpID()
133        {
134                $this->execQuery();
135                if (!$this->fbcorpid_) return "null";
136                else return $this->fbcorpid_;
137        }
138
139        function getFBCorpName()
140        {
141                $this->execQuery();
142                return $this->fbcorpname_;
143        }
144
145        function getFBAllianceID()
146        {
147                $this->execQuery();
148                if (!$this->fballianceid_) return "null";
149                else return $this->fballianceid_;
150        }
151
152        function getFBAllianceName()
153        {
154                $this->execQuery();
155                return $this->fballiancename_;
156        }
157
158        function getISKLoss()
159        {
160                $this->execQuery();
161                return $this->iskloss_;
162        }
163        function getKillPoints()
164        {
165                $this->execQuery();
166                return $this->killpoints_;
167        }
168
169        function getSolarSystemName()
170        {
171                return $this->solarsystemname_;
172        }
173
174        function getSolarSystemSecurity()
175        {
176                return $this->solarsystemsecurity_;
177        }
178
179        function getVictimShipName()
180        {
181                return $this->victimshipname_;
182        }
183
184        function getVictimShipExternalID()
185        {
186                return $this->victimshipexternalid_;
187        }
188
189        function getVictimShipClassName()
190        {
191                return $this->victimshipclassname_;
192        }
193
194        function getVictimShipValue()
195        {
196                return $this->victimshipvalue_;
197        }
198
199        function getVictimShipImage($size)
200        {
201                return IMG_URL."/ships/".$size."_".$size."/".$this->victimshipexternalid_.".png";
202        }
203
204        function getVictimShipValueIndicator()
205        {
206        // value is now raw
207                $value = $this->getVictimShipValue()/1000000;
208
209                if ($value >= 0 && $value <= 1)
210                        $color = 'gray';
211                elseif ($value > 1 && $value <= 15)
212                        $color = 'blue';
213                elseif ($value > 15 && $value <= 25)
214                        $color = 'green';
215                elseif ($value > 25 && $value <= 40)
216                        $color = 'yellow';
217                elseif ($value > 40 && $value <= 80)
218                        $color = 'red';
219                elseif ($value > 80 && $value <= 250)
220                        $color = 'orange';
221                elseif ($value > 250)
222                        $color = 'purple';
223
224                return IMG_URL.'/ships/ship-'.$color.'.gif';
225        }
226
227        function getRawMail()
228        {
229                if (config::get('km_cache_enabled') && file_exists(config::get('km_cache_dir')."/".$this->getID().".txt"))
230                {
231                        return file_get_contents(config::get('km_cache_dir')."/".$this->getID().".txt");
232                }
233
234                $this->execQuery();
235                if ($this->isClassified())
236                {
237                        return 'Killmail not yet available, try again in '.round($this->getClassifiedTime()/3600, 2).' hrs.';
238                }
239
240                $ship = $this->getVictimShip();
241                $shipclass = $ship->getClass();
242
243                $mail .= substr(str_replace('-', '.' , $this->getTimeStamp()), 0, 16)."\r\n\r\n";
244                if ( $shipclass->getID() == 35 ) // Starbase (so this is a POS mail)
245                {
246                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
247                        $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
248                        $mail .= "Faction: NONE\r\n";
249                        //$ship = $this->getVictimShip();
250                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
251                        $mail .= "Moon: ".$this->getVictimName()."\r\n";
252                        $system = $this->getSystem();
253                        $mail .= "System: ".$system->getName()."\r\n";
254                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
255                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
256                        $mail .= "Involved parties:\r\n\r\n";
257                }
258                else
259                {
260                        $mail .= "Victim: ".$this->getVictimName()."\r\n";
261                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
262                        $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
263                        $mail .= "Faction: NONE\r\n";
264                        //$ship = $this->getVictimShip();
265                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
266                        $system = $this->getSystem();
267                        $mail .= "System: ".$system->getName()."\r\n";
268                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
269                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
270                        $mail .= "Involved parties:\r\n\r\n";
271                }
272
273                foreach ($this->involvedparties_ as $inv)
274                {
275                        $pilot = new Pilot($inv->getPilotID());
276                        $corp = new Corporation($inv->getCorpID());
277                        $alliance = new Alliance($inv->getAllianceID());
278
279                        $weapon = $inv->getWeapon();
280                        $ship = $inv->getShip();
281                        if ($pilot->getName() == $weapon->getName())
282                        {
283                                $name = $pilot->getName()." / ".$corp->getName();
284                        }
285                        else
286                        {
287                                $name = $pilot->getName();
288                        }
289
290                        $mail .= "Name: ".$name;
291                        if ($pilot->getID() == $this->getFBPilotID())
292                        {
293                                $mail .= " (laid the final blow)";
294                        }
295                        $mail .= "\r\n";
296
297                        if ($pilot->getName() != $weapon->getName())
298                        {
299                                $mail .= "Security: ".$inv->getSecStatus()."\r\n";
300                                $mail .= "Corp: ".$corp->getName()."\r\n";
301                                $mail .= "Alliance: ".$alliance->getName()."\r\n";
302                                $mail .= "Faction: NONE\r\n";
303                                $mail .= "Ship: ".$ship->getName()."\r\n";
304                                $mail .= "Weapon: ".$weapon->getName()."\r\n";
305                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
306                        }
307                        else
308                        {
309                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
310                        }
311                        $mail .= "\r\n";
312                }
313
314                if (count($this->destroyeditems_) > 0)
315                {
316                        $mail .= "\r\nDestroyed items:\r\n\r\n";
317
318                        foreach($this->destroyeditems_ as $destroyed)
319                        {
320                                $item = $destroyed->getItem();
321                                $mail .= $item->getName();
322                                if ($destroyed->getQuantity() > 1)
323                                {
324                                // if the option is enabled and the item is fitted then split it up
325                                // this is aworkaround for the lazy parser of griefwatch
326                                        if (config::get('kill_splitfit') && $destroyed->getQuantity() < 9 && ($destroyed->getLocationID() == 1
327                                                || $destroyed->getLocationID() == 2 || $destroyed->getLocationID() == 3))
328                                        {
329                                                for ($i = $destroyed->getQuantity(); $i > 1; $i--)
330                                                {
331                                                        $mail .= "\r\n".$item->getName();
332                                                }
333
334                                        }
335                                        else
336                                        {
337                                                $mail .= ", Qty: ".$destroyed->getQuantity();
338                                        }
339                                }
340                                if ($destroyed->getLocationID() == 4) // cargo
341                                        $mail .= " (Cargo)";
342                                if ($destroyed->getLocationID() == 6) // drone
343                                        $mail .= " (Drone Bay)";
344                                $mail .= "\r\n";
345                        }
346                }
347
348                if (count($this->droppeditems_) > 0)
349                {
350                        $mail .= "\r\nDropped items:\r\n\r\n";
351
352                        foreach($this->droppeditems_ as $dropped)
353                        {
354                                $item = $dropped->getItem();
355                                $mail .= $item->getName();
356                                if ($dropped->getQuantity() > 1)
357                                {
358                                // if the option is enabled and the item is fitted then split it up
359                                // this is aworkaround for the lazy parser of griefwatch
360                                        if (config::get('kill_splitfit') && $dropped->getQuantity() < 9 && ($dropped->getLocationID() == 1
361                                                || $dropped->getLocationID() == 2 || $dropped->getLocationID() == 3))
362                                        {
363                                                for ($i = $dropped->getQuantity(); $i > 1; $i--)
364                                                {
365                                                        $mail .= "\r\n".$item->getName();
366                                                }
367
368                                        }
369                                        else
370                                        {
371                                                $mail .= ", Qty: ".$dropped->getQuantity();
372                                        }
373                                }
374                                if ($dropped->getLocationID() == 4) // cargo
375                                        $mail .= " (Cargo)";
376                                if ($dropped->getLocationID() == 6) // drone
377                                        $mail .= " (Drone Bay)";
378                                $mail .= "\r\n";
379                        }
380                }
381
382                if (config::get('km_cache_enabled')) file_put_contents(config::get('km_cache_dir')."/".$this->getID().".txt", $mail);
383
384                return $mail;
385        }
386
387        function getDupe($checkonly = false)
388        {
389                if (!$checkonly)
390                {
391                        $this->execQuery();
392                }
393                $dupe = 0;
394                $qry = new DBQuery(true);
395                if (!$this->getFBPilotID() || !$this->victimid_)
396                        return 0;
397                $qry->execute("select kll_id
398                    from kb3_kills
399                    where kll_timestamp ='".$this->timestamp_."'
400                    and kll_victim_id = ".$this->victimid_."
401                    and kll_ship_id = ".$this->victimship_->getID()."
402                    and kll_system_id = ".$this->solarsystem_->getID()."
403                    and kll_fb_plt_id = ".$this->getFBPilotID()."
404                    and kll_id != ".$this->id_);
405
406                $row = $qry->getRow();
407                if ($row)
408                        return $row['kll_id'];
409                else
410                        return 0;
411        }
412
413        function execQuery()
414        {
415                if (!$this->timestamp_)
416                {
417                        $qry = new DBQuery();
418
419                        $this->qry_ = new DBQuery();
420                        $this->sql_ = "select kll.kll_id, kll.kll_timestamp, plt.plt_name,
421                          crp.crp_name, ali.all_name, ali.all_id, kll.kll_ship_id,
422                          kll.kll_system_id, kll.kll_ship_id, kll.kll_external_id,
423                          kll.kll_victim_id, plt.plt_externalid, kll.kll_isk_loss,
424                          kll.kll_crp_id, kll.kll_points, kll.kll_isk_loss,
425                          fbplt.plt_id as fbplt_id,
426                          fbplt.plt_externalid as fbplt_externalid,
427                          fbcrp.crp_id as fbcrp_id,
428                          fbali.all_id as fbali_id,
429                          fbplt.plt_name as fbplt_name,
430                          fbcrp.crp_name as fbcrp_name,
431                          fbali.all_name as fbali_name,
432                          kll_dmgtaken
433                     from kb3_kills kll, kb3_pilots plt, kb3_corps crp,
434                          kb3_alliances ali, kb3_alliances fbali, kb3_corps fbcrp,
435                          kb3_pilots fbplt, kb3_inv_detail fb
436                    where kll.kll_id = '".$this->id_."'
437                      and plt.plt_id = kll.kll_victim_id
438                      and crp.crp_id = kll.kll_crp_id
439                      and ali.all_id = kll.kll_all_id
440                                          and fb.ind_kll_id = kll.kll_id
441                                          and fb.ind_plt_id = kll.kll_fb_plt_id
442                      and fbali.all_id = fb.ind_all_id
443                      and fbcrp.crp_id = fb.ind_crp_id
444                      and fbplt.plt_id = kll.kll_fb_plt_id";
445
446                        $this->qry_->execute($this->sql_);
447                        $row = $this->qry_->getRow();
448                        if (!$row)
449                        {
450                                $this->valid_ = false;
451                                return false;
452                        }
453                        else
454                        {
455                                $this->valid_ = true;
456                        }
457
458                        $this->setTimeStamp($row['kll_timestamp']);
459                        $this->setSolarSystem(new SolarSystem($row['kll_system_id']));
460                        $this->setVictimID($row['kll_victim_id']);
461                        $this->setVictimName($row['plt_name']);
462                        $this->setVictimCorpID($row['kll_crp_id']);
463                        $this->setVictimCorpName($row['crp_name']);
464                        $this->setVictimAllianceID($row['all_id']);
465                        $this->setVictimAllianceName($row['all_name']);
466                        $this->setVictimShip(new Ship($row['kll_ship_id']));
467                        $this->setFBPilotID($row['fbplt_id']);
468                        $this->setFBPilotName($row['fbplt_name']);
469                        $this->setFBCorpID($row['fbcrp_id']);
470                        $this->setFBCorpName($row['fbcrp_name']);
471                        $this->setFBAllianceID($row['fbali_id']);
472                        $this->setFBAllianceName($row['fbali_name']);
473                        $this->setKillPoints($row['kll_points']);
474                        $this->setExternalID($row['kll_external_id']);
475                        $this->setISKLoss($row['kll_isk_loss']);
476                        $this->plt_ext_ = $row['plt_externalid'];
477                        $this->fbplt_ext_ = $row['fbplt_externalid'];
478                        $this->VictimDamageTaken = $row['kll_dmgtaken'];
479
480                        // involved
481                        $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
482                ind_shp_id, ind_wep_id, ind_dmgdone
483                from kb3_inv_detail
484                where ind_kll_id = ".$this->getID()."
485                order by ind_order";
486
487                        $qry->execute($sql) or die($qry->getErrorMsg());
488                        while ($row = $qry->getRow())
489                        {
490                                $involved = new InvolvedParty($row['ind_plt_id'],
491                                        $row['ind_crp_id'],
492                                        $row['ind_all_id'],
493                                        $row['ind_sec_status'],
494                                        new Ship($row['ind_shp_id']),
495                                        new Item($row['ind_wep_id']));
496                                $involved->dmgdone_ = $row['ind_dmgdone'];
497                                array_push($this->involvedparties_, $involved);
498                        }
499                        $destroyedlist = new ItemList(null, true);
500                        $destroyedlist->addKillDestroyed($this->id_);
501                        while($item = $destroyedlist->getItem())
502                        {
503                                $destroyed = new DestroyedItem($item,
504                                        $item->row_['itd_quantity'],
505                                        $item->row_['itl_location'],
506                                        $item->row_['itd_itl_id']);
507                                array_push($this->destroyeditems_, $destroyed);
508                        }
509                        $droppedlist = new ItemList(null, true);
510                        $droppedlist->addKillDropped($this->id_);
511                        while($item = $droppedlist->getItem())
512                        {
513                                $dropped = new DroppedItem($item,
514                                        $item->row_['itd_quantity'],
515                                        $item->row_['itl_location'],
516                                        $item->row_['itd_itl_id']);
517                                array_push($this->droppeditems_, $dropped);
518                        }
519                }
520        }
521
522        function isClassified()
523        {
524                if (config::get('kill_classified'))
525                {
526                        if (user::role('classified_see'))
527                        {
528                                return false;
529                        }
530
531                        $offset = config::get('kill_classified')*3600;
532                        if (config::get('date_gmtime'))
533                        {
534                                $time = time()-date('Z');
535                        }
536                        else
537                        {
538                                $time = time();
539                        }
540                        if (strtotime($this->timestamp_) > $time-$offset)
541                        {
542                                return true;
543                        }
544                }
545                return false;
546        }
547
548        function getClassifiedTime()
549        {
550                if (config::get('kill_classified'))
551                {
552                        $offset = config::get('kill_classified')*3600;
553                        if (config::get('date_gmtime'))
554                        {
555                                $time = time()-date('Z');
556                        }
557                        else
558                        {
559                                $time = time();
560                        }
561                        if (strtotime($this->timestamp_) > $time-$offset)
562                        {
563                                return ($offset-$time+strtotime($this->timestamp_));
564                        }
565                }
566                return 0;
567        }
568
569        function getInvolvedPartyCount()
570        {
571                if(isset($this->involvedcount_)) return $this->involvedcount_;
572                $qry = new DBQuery();
573                $qry->execute("select count(ind_kll_id) inv from kb3_inv_detail where ind_kll_id = ". $this->id_);
574                $result = $qry->getRow();
575                $this->involvedcount_ = $result['inv'];
576                return $result['inv'];
577        }
578
579        // Set the number of involved parties - used by killlist
580        function setInvolvedPartyCount($invcount = 0)
581        {
582                $this->involvedcount_ = $invcount;
583        }
584
585        function exists()
586        {
587                $this->execQuery();
588                return $this->valid_;
589        }
590
591        //Count all kills by board owner related to this kill
592        function relatedKillCount()
593        {
594                if($this->relatedkillcount_) return $this->relatedkillcount_;
595                $sql="SELECT COUNT(kll.kll_id) AS kills FROM kb3_kills kll WHERE ";
596                $sql.="kll.kll_timestamp <= '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60))."'
597                                                   AND kll.kll_timestamp >=
598                                                           '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'
599                                                   AND kll.kll_system_id = ".$this->solarsystem_->getID();
600                if(ALLIANCE_ID <>0)
601                {
602                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
603                                " WHERE ( ind.ind_all_id = ".ALLIANCE_ID." AND kll.kll_id = ind.ind_kll_id".
604                                " AND ind.ind_all_id != kll.kll_all_id ) LIMIT 1)";
605                }
606                else if(CORP_ID <>0)
607                {
608                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
609                                " WHERE ( ind_crp_id = ".CORP_ID."  AND kll.kll_id = ind_kll_id".
610                                " AND ind_crp_id != kll.kll_crp_id ) LIMIT 1) ";
611                }
612                else if(PILOT_ID <>0)
613                {
614                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
615                                " WHERE ( ind_plt_id = ".PILOT_ID."  AND kll.kll_id = ind_kll_id".
616                                " AND ind_plt_id != kll.kll_victim_id ) LIMIT 1) ";
617                }
618                $sql .= "-- related kill count";
619                $qry = new DBQuery();
620                if(!$qry->execute($sql)) return 0;
621                $res=$qry->getRow();
622                $this->relatedkillcount_ = $res['kills'];
623                return $this->relatedkillcount_;
624        }
625
626        //Count all losses by board owner related to this kill
627        function relatedLossCount()
628        {
629                if($this->relatedlosscount_) return $this->relatedlosscount_;
630                $sql="SELECT count(kll.kll_id) as losses FROM kb3_kills kll ";
631                $sql.="WHERE kll.kll_system_id = ".$this->solarsystem_->getID().
632                        " AND kll.kll_timestamp <= '".
633                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60)).
634                        "' AND kll.kll_timestamp >= '".
635                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'";
636                if(ALLIANCE_ID <>0)
637                {
638                        $sql .="AND kll.kll_all_id = ".ALLIANCE_ID.
639                                " AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
640                                " WHERE ( kll.kll_id = ind.ind_kll_id".
641                                " AND ind.ind_all_id != ".ALLIANCE_ID." ) ) ";
642                }
643                else if(CORP_ID <>0)
644                {
645                        $sql .="AND kll_crp_id = ".CORP_ID."  AND".
646                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
647                                " WHERE ( kll.kll_id = ind_kll_id".
648                                " AND ind_crp_id != ".CORP_ID." ) ) ";
649                }
650                else if(PILOT_ID <>0)
651                {
652                        $sql .="AND kll_victim_id = ".PILOT_ID." AND".
653                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
654                                " WHERE ( kll.kll_id = ind_kll_id".
655                                " AND ind_plt_id != ".PILOT_ID." ) ) ";
656                }
657                $sql .= "-- related loss count";
658                $qry = new DBQuery();
659                if(!$qry->execute($sql)) return 0;
660                $res=$qry->getRow();
661                $this->relatedlosscount_ = $res['losses'];
662                return $this->relatedlosscount_;
663        }
664
665        function countComment($kll_id)
666        {
667                if(isset($this->commentcount_)) return $this->commentcount_;
668                $qry = new DBQuery();
669                $sql = "SELECT count(id) as comments FROM kb3_comments WHERE kll_id = '$kll_id'";
670                // return 0 if query fails. May be incorrect but is harmless here
671                if(!$qry->execute($sql)) return 0;
672                $result = $qry->getRow();
673                $this->commentcount_ = $result['comments'];
674                return $result['comments'];
675        }
676
677        // Set the number of comments - used by killlist
678        function setCommentCount($comcount = 0)
679        {
680                $this->commentcount_ = $comcount;
681        }
682
683        function setID($id)
684        {
685                $this->id_ = $id;
686        }
687
688        function setTimeStamp($timestamp)
689        {
690                $this->timestamp_ = $timestamp;
691        }
692
693        function setSolarSystem($solarsystem)
694        {
695                $this->solarsystem_ = $solarsystem;
696        }
697
698        function setSolarSystemName($solarsystemname)
699        {
700                $this->solarsystemname_ = $solarsystemname;
701        }
702
703        function setSolarSystemSecurity($solarsystemsecurity)
704        {
705                $this->solarsystemsecurity_ = $solarsystemsecurity;
706        }
707
708        function setExternalID($externalid)
709        {
710                if($externalid) $this->externalid_ = $externalid;
711                else $this->externalid_ = 0;
712        }
713       
714        function setVictim($victim)
715        {
716                $this->victim_ = $victim;
717        }
718
719        function setVictimID($victimid)
720        {
721                $this->victimid_ = $victimid;
722        }
723
724        function setVictimName($victimname)
725        {
726                $this->victimname_ = $victimname;
727        }
728
729        function setVictimCorpID($victimcorpid)
730        {
731                $this->victimcorpid_ = $victimcorpid;
732        }
733
734        function setVictimCorpName($victimcorpname)
735        {
736                $this->victimcorpname_ = $victimcorpname;
737        }
738
739        function setVictimAllianceID($victimallianceid)
740        {
741                $this->victimallianceid_ = $victimallianceid;
742        }
743
744        function setVictimAllianceName($victimalliancename)
745        {
746                $this->victimalliancename_ = $victimalliancename;
747        }
748
749        function setVictimShip($victimship)
750        {
751                $this->victimship_ = $victimship;
752        }
753
754        function setVictimShipName($victimshipname)
755        {
756                $this->victimshipname_ = $victimshipname;
757        }
758
759        function setVictimShipExternalID($victimshipexternalid)
760        {
761                $this->victimshipexternalid_ = $victimshipexternalid;
762        }
763
764        function setVictimShipClassName($victimshipclassname)
765        {
766                $this->victimshipclassname_ = $victimshipclassname;
767        }
768
769        function setVictimShipValue($victimshipvalue)
770        {
771                $this->victimshipvalue_ = $victimshipvalue;
772        }
773
774        function setFBPilotID($fbpilotid)
775        {
776                $this->fbpilotid_ = $fbpilotid;
777        }
778
779        function setFBPilotName($fbpilotname)
780        {
781                $npc = strpos($fbpilotname, "#");
782                if ($npc === false)
783                {
784                        $this->fbpilotname_ = $fbpilotname;
785                }
786                else
787                {
788                        $name = explode("#", $fbpilotname);
789                        $plt = new Item($name[2]);
790                        $this->fbpilotname_ = $plt->getName();
791                }
792        }
793
794        function setFBCorpID($fbcorpid)
795        {
796                $this->fbcorpid_ = $fbcorpid;
797        }
798
799        function setFBCorpName($fbcorpname)
800        {
801                $this->fbcorpname_ = $fbcorpname;
802        }
803
804        function setFBAllianceID($fballianceid)
805        {
806                $this->fballianceid_ = $fballianceid;
807        }
808
809        function setFBAllianceName($fballiancename)
810        {
811                $this->fballiancename_ = $fballiancename;
812        }
813        function setKillPoints($killpoints)
814        {
815                $this->killpoints_ = $killpoints;
816        }
817
818        function setISKLoss($isk)
819        {
820                $this->iskloss_ = $isk;
821        }
822
823        function calculateISKLoss()
824        {
825                $value = 0;
826                foreach($this->destroyeditems_ as $itd)
827                {
828                        $value += $itd->getValue() * $itd->getQuantity();
829                }
830                $value += $this->getVictimShip()->getPrice();
831                $this->iskloss_ = $value;
832                return $value;
833        }
834
835        function calculateKillPoints()
836        {
837                $ship = $this->getVictimShip();
838                $shipclass = $ship->getClass();
839                $vicpoints = $shipclass->getPoints();
840                $maxpoints = round($vicpoints * 1.2);
841
842                foreach ($this->involvedparties_ as $inv)
843                {
844                        $shipinv = $inv->getShip();
845                        $shipclassinv = $shipinv->getClass();
846                        $invpoints += $shipclassinv->getPoints();
847                }
848
849                $gankfactor = $vicpoints / ($vicpoints + $invpoints);
850                $points = ceil($vicpoints * ($gankfactor / 0.75));
851
852                if ($points > $maxpoints) $points = $maxpoints;
853
854                $points = round($points, 0);
855                return $points;
856        }
857
858        function add($id = null)
859        {
860                if (!$this->solarsystem_->getID())
861                {
862                        echo 'INTERNAL ERROR; SOLARSYSTEM NOT FOUND; PLEASE CONTACT A DEV WITH THIS MESSAGE<br/>';
863                        var_dump($this->solarsystem_);
864                        var_dump($this->solarsystemname_);
865                        return 0;
866                }
867
868                $dupe = $this->getDupe(true);
869                if ($dupe == 0)
870                {
871                        $this->realadd();
872                }
873                elseif (config::get('readd_dupes'))
874                {
875                        $this->dupeid_ = $dupe;
876                        $this->id_ = $dupe;
877                        $this->remove(false);
878                        $this->realadd($dupe);
879                        $this->id_ = -1;
880                }
881                else
882                {
883                        $this->dupeid_ = $dupe;
884                        $this->id_ = -1;
885                }
886                return $this->id_;
887        }
888
889        function realadd($id = null)
890        {
891                if ( $this->timestamp_ == "" || !$this->victimid_ || !$this->victimship_->getID() || !$this->solarsystem_->getID() ||
892                !$this->victimallianceid_ || !$this->victimcorpid_ || !$this->getFBAllianceID() || !$this->getFBCorpID() ||
893                !$this->getFBPilotID() ) return 0;
894                if ($id == null)
895                {
896                        $qid = 'null';
897                }
898                else
899                {
900                        $qid = $id;
901                }
902                if (!$this->dmgtaken)
903                {
904                        $this->dmgtaken = 0;
905                }
906
907                $qry = new DBQuery();
908                $sql = "INSERT INTO kb3_kills
909            (kll_id , kll_timestamp , kll_victim_id , kll_all_id , kll_crp_id , kll_ship_id , kll_system_id , kll_fb_plt_id , kll_points , kll_dmgtaken, kll_external_id, kll_isk_loss)
910            VALUES (".$qid.",
911                    date_format('".$this->timestamp_."', '%Y.%m.%d %H:%i:%s'),
912            ".$this->victimid_.",
913            ".$this->victimallianceid_.",
914            ".$this->victimcorpid_.",
915            ".$this->victimship_->getID().",
916            ".$this->solarsystem_->getID().",
917            ".$this->getFBPilotID().",
918            ".$this->calculateKillPoints().",
919            ".$this->dmgtaken.", ";
920                if($this->externalid_) $sql .= $this->externalid_.", ";
921                else $sql .= "NULL, ";
922        $sql .= $this->calculateISKLoss()." )";
923                $qry->autocommit(false);
924                if(!$qry->execute($sql))
925                {
926                        $qry->rollback();
927                        $qry->autocommit(true);
928                        //If the query is causing errors here there's no point going on
929                        return false;
930                }
931
932                if ($id)
933                {
934                        $this->id_ = $id;
935                }
936                else
937                {
938                        $this->id_ = $qry->getInsertID();
939                }
940                if(!$this->id_)
941                {
942                        $qry->rollback();
943                        $qry->autocommit(true);
944                        return false;
945                }
946                // involved
947                $order = 0;
948                $invall = array();
949                $invcrp = array();
950                $invplt = array();
951                $involveddsql = 'insert into kb3_inv_detail
952                    (ind_kll_id, ind_plt_id, ind_sec_status, ind_all_id, ind_crp_id, ind_shp_id, ind_wep_id, ind_order, ind_dmgdone )
953                    values ';
954                $notfirstd = false;
955                foreach ($this->involvedparties_ as $inv)
956                {
957                        $ship = $inv->getShip();
958                        $weapon = $inv->getWeapon();
959                        if (!$inv->getPilotID() || $inv->getSecStatus() == "" || !$inv->getAllianceID() || !$inv->getCorpID() || !$ship->getID() || !$weapon->getID())
960                        {
961                                $this->remove();
962                                return 0;
963                        }
964
965                        if (!$inv->dmgdone_)
966                        {
967                                $inv->dmgdone_ = 0;
968                        }
969                        if($notfirstd) $involveddsql .= ", ";
970                        $involveddsql .= "( ".$this->getID().", ".$inv->getPilotID().", '".$inv->getSecStatus()."', "
971                                .$inv->getAllianceID().", ".$inv->getCorpID().", ".$ship->getID().", "
972                                .$weapon->getID().", ".$order++.", ".$inv->dmgdone_.")";
973                        $notfirstd = true;
974
975                }
976                if($notfirstd && !$qry->execute($involveddsql))
977                {
978                        $qry->rollback();
979                        $qry->autocommit(true);
980                        return false;
981                }
982
983                // destroyed
984                $notfirstitd=false;
985                $itdsql = "insert into kb3_items_destroyed (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
986                foreach ($this->destroyeditems_ as $dest)
987                {
988                        $item = $dest->getItem();
989                        $loc_id = $dest->getLocationID();
990                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
991                        {
992                                trigger_error('error with destroyed item.', E_USER_WARNING);
993                                var_dump($dest);exit;
994                                continue;
995                        }
996
997                        if($notfirstitd) $itdsql .= ", ";
998                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
999                        $notfirstitd = true;
1000                }
1001                if($notfirstitd &&!$qry->execute($itdsql))
1002                {
1003                        $qry->rollback();
1004                        $qry->autocommit(true);
1005                        return false;
1006                }
1007
1008                // dropped
1009                $notfirstitd=false;
1010                $itdsql = "insert into kb3_items_dropped (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
1011                foreach ($this->droppeditems_ as $dest)
1012                {
1013                        $item = $dest->getItem();
1014                        $loc_id = $dest->getLocationID();
1015                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
1016                        {
1017                                trigger_error('error with dropped item.', E_USER_WARNING);
1018                                var_dump($dest);exit;
1019                                continue;
1020                        }
1021
1022                        if($notfirstitd) $itdsql .= ", ";
1023                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
1024                        $notfirstitd = true;
1025                }
1026                if($notfirstitd &&!$qry->execute($itdsql))
1027                {
1028                        $qry->rollback();
1029                        $qry->autocommit(true);
1030                        return false;
1031                }
1032                $qry->autocommit(true);
1033                // call the event that we added this mail
1034                event::call('killmail_added', $this);
1035                return $this->id_;
1036        }
1037
1038        function remove($delcomments = true)
1039        {
1040                if (!$this->id_)
1041                        return;
1042
1043                event::call('killmail_delete', $this);
1044
1045                $qry = new DBQuery();
1046                $qry->execute("delete from kb3_kills where kll_id = ".$this->id_);
1047                $qry->execute("delete from kb3_inv_detail where ind_kll_id = ".$this->id_);
1048//              $qry->execute("delete from kb3_inv_all where ina_kll_id = ".$this->id_);
1049//              $qry->execute("delete from kb3_inv_crp where inc_kll_id = ".$this->id_);
1050//              $qry->execute("delete from kb3_inv_plt where inp_kll_id = ".$this->id_);
1051                $qry->execute("delete from kb3_items_destroyed where itd_kll_id = ".$this->id_);
1052                $qry->execute("delete from kb3_items_dropped where itd_kll_id = ".$this->id_);
1053                // Don't remove comments when readding a kill
1054                if ($delcomments)
1055                {
1056                        $qry->execute("delete from kb3_comments where kll_id = ".$this->id_);
1057                }
1058        }
1059
1060        function addInvolvedParty($involved)
1061        {
1062                array_push($this->involvedparties_, $involved);
1063        }
1064
1065        function addDestroyedItem($destroyed)
1066        {
1067                array_push($this->destroyeditems_, $destroyed);
1068/*
1069                // Ensure each item type is added once.
1070                echo "x".($destroyed->getLocationID()).($destroyed->getItem()->getID())."x ";
1071                if($this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()])
1072                        $this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()]->quantity_ .= $destroyed->getQuantity();
1073                else
1074                        $this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()] = $destroyed;
1075*/
1076        }
1077
1078        function addDroppedItem($dropped)
1079        {
1080                array_push($this->droppeditems_, $dropped);
1081        }
1082}
1083
1084class InvolvedParty
1085{
1086        function InvolvedParty($pilotid, $corpid, $allianceid, $secstatus, $ship, $weapon)
1087        {
1088                $this->pilotid_ = $pilotid;
1089                $this->corpid_ = $corpid;
1090                $this->allianceid_ = $allianceid;
1091                $this->secstatus_ = $secstatus;
1092                $this->ship_ = $ship;
1093                $this->weapon_ = $weapon;
1094        }
1095
1096        function getPilotID()
1097        {
1098                return $this->pilotid_;
1099        }
1100
1101        function getCorpID()
1102        {
1103                return $this->corpid_;
1104        }
1105
1106        function getAllianceID()
1107        {
1108                return $this->allianceid_;
1109        }
1110
1111        function getSecStatus()
1112        {
1113                return $this->secstatus_;
1114        }
1115
1116        function getShip()
1117        {
1118                return $this->ship_;
1119        }
1120
1121        function getWeapon()
1122        {
1123                return $this->weapon_;
1124        }
1125}
1126
1127class DestroyedItem
1128{
1129        function DestroyedItem($item, $quantity, $location, $locationID = null)
1130        {
1131                $this->item_ = $item;
1132                $this->quantity_ = $quantity;
1133                $this->location_ = $location;
1134                $this->locationID_ = $locationID;
1135        }
1136
1137        function getItem()
1138        {
1139                return $this->item_;
1140        }
1141
1142        function getQuantity()
1143        {
1144                if ($this->quantity_ == "") $this->quantity = 1;
1145                return $this->quantity_;
1146        }
1147        //! Deprecated function to support old mods.
1148        function getFormatttedValue()
1149        {
1150                return getFormattedValue();
1151        }
1152
1153        function getFormattedValue()
1154        {
1155                if (!isset($this->value))
1156                {
1157                        $this->getValue();
1158                }
1159                if ($this->value > 0)
1160                {
1161                        $value = $this->value * $this->getQuantity();
1162                        // Value Manipulation for prettyness.
1163                        if (strlen($value) > 6) // Is this value in the millions?
1164                        {
1165                                $formatted = round($value / 1000000, 2);
1166                                $formatted = number_format($formatted, 2);
1167                                $formatted = $formatted." M";
1168                        }
1169                        elseif (strlen($value) > 3) // 1000's ?
1170                        {
1171                                $formatted = round($value / 1000, 2);
1172
1173                                $formatted = number_format($formatted, 2);
1174                                $formatted = $formatted." K";
1175                        }
1176                        else
1177                        {
1178                                $formatted = number_format($value, 2);
1179                                $formatted = $formatted." isk";
1180                        }
1181                }
1182                else
1183                {
1184                        $formatted = "0 isk";
1185                }
1186                return $formatted;
1187        }
1188
1189        function getValue()
1190        {
1191                if ($this->value)
1192                {
1193                        return $this->value;
1194                }
1195                if ($this->item_->row_['itm_value'])
1196                {
1197                        $this->value = $this->item_->row_['itm_value'];
1198                        return $this->item_->row_['itm_value'];
1199                }
1200                elseif ($this->item_->row_['baseprice'])
1201                {
1202                        $this->value = $this->item_->row_['baseprice'];
1203                        return $this->item_->row_['baseprice'];
1204                }
1205                if (DB_USE_CCP)
1206                {
1207                        $this->value = 0;
1208                        $qry = new DBQuery();
1209                        $qry->execute("select basePrice, price
1210                        from kb3_invtypes
1211                        left join kb3_item_price on kb3_invtypes.typeID=kb3_item_price.typeID
1212                        where kb3_invtypes.typeID='".$this->item_->getID()."'");
1213                        if ($row = $qry->getRow())
1214                        {
1215                                if ($row['price'])
1216                                {
1217                                        $this->value = $row['price'];
1218                                }
1219                                else
1220                                {
1221                                        $this->value = $row['basePrice'];
1222                                }
1223                        }
1224                        return $this->value;
1225                }
1226
1227                //returns the value of an item
1228                $value = 0;                             // Set 0 value incase nothing comes back
1229                $id = $this->item_->getID(); // get Item ID
1230                $qry = new DBQuery();
1231                $qry->execute("select itm_value from kb3_items where itm_id= '".$id."'");
1232                $row = $qry->getRow();
1233                $value = $row['itm_value'];
1234                if ($value == '')
1235                {
1236                        $value = 0;
1237                }
1238                return $value;
1239        }
1240
1241        function getLocationID()
1242        {
1243                if(!is_null($this->locationID_)) return $this->locationID_;
1244                $id = false;
1245                if (strlen($this->location_) < 2)
1246                {
1247                        $id = $this->item_->getSlot();
1248                }
1249                else
1250                {
1251                        $qry = new DBQuery();
1252                        $qry->execute("select itl_id from kb3_item_locations where itl_location = '".$this->location_."'");
1253                        $row = $qry->getRow();
1254                        $id = $row['itl_id'];
1255                }
1256                return $id;
1257        }
1258}
1259
1260class DroppedItem extends DestroyedItem
1261{
1262        function DroppedItem($item, $quantity, $location, $locationID = null)
1263        {
1264                $this->item_ = $item;
1265                $this->quantity_ = $quantity;
1266                $this->location_ = $location;
1267                $this->locationID_ = $locationID;
1268        }
1269}
1270?>
Note: See TracBrowser for help on using the browser.