(Guild) Antagonism System

Alexandria

New member
Messages
341
Points
0
Location
localhost
Hello you guys.
 
How can I enable the antagonism system, so members of rival guilds (set by Guild leaders, maybe 3 foes maximum) can attack each other anytime, anywhere (except in towns). The main difference with Global PvP (PK server type) is that if someone is un-guilded or member of a guild not flagged as 'FoE' then this person cannot attack/be attacked.
 
Thank you.

 
Last edited by a moderator:
Hello you guys.

How can I enable the antagonism system, so members of rival guilds (set by Guild leaders, maybe 3 foes maximum) can attack each other anytime, anywhere (except in towns). The main difference with Global PvP (PK server type) is that if someone is un-guilded or member of a guild not flagged as 'FoE' then this person cannot attack/be attacked.

Thank you.
Good Idea

 
My suggestion differs from  Lilith's incredible (but sadly abandonned) script; biggest difference being  Antagonism system is based on something natively implemented in RO (as a guild leader, right-click on someone from another guild and "set his guild as antagonist). The "Antagonists" interface  (CTRL+G) could finally be useful.

 
Last edited by a moderator:
My suggestion differs from  Lilith's incredible (but sadly abandonned) script; biggest difference being  Antagonism system is based on something natively implemented in RO (as a guild leader, right-click on someone from another guild and "set his guild as antagonist). The "Antagonists" interface  (CTRL+G) could finally be useful.
Interesting Sir. 

 
writing this as patch is just a few line

