/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /****************************************************************************** * * FILE * GroupScript.cpp * * DESCRIPTION * Group script * * PROGRAMMER * Denzil E. Long, Jr. * * VERSION INFO * $Author: Rich_d $ * $Revision: 2 $ * $Modtime: 6/14/00 12:55p $ * $Archive: /Commando/Code/Scripts/GroupScript.cpp $ * ******************************************************************************/ #include "scripts.h" #include "groupcontrol.h" #include "group.h" #include "customevents.h" #include "dprint.h" DECLARE_SCRIPT(MXX_Group_Member_DEL, "GroupName:string") { const char* mGroupName; // Add the object to the group when it is created. void Created(GameObject* owner) { mGroupName = Get_Parameter("GroupName"); assert(mGroupName != NULL); GroupController* controller = GroupController::Instance(); assert(controller != NULL); controller->AddToGroup(mGroupName, owner); } // Remove the object from the group when it is destroyed. void Destroyed(GameObject* owner) { GroupController* controller = GroupController::Instance(); assert(controller != NULL); controller->RemoveFromGroup(mGroupName, owner); } // Notify group that a member was killed. void Killed(GameObject* owner, GameObject* killer) { GroupController* controller = GroupController::Instance(); assert(controller != NULL); GroupEventInfo info; info.GroupName = mGroupName; info.Event = GROUP_MEMBER_KILLED; info.Object = killer; Group* group = controller->FindGroup(mGroupName); assert(group != NULL); group->SendCustomEvent(owner, SCMD_GROUP_EVENT, (int)&info); } // Notify group that a member was damaged. void Damaged(GameObject* owner, GameObject* damager) { GroupController* controller = GroupController::Instance(); assert(controller != NULL); GroupEventInfo info; info.GroupName = mGroupName; info.Event = GROUP_MEMBER_DAMAGED; info.Object = damager; Group* group = controller->FindGroup(mGroupName); assert(group != NULL); group->SendCustomEvent(owner, SCMD_GROUP_EVENT, (int)&info); } // Notify group that a member heard a sound. void Sound_Heard(GameObject* owner, const CombatSound& sound) { GroupController* controller = GroupController::Instance(); assert(controller != NULL); GroupEventInfo info; info.GroupName = mGroupName; info.Event = GROUP_MEMBER_HEARD; info.Sound = &sound; Group* group = controller->FindGroup(mGroupName); assert(group != NULL); group->SendCustomEvent(owner, SCMD_GROUP_EVENT, (int)&info); } // Notify group that a member saw the enemy. void Enemy_Seen(GameObject* owner, GameObject* enemy) { GroupController* controller = GroupController::Instance(); assert(controller != NULL); GroupEventInfo info; info.GroupName = mGroupName; info.Event = GROUP_MEMBER_SAW; info.Object = enemy; Group* group = controller->FindGroup(mGroupName); assert(group != NULL); group->SendCustomEvent(owner, SCMD_GROUP_EVENT, (int)&info); } #ifdef _DEBUG void Custom(GameObject* owner, int event, int data, GameObject* sender) { if (SCMD_GROUP_EVENT == event) { GroupEventInfo* info = (GroupEventInfo*)data; assert(info != NULL); int senderID = Commands->Get_ID(sender); int objectID = Commands->Get_ID(info->Object); switch (info->Event) { case GROUP_MEMBER_DAMAGED: DebugPrint("Group %s member %d damaged by object %d\n", info->GroupName, senderID, objectID); break; case GROUP_MEMBER_KILLED: DebugPrint("Group %s member %d killed by object %d\n", info->GroupName, senderID, objectID); break; case GROUP_MEMBER_HEARD: { const CombatSound* sound = info->Sound; objectID = Commands->Get_ID(sound->Creator); DebugPrint("Group %s member %d heard a sound from object %d\n", info->GroupName, senderID, objectID); } break; case GROUP_MEMBER_SAW: DebugPrint("Group %s member %d saw object %d\n", info->GroupName, senderID, objectID); break; default: break; } } } #endif };