@@ -995,6 +995,8 @@ void Baseapp::onCreateBaseFromDBIDCallback(Network::Channel* pChannel, KBEngine:
995
995
bool success = false ;
996
996
bool wasActive = false ;
997
997
ENTITY_ID entityID;
998
+ COMPONENT_ID wasActiveCID;
999
+ ENTITY_ID wasActiveEntityID;
998
1000
999
1001
s >> entityType;
1000
1002
s >> dbid;
@@ -1003,23 +1005,49 @@ void Baseapp::onCreateBaseFromDBIDCallback(Network::Channel* pChannel, KBEngine:
1003
1005
s >> entityID;
1004
1006
s >> wasActive;
1005
1007
1006
- if (!success )
1008
+ if (wasActive )
1007
1009
{
1008
- ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed.\n " ,
1009
- entityType.c_str (), dbid));
1010
+ s >> wasActiveCID;
1011
+ s >> wasActiveEntityID;
1012
+ }
1010
1013
1014
+ if (!success)
1015
+ {
1011
1016
if (callbackID > 0 )
1012
1017
{
1013
1018
SCOPED_PROFILE (SCRIPTCALL_PROFILE);
1014
1019
1015
- Py_INCREF (Py_None);
1020
+ PyObject* baseRef = NULL ;
1021
+
1022
+ if (wasActive && wasActiveCID > 0 && wasActiveEntityID > 0 )
1023
+ {
1024
+ Base* pBase = this ->findEntity (wasActiveEntityID);
1025
+ if (pBase)
1026
+ {
1027
+ baseRef = static_cast <PyObject*>(pBase);
1028
+ Py_INCREF (baseRef);
1029
+ }
1030
+ else
1031
+ {
1032
+ baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1033
+ }
1034
+ }
1035
+ else
1036
+ {
1037
+ baseRef = Py_None;
1038
+ Py_INCREF (baseRef);
1039
+
1040
+ ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed.\n " ,
1041
+ entityType.c_str (), dbid));
1042
+ }
1043
+
1016
1044
// baseRef, dbid, wasActive
1017
1045
PyObjectPtr pyfunc = pyCallbackMgr_.take (callbackID);
1018
1046
if (pyfunc != NULL )
1019
1047
{
1020
1048
PyObject* pyResult = PyObject_CallFunction (pyfunc.get (),
1021
1049
const_cast <char *>(" OKi" ),
1022
- Py_None , dbid, wasActive);
1050
+ baseRef , dbid, wasActive);
1023
1051
1024
1052
if (pyResult != NULL )
1025
1053
Py_DECREF (pyResult);
@@ -1031,6 +1059,8 @@ void Baseapp::onCreateBaseFromDBIDCallback(Network::Channel* pChannel, KBEngine:
1031
1059
ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: can't found callback:{}.\n " ,
1032
1060
callbackID));
1033
1061
}
1062
+
1063
+ Py_DECREF (baseRef);
1034
1064
}
1035
1065
1036
1066
s.opfini ();
@@ -1207,6 +1237,8 @@ void Baseapp::onCreateBaseAnywhereFromDBIDCallback(Network::Channel* pChannel, K
1207
1237
bool success = false ;
1208
1238
bool wasActive = false ;
1209
1239
ENTITY_ID entityID;
1240
+ COMPONENT_ID wasActiveCID;
1241
+ ENTITY_ID wasActiveEntityID;
1210
1242
1211
1243
s >> entityType;
1212
1244
s >> dbid;
@@ -1215,23 +1247,49 @@ void Baseapp::onCreateBaseAnywhereFromDBIDCallback(Network::Channel* pChannel, K
1215
1247
s >> entityID;
1216
1248
s >> wasActive;
1217
1249
1218
- if (!success )
1250
+ if (wasActive )
1219
1251
{
1220
- ERROR_MSG (fmt::format (" Baseapp::createBaseAnywhereFromDBID: create {}({}) is failed.\n " ,
1221
- entityType.c_str (), dbid));
1252
+ s >> wasActiveCID;
1253
+ s >> wasActiveEntityID;
1254
+ }
1222
1255
1256
+ if (!success)
1257
+ {
1223
1258
if (callbackID > 0 )
1224
1259
{
1225
1260
SCOPED_PROFILE (SCRIPTCALL_PROFILE);
1226
1261
1227
- Py_INCREF (Py_None);
1262
+ PyObject* baseRef = NULL ;
1263
+
1264
+ if (wasActive && wasActiveCID > 0 && wasActiveEntityID > 0 )
1265
+ {
1266
+ Base* pBase = this ->findEntity (wasActiveEntityID);
1267
+ if (pBase)
1268
+ {
1269
+ baseRef = static_cast <PyObject*>(pBase);
1270
+ Py_INCREF (baseRef);
1271
+ }
1272
+ else
1273
+ {
1274
+ baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1275
+ }
1276
+ }
1277
+ else
1278
+ {
1279
+ ERROR_MSG (fmt::format (" Baseapp::createBaseAnywhereFromDBID: create {}({}) is failed.\n " ,
1280
+ entityType.c_str (), dbid));
1281
+
1282
+ baseRef = Py_None;
1283
+ Py_INCREF (baseRef);
1284
+ }
1285
+
1228
1286
// baseRef, dbid, wasActive
1229
1287
PyObjectPtr pyfunc = pyCallbackMgr_.take (callbackID);
1230
1288
if (pyfunc != NULL )
1231
1289
{
1232
1290
PyObject* pyResult = PyObject_CallFunction (pyfunc.get (),
1233
1291
const_cast <char *>(" OKi" ),
1234
- Py_None , dbid, wasActive);
1292
+ baseRef , dbid, wasActive);
1235
1293
1236
1294
if (pyResult != NULL )
1237
1295
Py_DECREF (pyResult);
@@ -1243,6 +1301,8 @@ void Baseapp::onCreateBaseAnywhereFromDBIDCallback(Network::Channel* pChannel, K
1243
1301
ERROR_MSG (fmt::format (" Baseapp::createBaseAnywhereFromDBID: can't found callback:{}.\n " ,
1244
1302
callbackID));
1245
1303
}
1304
+
1305
+ Py_DECREF (baseRef);
1246
1306
}
1247
1307
1248
1308
s.opfini ();
0 commit comments