mirror of https://github.com/OpenTTD/OpenTTD
(svn r15262) -Fix: AIEvents were not freed, when they were not queued for any AI.
parent
e8b5f49861
commit
80ee3d3440
|
@ -160,28 +160,47 @@
|
||||||
|
|
||||||
/* static */ void AI::NewEvent(CompanyID company, AIEvent *event)
|
/* static */ void AI::NewEvent(CompanyID company, AIEvent *event)
|
||||||
{
|
{
|
||||||
|
/* AddRef() and Release() need to be called at least once, so do it here */
|
||||||
|
event->AddRef();
|
||||||
|
|
||||||
/* Clients should ignore events */
|
/* Clients should ignore events */
|
||||||
if (_networking && !_network_server) return;
|
if (_networking && !_network_server) {
|
||||||
|
event->Release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Only AIs can have an event-queue */
|
/* Only AIs can have an event-queue */
|
||||||
if (!IsValidCompanyID(company) || IsHumanCompany(company)) return;
|
if (!IsValidCompanyID(company) || IsHumanCompany(company)) {
|
||||||
|
event->Release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Queue the event */
|
/* Queue the event */
|
||||||
CompanyID old_company = _current_company;
|
CompanyID old_company = _current_company;
|
||||||
_current_company = company;
|
_current_company = company;
|
||||||
AIEventController::InsertEvent(event);
|
AIEventController::InsertEvent(event);
|
||||||
_current_company = old_company;
|
_current_company = old_company;
|
||||||
|
|
||||||
|
event->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void AI::BroadcastNewEvent(AIEvent *event, CompanyID skip_company)
|
/* static */ void AI::BroadcastNewEvent(AIEvent *event, CompanyID skip_company)
|
||||||
{
|
{
|
||||||
|
/* AddRef() and Release() need to be called at least once, so do it here */
|
||||||
|
event->AddRef();
|
||||||
|
|
||||||
/* Clients should ignore events */
|
/* Clients should ignore events */
|
||||||
if (_networking && !_network_server) return;
|
if (_networking && !_network_server) {
|
||||||
|
event->Release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Try to send the event to all AIs */
|
/* Try to send the event to all AIs */
|
||||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
||||||
if (c != skip_company) AI::NewEvent(c, event);
|
if (c != skip_company) AI::NewEvent(c, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
||||||
|
|
Loading…
Reference in New Issue