root/dev/common/class.kill.php @ 75

Revision 75, 23.2 KB (checked in by exi, 16 years ago)

2nd fix... now tested to post a mail...

Line 
1<?php
2require_once("db.php");
3require_once("class.item.php");
4require_once("class.corp.php");
5require_once("class.alliance.php");
6require_once("class.ship.php");
7require_once("class.system.php");
8require_once("class.pilot.php");
9require_once("class.killlist.php");
10
11class Kill
12{
13    function Kill($id = 0)
14    {
15        $this->id_ = $id;
16        $this->involvedparties_ = array();
17        $this->destroyeditems_ = array();
18    }
19
20    function getID()
21    {
22        return $this->id_;
23    }
24
25    function getTimeStamp()
26    {
27        $this->execQuery();
28        return $this->timestamp_;
29    }
30
31    function getVictimName()
32    {
33        $this->execQuery();
34        return $this->victimname_;
35    }
36
37    function getVictimID()
38    {
39        $this->execQuery();
40        return $this->victimid_;
41    }
42
43    function getVictimPortrait($size = 32)
44    {
45        $this->execQuery();
46        $plt = new Pilot($this->victimid_);
47        return $plt->getPortraitURL($size);
48    }
49
50    function getVictimCorpID()
51    {
52        $this->execQuery();
53        return $this->victimcorpid_;
54    }
55
56    function getVictimCorpName()
57    {
58        $this->execQuery();
59        return $this->victimcorpname_;
60    }
61
62    function getVictimAllianceName()
63    {
64        $this->execQuery();
65        return $this->victimalliancename_;
66    }
67
68    function getVictimAllianceID()
69    {
70        $this->execQuery();
71        return $this->victimallianceid_;
72    }
73
74    function getVictimShip()
75    {
76        $this->execQuery();
77        return $this->victimship_;
78    }
79
80    function getSystem()
81    {
82        $this->execQuery();
83        return $this->solarsystem_;
84    }
85
86    function getFBPilotID()
87    {
88        $this->execQuery();
89        if (!$this->fbpilotid_) return "null";
90        else return $this->fbpilotid_;
91    }
92
93    function getFBPilotName()
94    {
95        $this->execQuery();
96        return $this->fbpilotname_;
97    }
98
99    function getFBCorpID()
100    {
101        $this->execQuery();
102        if (!$this->fbcorpid_) return "null";
103        else return $this->fbcorpid_;
104    }
105
106    function getFBCorpName()
107    {
108        $this->execQuery();
109        return $this->fbcorpname_;
110    }
111
112    function getFBAllianceID()
113    {
114        $this->execQuery();
115        if (!$this->fballianceid_) return "null";
116        else return $this->fballianceid_;
117    }
118
119    function getFBAllianceName()
120    {
121        $this->execQuery();
122        return $this->fballiancename_;
123    }
124
125    function getKillPoints()
126    {
127        $this->execQuery();
128        return $this->killpoints_;
129    }
130
131    function getSolarSystemName()
132    {
133        return $this->solarsystemname_;
134    }
135
136    function getSolarSystemSecurity()
137    {
138        return $this->solarsystemsecurity_;
139    }
140
141    function getVictimShipName()
142    {
143        return $this->victimshipname_;
144    }
145
146    function getVictimShipExternalID()
147    {
148        return $this->victimshipexternalid_;
149    }
150
151    function getVictimShipClassName()
152    {
153        return $this->victimshipclassname_;
154    }
155
156    function getVictimShipValue()
157    {
158        return $this->victimshipvalue_;
159    }
160
161    function getVictimShipImage($size)
162    {
163        return IMG_URL."/ships/".$size."_".$size."/".$this->victimshipexternalid_.".png";
164    }
165
166    function getVictimShipValueIndicator()
167    {
168        $value = $this->getVictimShipValue();
169
170        if ($value >= 0 && $value <= 1)
171            $color = "gray";
172        elseif ($value > 1 && $value <= 15)
173            $color = "blue";
174        elseif ($value > 15 && $value <= 25)
175            $color = "green";
176        elseif ($value > 25 && $value <= 40)
177            $color = "yellow";
178        elseif ($value > 40 && $value <= 80)
179            $color = "red";
180        elseif ($value > 80 && $value <= 250)
181            $color = "orange";
182        elseif ($value > 250 && $value <= 7000)
183            $color = "purple";
184
185        return IMG_URL."/ships/ship-".$color.".gif";
186    }
187
188    function getRawMail()
189    {
190        $this->execQuery();
191
192        $mail .= substr(str_replace('-', '.' , $this->getTimeStamp()), 0, 16)."\r\n\r\n";
193        $mail .= "Victim: ".$this->getVictimName()."\r\n";
194        $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
195        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
196        $ship = $this->getVictimShip();
197        $mail .= "Destroyed: ".$ship->getName()."\r\n";
198        $system = $this->getSystem();
199        $mail .= "System: ".$system->getName()."\r\n";
200        $mail .= "Security: ".$system->getSecurity(true)."\r\n\r\n";
201        $mail .= "Involved parties:\r\n\r\n";
202
203        foreach ($this->involvedparties_ as $inv)
204        {
205            $pilot = new Pilot($inv->getPilotID());
206            $corp = new Corporation($inv->getCorpID());
207            $alliance = new Alliance($inv->getAllianceID());
208
209            $weapon = $inv->getWeapon();
210            $ship = $inv->getShip();
211            if ($pilot->getName() == $weapon->getName())
212            {
213                $name = $pilot->getName()." / ".$corp->getName();
214            }
215            else
216            {
217                $name = $pilot->getName();
218            }
219
220            $mail .= "Name: ".$name;
221            if ($pilot->getID() == $this->getFBPilotID())
222            {
223                $mail .= " (laid the final blow)";
224            }
225            $mail .= "\r\n";
226
227            if ($pilot->getName() != $weapon->getName())
228            {
229                $mail .= "Security: ".$inv->getSecStatus()."\r\n";
230                $mail .= "Alliance: ".$alliance->getName()."\r\n";
231                $mail .= "Corp: ".$corp->getName()."\r\n";
232                $mail .= "Ship: ".$ship->getName()."\r\n";
233                $mail .= "Weapon: ".$weapon->getName()."\r\n";
234            }
235            $mail .= "\r\n";
236        }
237
238        if (count($this->destroyeditems_) > 0)
239        {
240            $mail .= "\r\nDestroyed items:\r\n\r\n";
241
242            foreach($this->destroyeditems_ as $destroyed)
243            {
244                $item = $destroyed->getItem();
245                $mail .= $item->getName();
246                if ($destroyed->getQuantity() > 1)
247                    $mail .= ", Qty: ".$destroyed->getQuantity();
248                if ($destroyed->getLocationID() == 4) // cargo
249                    $mail .= " (Cargo)";
250                if ($destroyed->getLocationID() == 6) // drone
251                    $mail .= " (Drone Bay)";
252                $mail .= "\r\n";
253            }
254        }
255
256        return $mail;
257    }
258
259    function getDupe($checkonly = false)
260    {
261        if (!$checkonly)
262        {
263            $this->execQuery();
264        }
265        $dupe = 0;
266        $qry = new DBQuery();
267        if (!$this->getFBPilotID() || !$this->victimid_)
268            return 0;
269        $qry->execute("select kll_id
270                        from kb3_kills
271                        where kll_timestamp <=
272                        date_add( '".$this->timestamp_."', INTERVAL '3:0' MINUTE_SECOND )
273                        and kll_timestamp >=
274                        date_sub( '".$this->timestamp_."', INTERVAL '3:0' MINUTE_SECOND )
275                        and kll_victim_id = ".$this->victimid_."
276                        and kll_ship_id = ".$this->victimship_->getID()."
277                        and kll_system_id = ".$this->solarsystem_->getID()."
278                        and kll_fb_plt_id = ".$this->getFBPilotID()."
279                        and kll_id != ".$this->id_);
280
281        $row = $qry->getRow();
282        if ($row)
283            return $row['kll_id'];
284        else
285            return 0;
286    }
287
288    function execQuery()
289    {
290        if (!$this->timestamp_)
291        {
292            $qry = new DBQuery();
293
294            $this->qry_ = new DBQuery();
295            $this->sql_ = "select kll.kll_id, kll.kll_timestamp, plt.plt_name,
296                              crp.crp_name, ali.all_name, ali.all_id, kll.kll_ship_id,
297                              kll.kll_system_id, kll.kll_ship_id,
298                                      kll.kll_victim_id, plt.plt_externalid,
299                                      kll.kll_crp_id, kll.kll_points,
300                                      fbplt.plt_id as fbplt_id,
301                                      fbcrp.crp_id as fbcrp_id,
302                                      fbali.all_id as fbali_id,
303                              fbplt.plt_name as fbplt_name,
304                              fbcrp.crp_name as fbcrp_name,
305                              fbali.all_name as fbali_name
306                         from kb3_kills kll, kb3_pilots plt, kb3_corps crp,
307                              kb3_alliances ali, kb3_alliances fbali, kb3_corps fbcrp,
308                              kb3_pilots fbplt
309                        where kll.kll_id = ".$this->id_."
310                          and plt.plt_id = kll.kll_victim_id
311                          and crp.crp_id = kll.kll_crp_id
312                          and ali.all_id = kll.kll_all_id
313                          and fbali.all_id = kll.kll_fb_all_id
314                          and fbcrp.crp_id = kll.kll_fb_crp_id
315                          and fbplt.plt_id = kll.kll_fb_plt_id";
316
317            $this->qry_->execute($this->sql_);
318            $row = $this->qry_->getRow();
319            $this->setTimeStamp($row['kll_timestamp']);
320            $this->setSolarSystem(new SolarSystem($row['kll_system_id']));
321            $this->setVictimID($row['kll_victim_id']);
322            $this->setVictimName($row['plt_name']);
323            $this->setVictimCorpID($row['kll_crp_id']);
324            $this->setVictimCorpName($row['crp_name']);
325            $this->setVictimAllianceID($row['all_id']);
326            $this->setVictimAllianceName($row['all_name']);
327            $this->setVictimShip(new Ship($row['kll_ship_id']));
328            $this->setFBPilotID($row['fbplt_id']);
329            $this->setFBPilotName($row['fbplt_name']);
330            $this->setFBCorpID($row['fbcrp_id']);
331            $this->setFBCorpName($row['fbcrp_name']);
332            $this->setFBAllianceID($row['fbali_id']);
333            $this->setFBAllianceName($row['fbali_name']);
334            $this->setKillPoints($row['kll_points']);
335
336            if (!$row)
337                $this->valid_ = false;
338            else
339                $this->valid_ = true;
340            // involved
341            $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
342                    ind_shp_id, ind_wep_id
343                    from kb3_inv_detail
344                    where ind_kll_id = ".$this->getID()."
345                    order by ind_order";
346
347            $qry->execute($sql) or die($qry->getErrorMsg());
348            while ($row = $qry->getRow())
349            {
350                $involved = new InvolvedParty($row['ind_plt_id'],
351                    $row['ind_crp_id'],
352                    $row['ind_all_id'],
353                    $row['ind_sec_status'],
354                    new Ship($row['ind_shp_id']),
355                    new Item($row['ind_wep_id']));
356                array_push($this->involvedparties_, $involved);
357            }
358            // destroyed items
359            $sql = "select sum( itd.itd_quantity ) as itd_quantity, itd_itm_id,
360                    itd_itl_id, itl_location
361                    from kb3_items_destroyed itd, kb3_items itm,
362                    kb3_item_locations itl
363                    where itd.itd_kll_id = ".$this->getID()."
364                    and itd.itd_itm_id = itm.itm_id
365                    and ( itd.itd_itl_id = itl.itl_id or itd.itd_itl_id = 0 )
366                    group by itd_itm_id, itd_itl_id
367                    order by itd.itd_itl_id, itm.itm_type";
368
369            $qry->execute($sql) or die($qry->getErrorMsg());
370            while ($row = $qry->getRow())
371            {
372                $destroyed = new DestroyedItem(new Item($row['itd_itm_id']),
373                    $row['itd_quantity'],
374                    $row['itl_location']);
375                array_push($this->destroyeditems_, $destroyed);
376            }
377        }
378    }
379
380    function exists()
381    {
382        $this->execQuery();
383        return $this->valid_;
384    }
385
386    function relatedKillCount()
387    {
388        $kslist = new KillList();
389        $kslist->setRelated($this->id_);
390        if (CORP_ID)
391            $kslist->addInvolvedCorp(new Corporation(CORP_ID));
392        if (ALLIANCE_ID)
393            $kslist->addInvolvedAlliance(new Alliance(ALLIANCE_ID));
394
395        return $kslist->getCount();
396    }
397
398    function relatedLossCount()
399    {
400        $lslist = new KillList();
401        $lslist->setRelated($this->id_);
402        if (CORP_ID)
403            $lslist->addVictimCorp(new Corporation(CORP_ID));
404        if (ALLIANCE_ID)
405            $lslist->addVictimAlliance(new Alliance(ALLIANCE_ID));
406
407        return $lslist->getCount();
408    }
409
410    function countComment($kll_id)
411    {
412        $qry = new DBQuery();
413        $sql = "SELECT * FROM kb3_comments WHERE kll_id = '$kll_id'";
414        $count = $qry->execute($sql);
415        $count = $qry->recordCount();
416        return $count;
417    }
418
419    function setID($id)
420    {
421        $this->id_ = $id;
422    }
423
424    function setTimeStamp($timestamp)
425    {
426        $this->timestamp_ = $timestamp;
427    }
428
429    function setSolarSystem($solarsystem)
430    {
431        $this->solarsystem_ = $solarsystem;
432    }
433
434    function setSolarSystemName($solarsystemname)
435    {
436        $this->solarsystemname_ = $solarsystemname;
437    }
438
439    function setSolarSystemSecurity($solarsystemsecurity)
440    {
441        $this->solarsystemsecurity_ = $solarsystemsecurity;
442    }
443
444    function setVictim($victim)
445    {
446        $this->victim_ = $victim;
447    }
448
449    function setVictimID($victimid)
450    {
451        $this->victimid_ = $victimid;
452    }
453
454    function setVictimName($victimname)
455    {
456        $this->victimname_ = $victimname;
457    }
458
459    function setVictimCorpID($victimcorpid)
460    {
461        $this->victimcorpid_ = $victimcorpid;
462    }
463
464    function setVictimCorpName($victimcorpname)
465    {
466        $this->victimcorpname_ = $victimcorpname;
467    }
468
469    function setVictimAllianceID($victimallianceid)
470    {
471        $this->victimallianceid_ = $victimallianceid;
472    }
473
474    function setVictimAllianceName($victimalliancename)
475    {
476        $this->victimalliancename_ = $victimalliancename;
477    }
478
479    function setVictimShip($victimship)
480    {
481        $this->victimship_ = $victimship;
482    }
483
484    function setVictimShipName($victimshipname)
485    {
486        $this->victimshipname_ = $victimshipname;
487    }
488
489    function setVictimShipExternalID($victimshipexternalid)
490    {
491        $this->victimshipexternalid_ = $victimshipexternalid;
492    }
493
494    function setVictimShipClassName($victimshipclassname)
495    {
496        $this->victimshipclassname_ = $victimshipclassname;
497    }
498
499    function setVictimShipValue($victimshipvalue)
500    {
501        $this->victimshipvalue_ = $victimshipvalue;
502    }
503
504    function setFBPilotID($fbpilotid)
505    {
506        $this->fbpilotid_ = $fbpilotid;
507    }
508
509    function setFBPilotName($fbpilotname)
510    {
511        $npc = strpos($fbpilotname, "#");
512                if ($npc === false)
513        {
514                $this->fbpilotname_ = $fbpilotname;
515                }
516                else
517        {
518                $name = explode("#", $fbpilotname);
519                $plt = new Item();
520                $name = $plt->lookup($name[2]);
521                $this->fbpilotname_ = $name;
522                }
523    }
524
525    function setFBCorpID($fbcorpid)
526    {
527        $this->fbcorpid_ = $fbcorpid;
528    }
529
530    function setFBCorpName($fbcorpname)
531    {
532        $this->fbcorpname_ = $fbcorpname;
533    }
534
535    function setFBAllianceID($fballianceid)
536    {
537        $this->fballianceid_ = $fballianceid;
538    }
539
540    function setFBAllianceName($fballiancename)
541    {
542        $this->fballiancename_ = $fballiancename;
543    }
544    function setKillPoints($killpoints)
545    {
546        $this->killpoints_ = $killpoints;
547    }
548
549    function calculateKillPoints()
550    {
551        $ship = $this->getVictimShip();
552        $shipclass = $ship->getClass();
553        $vicpoints = $shipclass->getPoints();
554        $maxpoints = round($vicpoints * 1.2);
555
556        foreach ($this->involvedparties_ as $inv)
557        {
558            $shipinv = $inv->getShip();
559            $shipclassinv = $shipinv->getClass();
560            $invpoints += $shipclassinv->getPoints();
561        }
562
563        $gankfactor = $vicpoints / ($vicpoints + $invpoints);
564        $points = ceil($vicpoints * ($gankfactor / 0.75));
565
566        if ($points > $maxpoints) $points = $maxpoints;
567
568        $points = round($points, 0);
569        return $points;
570    }
571
572    function add($id = null)
573    {
574        // if ( $this->timestamp_ == "" || !$this->victimid_ || !$this->victimship_->getID() || !$this->solarsystem_->getID() ||
575        // !$this->victimallianceid_ || !$this->victimcorpid_ || !$this->getFBAllianceID() || !$this->getFBCorpID() ||
576        // !$this->getFBPilotID() )
577        // return 0;
578        if (!$this->solarsystem_->getID())
579        {
580            echo 'INTERNAL ERROR; SOLARSYSTEM NOT FOUND; PLEASE CONTACT A DEV WITH THIS MESSAGE<br/>';
581            var_dump($this->solarsystem_);
582            var_dump($this->solarsystemname_);
583            return 0;
584        }
585        $dupe = $this->getDupe(true);
586
587        if ($dupe == 0)
588        {
589            $qry = new DBQuery();
590            $sql = "insert into kb3_kills
591                values ( null,
592                         date_format('".$this->timestamp_."', '%Y.%m.%d %H:%i:%s'),
593                         ".$this->victimid_.", ".$this->victimallianceid_.",
594                         ".$this->victimcorpid_.", ".$this->victimship_->getID().",
595                         ".$this->solarsystem_->getID().", ".$this->getFBAllianceID().",
596                         ".$this->getFBCorpID().", ".$this->getFBPilotID().", ".$this->calculateKillPoints()." )";
597            $qry->execute($sql);
598            if ($id)
599            {
600                $this->id_ = $id;
601            }
602            else
603            {
604                $this->id_ = $qry->getInsertID();
605            }
606            // involved
607            $order = 0;
608            $invall = array();
609            $invcrp = array();
610            $invplt = array();
611            foreach ($this->involvedparties_ as $inv)
612            {
613                $ship = $inv->getShip();
614                $weapon = $inv->getWeapon();
615                if (!$inv->getPilotID() || $inv->getSecStatus() == "" || !$inv->getAllianceID() || !$inv->getCorpID() || !$ship->getID() || !$weapon->getID())
616                {
617                    $this->remove();
618                    return 0;
619                }
620
621                $sql = "insert into kb3_inv_detail
622                            values ( ".$this->getID().", ".$inv->getPilotID().", '".$inv->getSecStatus()."', "
623                .$inv->getAllianceID().", ".$inv->getCorpID().", ".$ship->getID().", "
624                .$weapon->getID().", ".$order++." )";
625                $qry->execute($sql) or die($qry->getErrorMsg());
626
627                if (!in_array($inv->getAllianceID(), $invall) && $inv->getAllianceID() != 14)
628                {
629                    array_push($invall, $inv->getAllianceID());
630                    $qry->execute("insert into kb3_inv_all values ( ".$this->getID().", ".$inv->getAllianceID()." )") or die($qry->getErrorMsg());
631                }
632                if (!in_array($inv->getCorpID(), $invcrp))
633                {
634                    array_push($invcrp, $inv->getCorpID());
635                    $qry->execute("insert into kb3_inv_crp values ( ".$this->getID().", ".$inv->getCorpID()." )") or die($qry->getErrorMsg());
636                }
637                if (!in_array($inv->getPilotID(), $invplt))
638                {
639                    array_push($invplt, $inv->getPilotID());
640                    $qry->execute("insert into kb3_inv_plt values ( ".$this->getID().", ".$inv->getPilotID()." )") or die($qry->getErrorMsg());
641                }
642            }
643            // destroyed
644            foreach ($this->destroyeditems_ as $dest)
645            {
646                $item = $dest->getItem();
647                if (!$item->getID() || !$dest->getQuantity() || !$dest->getLocationID())
648                    continue;
649
650                $sql = "insert into kb3_items_destroyed
651                        values ( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", "
652                .$dest->getLocationID()." )";
653                $qry->execute($sql);
654            }
655        }
656        else
657        {
658            $this->dupeid_ = $dupe;
659            $this->id_ = -1;
660        }
661        return $this->id_;
662    }
663
664    function remove()
665    {
666        if (!$this->id_)
667            return;
668
669        $qry = new DBQuery();
670        $qry->execute("delete from kb3_kills where kll_id = ".$this->id_);
671        $qry->execute("delete from kb3_inv_detail where ind_kll_id = ".$this->id_);
672        $qry->execute("delete from kb3_inv_all where ina_kll_id = ".$this->id_);
673        $qry->execute("delete from kb3_inv_crp where inc_kll_id = ".$this->id_);
674        $qry->execute("delete from kb3_inv_plt where inp_kll_id = ".$this->id_);
675        $qry->execute("delete from kb3_items_destroyed where itd_kll_id = ".$this->id_);
676        $qry->execute("delete from kb3_comments where kll_id = ".$this->id_);
677    }
678
679    function addInvolvedParty($involved)
680    {
681        array_push($this->involvedparties_, $involved);
682    }
683
684    function addDestroyedItem($destroyed)
685    {
686        array_push($this->destroyeditems_, $destroyed);
687    }
688}
689
690class InvolvedParty
691{
692    function InvolvedParty($pilotid, $corpid, $allianceid,
693        $secstatus, $ship, $weapon)
694    {
695        $this->pilotid_ = $pilotid;
696        $this->corpid_ = $corpid;
697        $this->allianceid_ = $allianceid;
698        $this->secstatus_ = $secstatus;
699        $this->ship_ = $ship;
700        $this->weapon_ = $weapon;
701    }
702
703    function getPilotID()
704    {
705        return $this->pilotid_;
706    }
707
708    function getCorpID()
709    {
710        return $this->corpid_;
711    }
712
713    function getAllianceID()
714    {
715        return $this->allianceid_;
716    }
717
718    function getSecStatus()
719    {
720        return $this->secstatus_;
721    }
722
723    function getShip()
724    {
725        return $this->ship_;
726    }
727
728    function getWeapon()
729    {
730        return $this->weapon_;
731    }
732}
733
734class DestroyedItem
735{
736    function DestroyedItem($item, $quantity, $location)
737    {
738        $this->item_ = $item;
739        $this->quantity_ = $quantity;
740        $this->location_ = $location;
741    }
742
743    function getItem()
744    {
745        return $this->item_;
746    }
747
748    function getQuantity()
749    {
750        if ($this->quantity_ == "") $this->quantity = 1;
751        return $this->quantity_;
752    }
753
754        function getValue()
755        //returns the value of an item
756        {
757                $value = 0;                             // Set 0 value incase nothing comes back
758                $id= $this->item_->getID(); // get Item ID
759                $qry = new DBQuery();
760        $qry->execute("select Value from kb3_items where itm_id= '".$id."'") or die($qry->getErrorMsg());
761        $row = $qry->getRow();
762        $value = $row['Value'];
763                if ($value == "") {
764                        $value = 0;
765                }
766                return $value;
767        }
768
769    function getLocationID()
770    {
771        $id = 0;
772        if (strlen($this->location_) < 2)
773        {
774            $id = $this->item_->getSlot();
775        }
776        else
777        {
778            $qry = new DBQuery();
779            $qry->execute("select itl_id from kb3_item_locations where itl_location = '".$this->location_."'") or die($qry->getErrorMsg());
780            $row = $qry->getRow();
781            $id = $row['itl_id'];
782        }
783
784        return $id;
785    }
786}
787?>
Note: See TracBrowser for help on using the browser.