src/map/battle.c | 7 +++++++ 1 file changed, 7 insertions(+)diff --git a/src/map/battle.c b/src/map/battle.cindex 24f39a3..3d3284e 100644--- a/src/map/battle.c+++ b/src/map/battle.c@@ -6020,6 +6020,13 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( (s_bl = battle->get_master(src)) == NULL ) s_bl = src; + if ( s_bl->type == BL_PC && t_bl->type == BL_PC ) {+ TBL_PC *sd = BL_CAST( BL_PC, s_bl );+ TBL_PC *pl_sd = BL_CAST( BL_PC, t_bl );+ if ( guild->check_alliance( sd->status.guild_id, pl_sd->status.guild_id, 1 ) && !map->list[sd->bl.m].flag.town && !map->list[sd->bl.m].flag.nowarpto )+ return 1;+ }+ if ( s_bl->type == BL_PC ) { switch( t_bl->type ) { case BL_MOB: // Source => PC, Target => MOBits more fun to make this as pluginhttp://upaste.me/28fd11097df8e9a10

 
Last edited by a moderator:
writing this as patch is just a few line
for alliance we got guild_alliance table, doesn't we need a new table for this
default_tongue.png
if client can really handle this, I suggest the creation of the whole system and release it as plugin
default_tongue.png


 
Last edited by a moderator:
isn't the plugin is just below the code ?

and there is no need to read the sql table, its not like this stuff is run when the player is offline

to actually hit the player, both the source and target has to be online, so just use guild->check_alliance with enemy flag to read them

make the script shorter a bit

src/map/battle.c | 6 ++++++ 1 file changed, 6 insertions(+)diff --git a/src/map/battle.c b/src/map/battle.cindex 24f39a3..52b24ec 100644--- a/src/map/battle.c+++ b/src/map/battle.c@@ -6020,6 +6020,12 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( (s_bl = battle->get_master(src)) == NULL ) s_bl = src; + if ( s_bl->type == BL_PC && t_bl->type == BL_PC ) {+ TBL_PC *sd = BL_CAST( BL_PC, s_bl );+ if ( guild->check_alliance( sd->status.guild_id, ((TBL_PC*)t_bl)->status.guild_id, 1 ) && !map->list[sd->bl.m].flag.town && !map->list[sd->bl.m].flag.nowarpto )+ return 1;+ }+ if ( s_bl->type == BL_PC ) { switch( t_bl->type ) { case BL_MOB: // Source => PC, Target => MOB
http://upaste.me/28fd11097df8e9a10

you know ... I start to think that lilith's faction system can actually be release entirely with plugins ..

 
isn't the plugin is just below the code ?

and there is no need to read the sql table, its not like this stuff is run when the player is offline

to actually hit the player, both the source and target has to be online, so just use guild->check_alliance with enemy flag to read them

make the script shorter a bit

src/map/battle.c | 6 ++++++ 1 file changed, 6 insertions(+)diff --git a/src/map/battle.c b/src/map/battle.cindex 24f39a3..52b24ec 100644--- a/src/map/battle.c+++ b/src/map/battle.c@@ -6020,6 +6020,12 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( (s_bl = battle->get_master(src)) == NULL ) s_bl = src; + if ( s_bl->type == BL_PC && t_bl->type == BL_PC ) {+ TBL_PC *sd = BL_CAST( BL_PC, s_bl );+ if ( guild->check_alliance( sd->status.guild_id, ((TBL_PC*)t_bl)->status.guild_id, 1 ) && !map->list[sd->bl.m].flag.town && !map->list[sd->bl.m].flag.nowarpto )+ return 1;+ }+ if ( s_bl->type == BL_PC ) { switch( t_bl->type ) { case BL_MOB: // Source => PC, Target => MOB
http://upaste.me/28fd11097df8e9a10

you know ... I start to think that lilith's faction system can actually be release entirely with plugins ..
wetwew.

I am not spamming I just cant say anything..

 
AnnieRuru,

First of all, thanks for this amazing mod.

Now, here is the feedback and a few questions/suggestions I've come into:

1- Is it possible to activate the Antagonism system without activating "alliance", thus providing a total War
between guilds? (at the moment the system won't let you add any guild as antagonist if your turned guild alliance settings to 0 in conf/battle/guild.conf)

2- The moment a guild flags another one as antagonist, it should be equally flagged as antagonist in
the other guild's books too. at the moment one guild can add another foe and start grieffing its members without any reciprocity (abuse-able). Which means, if one of these 2 guilds counts too many FoEs already (3); they can't flag / be flagged antagonist until they get a free slot again

3- Is it a possible to fight without pressing Shift or typing /ns command?

Thanks a lot, in its actual form, this script is already great !
 

 
Last edited by a moderator:
1. possible by implementing as a script command

but I don't think its possible to list more than 3 ...

the client not able to list the 4th one when invite the 4th antagonist guild

2. I think its possible ... just need an extra check the opponent guild already has max antagonist guild

3. I think its possible ...

just turn on the pk_mode, and everyone cursor will automatically become a sword

because with pk setting on ... every map is a pvp map except with the pvp off mapflag

and this kind of modification ... large as hell

I don't consider this as a release ... is more like a project

why not just turn on the pk_mode ?

 
Last edited by a moderator:
I'm sorry for being a bit  pushy with the #3 question
default_smile.png
#1 and #2 were interesting and made sense tho; would you mind help with these ? (about #1-  3 guilds maximum is perfect, that was my former request). Thanks for sharing your skills with us.

 
1- Is it possible to activate the Antagonism system without activating "alliance", thus providing a total War

between guilds? (at the moment the system won't let you add any guild as antagonist if your turned guild alliance settings to 0 in conf/battle/guild.conf)

 

2- The moment a guild flags another one as antagonist, it should be equally flagged as antagonist in

the other guild's books too. at the moment one guild can add another foe and start grieffing its members without any reciprocity (abuse-able). Which means, if one of these 2 guilds counts too many FoEs already (3); they can't flag / be flagged antagonist until they get a free slot again
1. possible by implementing as a script command

but I don't think its possible to list more than 3 ...

the client not able to list the 4th one when invite the 4th antagonist guild

2. I think its possible ... just need an extra check the opponent guild already has max antagonist guild
These 2 ideas are definitely great; hope the great Annie can get this to work
default_smile.png


 
Hey~

Any news regarding this please
default_smile.png
?

2- The moment a guild flags another one as antagonist, it should be equally flagged as antagonist in
the other guild's books too. at the moment one guild can add another foe and start grieffing its members without any reciprocity (abuse-able). Which means, if one of these 2 guilds counts too many FoEs already (3); they can't flag / be flagged antagonist until they get a free slot again
 Allow me to expose a little scenario to demonstrate the essential use of such a feature:

X Guild meets members of Y Guild in a random field.

X's leader flags Y's as antagonists and X men start killing Y members.

Problem:

Y men can't hit back because their leader hasn't flagged X Guild as Antagonist yet

Solutions:

Option 1: Reciprocity check (This option works almost identical to the official "Alliance" guild system;except in case of antagonism, no need to ask for confirmation):

If X adds Y antagonist, then X gets automatically flagged as antagonist in Y's books too.

If Y has the maximum amount of Antagonists allowed already,then X can't flag Y antagonist.

Reciprocity would also work the opposite way: If X takes Y out of antagonist list, X is also taken out of Y's antagonist list.

About allies, they shouldn't be taken into account in this system imo, this would make things way too complicated.

Z can't attack/can't be attacked by X just because Z is Y's ally.

Z would have to flag X as Foe to be able to fight it (therefore Antagonism system may not apply if X's Antagonist limits have already been reached) 

Option 2: Announcement

When X adds Y as Antagonist, there would be a self_broadcast to online members of both guilds saying "New Foe has been added !" (maybe with red letters for more visibility).

So at least, if the 1rst option can't be done, at least people get warned.

Option 3: Combo

Option 1+ option 2 (would be fantastic)
default_smile.png


Why not turning the whole server PK ?:

Not everyone likes PK servers, some people enjoy PvE/Quest aspect of the game and may dislike being randomly killed in fields.

The good thing about this antagonism system is it allows people from specific rival guilds to kill each other even outside of PvP without harming anyone else around
default_biggrin.png
(for instance party members not guilded in any of the rival guilds)

This should enhance the guild hatred/rivalry in a great fashion, without any external plugin/script but just using something native in Ragnarok.

 
I actually wanna bump this topic as it is interesting and something I would like to have xD. (Along with Lilith Faction system, gonna find a topic and bump it or make a new one D:).

Edit: I managed to make it cross-check both guilds before adding a target guild as an antagonist, and then add it to both guilds. (Granted I couldn't get it to work with a hook, some error regarding symbol setting....)

Now I must ask for something final that I would like to add, would it be possible to set a " time-limit " before either guild removes one another from the antagonist list? I know we can check for WoE/WoE2 but how about putting a short cd of like 24hours or something. Also, I can't seem to figure out how to remove both guilds from each others antagonist list, if one of the guilds does this.

(ex: Guild A removes Guild B from list. Then Guild B's list will remove Guild A).

 
Last edited by a moderator:
awww .... give me a break

@GmOcean

need problem with hooking ? just post the script in source support and someone might answer

and yes, everything is possible with plugin for this system, as guild.c is under srcmap folder

so just hook the guild->xxxx function that you think it might work

guild->delalliance ... {

clif->guild_delalliance ... guild B

}

@Luffy

kro has this

http://herc.ws/board/blog/1/entry-48-a-peek-on-clans/

don't ask me, go ask Ind

 
Back
Top