rcbot_const_mstr_offset needs updating? |
rcbot_const_mstr_offset needs updating? |
JRob |
Aug 26 2015, 12:52 AM
Post
#1
|
Advanced Member Group: Members Posts: 52 Joined: 30-April 11 Member No.: 1,970 |
I tried playing around with rcbot again and it keeps crashing at
CTeamControlPointRound *CTeamControlPointMaster:: getCurrentRound () CBaseEntity *pent = m_ControlPointRounds[m_iCurrentRoundIndex]; So I took a look at what that was and apparently, CTeamControlPointRound is found through dark hackery and the magic number at rcbot_const_mstr_offset. Can you update this? Or also tell people how to find these offsets? |
Nightc0re |
Aug 27 2015, 12:14 PM
Post
#2
|
Advanced Member Group: Moderator Posts: 58 Joined: 10-July 15 From: Austria Member No.: 2,397 |
as far as I know there should be no problem with the offset right now Regarding the offset bug, I was referring to the version 0.98. I don't have tested the offset behaviour with 0.96 or a newer version than 0.98 then add the offset between the start point and CUtlMap<int, CTeamControlPoint *> m_ControlPoints . which last time was 844 It's probably only moved by 4 bytes or in increments of 4 I usually debug this by running through a debugger -- changing the offset and vieweing the resulting CTeamControlPoint that I made to see if it makes sense, then just keep the offset like that Don't have much time to explain more -- hope it's enough for now I was using this little algorithm on the map "cp_dustbowl" to find the offset. CODE void CTeamFortress2Mod::updatePointMaster() { if ( m_PointMasterResource.get() == NULL ) { edict_t *pMaster = CClassInterface::FindEntityByClassnameNearest(Vector(0,0,0),"team_control_point_master",65535); if ( pMaster ) { extern ConVar rcbot_const_point_master_offset; CBaseEntity *pent = pMaster->GetUnknown()->GetBaseEntity(); unsigned long mempoint = ((unsigned long)pent)+rcbot_const_point_master_offset.GetInt(); //m_PointMaster = (CTeamControlPointMaster*)mempoint; //m_PointMasterResource = pMaster; for (int i = 800; i < 900; ++i) { unsigned long mempoint = ((unsigned long)pent) + i; m_PointMaster = (CTeamControlPointMaster*)mempoint; m_PointMasterResource = pMaster; int idx = m_PointMaster->m_iCurrentRoundIndex; int size = m_PointMaster->m_ControlPointRounds.Size(); // for cp_dustbowl if (idx >= 0 && size == 3) { CBotGlobals::botMessage(NULL, 0, "rcbot_const_point_master_offset: %d", i); break; } } } } if ( m_PointMaster != NULL ) { m_pCurrentRound = m_PointMaster->getCurrentRound(); } } Using this method I got an offset of 864 for Linux, and 844 for Windows. I retrieved this on 15th of July, 2015. Have a nice day Best regards |
Cheeseh |
Aug 27 2015, 01:27 PM
Post
#3
|
Admin Group: Admin Posts: 3,055 Joined: 11-September 03 From: uk Member No.: 1 |
yep I'm guessing Linux one needs updating. Cheers
|
Lo-Fi Version | Time is now: 28th March 2024 - 08:13 AM |