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
|
/* bzflag
* Copyright (c) 1993-2025 Tim Riker
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the license found in the file
* named COPYING that should have accompanied this file.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
// thiefControl.cpp : Defines the entry point for the DLL application.
//
#include "bzfsAPI.h"
class ThiefControl : public bz_Plugin
{
public:
virtual const char* Name()
{
return "Thief Control";
}
virtual void Init( const char* config );
virtual void Event( bz_EventData *eventData );
};
BZ_PLUGIN(ThiefControl)
void ThiefControl::Init(const char* /*config*/ )
{
bz_debugMessage(4, "thiefControl plugin loaded");
Register(bz_eFlagTransferredEvent);
}
void ThiefControl::Event (bz_EventData * eventData)
{
bz_FlagTransferredEventData_V1 *data = (bz_FlagTransferredEventData_V1 *) eventData;
const std::string noStealMsg = "Flag dropped. Don't steal from teammates!";
if (!data)
return;
if (data->eventType != bz_eFlagTransferredEvent)
return;
bz_BasePlayerRecord *playerFrom = bz_getPlayerByIndex(data->fromPlayerID);
if (!playerFrom)
return;
bz_BasePlayerRecord *playerTo = bz_getPlayerByIndex(data->toPlayerID);
if (!playerTo)
{
bz_freePlayerRecord(playerFrom);
return;
}
switch (bz_getGameType())
{
case eFFAGame:
if (playerTo->team == playerFrom->team && playerTo->team != eRogueTeam)
{
data->action = data->DropThief;
bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str());
}
break;
case eCTFGame:
{
if (playerTo->team == playerFrom->team && playerTo->team != eRogueTeam)
{
bz_ApiString flagT = bz_ApiString(data->flagType);
// Allow teammates to steal team flags
// This will allow someone to steal a team flag in order
// to possibly capture it faster.
if (flagT != "R*" && flagT != "G*" && flagT != "B*" && flagT != "P*")
{
data->action = data->DropThief;
bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str());
}
}
}
break;
case eRabbitGame:
if (playerTo->team == playerFrom->team)
{
data->action = data->DropThief;
bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str());
}
break;
default:
break;
}
bz_freePlayerRecord(playerTo);
bz_freePlayerRecord(playerFrom);
}
// Local Variables: ***
// mode: C++ ***
// tab-width: 4 ***
// c-basic-offset: 4 ***
// indent-tabs-mode: nil ***
// End: ***
// ex: shiftwidth=4 tabstop=4
|