File: customflagsample.cpp

package info (click to toggle)
bzflag 2.4.30-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 26,488 kB
  • sloc: cpp: 150,376; ansic: 3,463; sh: 2,535; makefile: 2,194; perl: 486; python: 260; objc: 246; php: 206
file content (118 lines) | stat: -rw-r--r-- 3,502 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// customflagsample.cpp : Defines the entry point for the DLL application.
//

#include "bzfsAPI.h"

// event handler callback
class CustomFlagSample : public bz_Plugin
{
public:
    virtual ~CustomFlagSample() {};
    virtual const char* Name ()
    {
        return "Custom Flag Sample";
    }
    virtual void Init ( const char* c );
    virtual void Cleanup ( void );
    virtual void Event ( bz_EventData *eventData );
};

BZ_PLUGIN(CustomFlagSample)

void CustomFlagSample::Init ( const char* /*commandLine*/ )
{
    bz_debugMessage(4, "customflagsample plugin loaded");

    // register our special custom flag
    bz_RegisterCustomFlag("CF", "Custom Flag",
                          "A simple sample custom flag from the customflagsample plugin", /*eSuperShot*/0, eGoodFlag);

    // register events for pick up, drop, transfer, and fire
    Register(bz_eFlagTransferredEvent);
    Register(bz_eFlagGrabbedEvent);
    Register(bz_eFlagDroppedEvent);
    Register(bz_eShotFiredEvent);
    Register(bz_ePlayerDieEvent);
}

void CustomFlagSample::Cleanup ( void )
{
    // unregister our events
    Flush();

    bz_debugMessage(4, "customflagsample plugin unloaded");
}

void CustomFlagSample::Event(bz_EventData *eventData)
{
    switch (eventData->eventType)
    {

    default:
    {
        // no, sir, we didn't ask for THIS!!
        bz_debugMessage(1, "customflagsample: received event with unrequested eventType!");
        return;
    }

    case bz_eFlagTransferredEvent:
    {
        bz_FlagTransferredEventData_V1* fte = (bz_FlagTransferredEventData_V1*)eventData;
        if (strcmp(fte->flagType, "CF") == 0)
            bz_sendTextMessage(BZ_SERVER, BZ_ALLUSERS, "Custom Flag transferred!");
        break;
    }

    case bz_eFlagGrabbedEvent:
    {
        bz_FlagGrabbedEventData_V1* fge = (bz_FlagGrabbedEventData_V1*)eventData;
        if (strcmp(fge->flagType, "CF") == 0)
            bz_sendTextMessage(BZ_SERVER, BZ_ALLUSERS, "Custom Flag grabbed!");
        break;
    }

    case bz_eFlagDroppedEvent:
    {
        bz_FlagDroppedEventData_V1* fde = (bz_FlagDroppedEventData_V1*)eventData;
        if (strcmp(fde->flagType, "CF") == 0)
            bz_sendTextMessage(BZ_SERVER, BZ_ALLUSERS, "Custom Flag dropped!");
        break;
    }

    case bz_eShotFiredEvent:
    {
        bz_ShotFiredEventData_V1* sfed = (bz_ShotFiredEventData_V1*)eventData;
        int p = sfed->playerID;
        bz_BasePlayerRecord *playerRecord = bz_getPlayerByIndex(p);
        if (!playerRecord) break;
        if (playerRecord->currentFlag == "Custom Flag (+CF)")
        {
            bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Shot fired by %s with Custom Flag!", playerRecord->callsign.c_str());
            // this user must be cool, add 10 to their score
            bz_incrementPlayerWins(p, 10);
        }
        break;
    }

    case bz_ePlayerDieEvent:
    {
        bz_PlayerDieEventData_V1* deed = (bz_PlayerDieEventData_V1*)eventData;
        bz_ApiString flag = deed->flagKilledWith;
        int p = deed->playerID;
        bz_BasePlayerRecord *playerRecord = bz_getPlayerByIndex(p);
        if (flag == "CF")
            bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Player %s killed by a player with Custom Flag!",
                                playerRecord->callsign.c_str());
        break;
    }

    }
}

// Local Variables: ***
// mode: C++ ***
// tab-width: 4 ***
// c-basic-offset: 4 ***
// indent-tabs-mode: nil ***
// End: ***
// ex: shiftwidth=4 tabstop=4