[SSGM 4.0 Plugin] NoC4DefuseOnLeave [message #467862] |
Thu, 24 May 2012 01:03 |
iRANian
Messages: 4308 Registered: April 2011
Karma: 0
|
General (4 Stars) |
|
|
This plugin will change the way Proxy C4 work so they don't get defused after their owner/planter leaves the game. It does this by setting the PlayerDataClass member variable of C4GameObj to NULL after a Proxy C4 has been created and setting the owner to NULL after he left the server. Info about Proxy C4 and their owner is kept and when a player rejoins, their ownership of a Proxy C4 will be restored. Whitedragon and I did some research on changing ownership of mines and Whitedragon also give me crucial help and feedback to get this plugin working.
It's important to check if any server-side mods you're running checks for NULL C4 ownership and a NULL PlayerDataClass member viariable of C4GameObjs, if they access these member variables. I'm also not sure if there are any unusual side-effects caused by this plugin, during testing nothing weird was noticed. This plugin breaks C4GameObj::Restore_Owner() for Proxy C4 so it implements its own version of it. (The function will update the GameObject that owns the Proxy C4 by checking the PlayerDataClass member variable after the owner dies, but because this plugin sets that PlayerDataClass member variable to NULL that doesn't work.)
To install place 'NoC4DefuseOnLeave.dll' in your FDS' root folder and add an entry for it under the [Plugins] section of ssgm.ini.
Thanks to:
Whitedragon - figured out how to change C4 ownership together and gave me important help with writing this plugin.
jonwil - Helped me with a design issue that was bugging me a lot.
Long time and well respected Renegade community member, programmer, modder and tester.
Scripts 4.0 private beta tester since May 2011.
My Renegade server plugins releases
|
|
|
|
Re: [SSGM 4.0 Plugin] NoC4DefuseOnLeave [message #491984 is a reply to message #467862] |
Fri, 10 February 2017 13:44 |
|
Nice plugin. One thing though, you dont need (and for various reasons shouldn't be using) that ASM block in there. Just do C4->Owner = obj; (or whatever) and the scripts code will do the rest thanks to our implementation of ReferencerClass::operator=
Jonathan Wilson aka Jonwil
Creator and Lead Coder of the Custom scripts.dll
Renegade Engine Guru
Creator and Lead Coder of TT.DLL
Official member of Tiberian Technologies
|
|
|
Re: [SSGM 4.0 Plugin] NoC4DefuseOnLeave [message #491985 is a reply to message #467862] |
Sat, 11 February 2017 00:57 |
dblaney1
Messages: 358 Registered: March 2014 Location: United States
Karma: 0
|
Commander |
|
|
I removed the cloned c4gameobj stuff and redid it without the asm code as well. To use this though you are gonna need to modify dac4beacon.cpp a tiny bit or it will crash when a proximity mine detonates. This occurs on both the asm and the redone version. Its because references a null pointer. Just replace this one function with this tweaked one that uses Get_Player_Name(get_owner()) to get the name of the player instead of playerdata. This needs to be fixed in a few different spots.
void DAC4BeaconManager::C4_Detonate_Event(C4GameObj *C4) {
if (C4->Get_Owner()) {
DALogManager::Write_Log("_C4","%ls %s has detonated (Attached to: %s)",Make_Possessive((StringClass)Get_Player_Name(C4->Get_Owner())),DATranslationManager::Translate(C4),C4->Get_Stuck_Object()?DATranslationManager::Translate(C4->Get_Stuck_Object()):"None");
}
}
I also attached the fixed da_c4beacon.cpp. It fixes all the issues regarding beacons and c4 with no playerdata.
[Updated on: Sat, 11 February 2017 18:27] Report message to a moderator
|
|
|
|
|
Re: [SSGM 4.0 Plugin] NoC4DefuseOnLeave [message #491988 is a reply to message #491987] |
Sat, 11 February 2017 15:59 |
dblaney1
Messages: 358 Registered: March 2014 Location: United States
Karma: 0
|
Commander |
|
|
iRANian wrote on Sat, 11 February 2017 13:25 | r u running it on your test server
And we did the ASM thing back then because the function wasn't exported in TT 4.0. so it was a quick hack, but as jonwil said it's the improper way to do it.
|
Yup its on my test server. Its also on my other server ImperialAge AOW. The version I posted has all the hacky parts removed and replaced with the proper TT functions.
[Updated on: Sat, 11 February 2017 15:59] Report message to a moderator
|
|
|
|
|
Re: [SSGM 4.0 Plugin] NoC4DefuseOnLeave [message #492361 is a reply to message #467862] |
Mon, 08 May 2017 01:34 |
|
Gen_Blacky
Messages: 3250 Registered: September 2006
Karma: 1
|
General (3 Stars) |
|
|
added DisarmTime disarm unowned proxy's after 10 minutes if the c4 has not been claimed or the player returns.
added the ability for players to disarm unowned proxy's or obtain ownership of that proxy. As well as allowing players to disarm their own proxy.
Settings
; Enable No C4 Defuse on Leave
EnableNoC4DefuseOnLeave = 1
; Enable Disarm Time on Leave
Disarm = 1
; Time in seconds to disarm unowned proxys; Default 10 minutes
DisarmTime = 600.0
; Obtain Ownership when you press E on unowned proxy
PokeOwnership = 1
; Disarm when you press E on unowned proxy
PokeDisarm = 0
; Obtain Ownership when you repair an unowned proxy
AttackOwnership = 1
; Disarm when you repair an unowned proxy
AttackDisarm = 0
; Allow players to disarm their own proxy when pressing E or repairing
OwnerProxyDisarm = 1
|
|
|