Who to blame?
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
Good maps being remade to crap.
Bad maps being remade to even worse.
HX/HA
1-shot-machines (body shots)
Do you think the new KoTF (King of the Flag, huehue) system is a good way to counter that tho?
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
Who to blame?
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
Removed older more fitting armor textures?*cough*black armour *cough*
Number of useless threads increasing. Why?
The melee server died out on its own long ago.
*cough*black armour *cough*
Thanks for reminding me to check [More Stats] forum section. But I must inform you something horrible has happened, I'm on Top 10 respected list... with 4666 score... mod has really gonne to hell!
Who to blame?
I HARDLY PLAY ANYMORE CUZ I STARTED DRINKING AGAIN
It's fine atm, but if they remove double XP and something new and fresh comes out I'll be playing this mod by myself on an almost empty server.Don't worry Leshma, I'll come to HS you :twisted:
....within these lines i see some truth.
And the biggest reason imo is that they have slowed down the game sooooo much. Melee combat is slowed down to hell compared to Native vanilla. Horses speed are slowed down to hell and beyond. Every newbie can block easily nowadays and the the combat doesn't flow as great as it used to.
It's almost like they made these changes for old people who are too slow to react and want to fight slow and boring fights.
1. Strategus, people putting too much effort into it after which they get burned out and quit crpg all together. It also quite well kills all community events (i cant participate, strat battle at 8pm etc.). Plus all the drama it generates makes mod less appealing in the long run to some at least others love that type of drama.
give me a diplomatic system in strategus, narrow down the economical adavantages of huge factions, so i and others dont feel the need so much to carebear, action point system so those who organize stuff can do so in a restricted way also for others
2. ... changes in map rotation takes too long.
this and the variety perhaps has to be increased ^^ no thats not the same, new maps not only rotation the old once
HA, HX, kiting archers, oneshotting throwers and crossbows? :Pthat without hesitation
...this also would help
When new players show up anyone who wants to see this mod survive a bit longer should help and welcome them, not abuse them or just tell them to "fuck off to forum noob" when advice is asked for which is far too common. Basically dont be a sad unfriendly twat, and if you are such a pathetic example of humanity you cant be civil to someone less skilled than you at an utterly meaningless computer game at least keep quiet.
I blame people not being patient enough to learn how to play and get everything set up correctly, not anything related to the game itself really. This game is still a blast.That was always the case with this game, it has a high level of frustration built in for different aspects, those are partly why we love/hate this game so much and mayn coe mback again and again to it. Once a player has overcome a certain treashold of frustration, he is hooked ... for eternaty.
Also if we would get a positive answer on the question, will cRPG/strategus be converted to M&B2?(positiv answer being yes)
No matter who the devs then would be then, it would help to gain and hold community members for the future.
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
HA, HX, kiting archers, oneshotting throwers and crossbows? :P
World of Tanks and Xcom
HA, HX, HT, kiting archers, tank cav fest, oneshotting throwers andcrossbowsarbalests? :P
Stop blaming ranged you bunch of whiny rager.... :lol:
All the melee only server died in less than 2 weeks.. :rolleyes:
..., archery is fine (best archer on eu - Bagge have K/D 3.2:1, it's not amazing) And we should remember that he and also I are hi lvls with tons of experience.Level:36
You play more than ever these days, Kafein. Is everything fine with you?
Maybe we could do a "bring a friend" campaign, if he signs up using your link, you'll get 100k when he reaches level 30.
Maybe we could do a "bring a friend" campaign, if he signs up using your link, you'll get 100k when he reaches level 30.
im not sure if crossbows need to be nerfed too
(click to show/hide)
My solution: I joined with HA
Gay :P
If I had to guess, one reason we don't very many new players is because the leveling/retiring system is atrociously fucking boring.I'm lobbying for serious speed-up, but no one cares. Maybe because this mod has way too many german players and others with similar mindset. Players describing their playing experience with words such as work and effort.
... playing experience with words such as work and effort.who says that way cant be fun,too :oops:
who says that way cant be fun,too :oops:
also look at your renown/infamy counter, then you know what it means to put work and effort into something and at least i am like "wtf is that dude doing all day long" :lol:
Remove pierce on bodkin arrows.
Problem solved, its what started the range fest in the first place. :wink:
cuz they're bad players and they dont know how to block.but the thing is, they're not good at archery either :) ban all the archers who can't make it in the 15 on the scoarboard(after the last patch its not hard ). that'll solve the annoying ranged numbers
I don't understand why this class is that attractive, we got an amazing melee gameplay, but shooting peoples in this game is like in any other game.
if ranged stagger gets made so it only happenens when 25% damage or more happens
I already suggested to do one simple thing in others thread.
ATM HA have insane mobility because of using horse and same shooting speed as foot ranged.
I suggest to nerf a bit bows speed rating while using on horseback. It have been done to HX, so why not to HA?
Being HA have only benifits of mobility compared to foot archers. I thing that taking arrow from quiver, putting it on string, draw and aim is harder while sitting on riding horse than on foot...
Horse archers irl can shoot quite fast(click to show/hide)
Everyone complains how ranged is the most evil of evil. Yet completely ignores the agi whoresRanged kill them before we even meet them in battle.
Ranged kill them before we even meet them in battle.and really often before you know about their existance. Bolt from nowhere is common thing killing or hard wounding ppl :)
3. stop buffing shielders they are not the answer to ranged
Sure, lets buff 2H instead.
Seriously man...
who said anything about 2h? you have no idea what you talking about as usual
Oh, and the best counter to ranged is still ranged :rolleyes:
As it should be. The thing is that the awful team balance Ruins it. If it were proper team balance for the classes we wouldnt have this problem.
Nerfing everything to the ground isnt the solution
Ok, no more dedicated ranged. Next step we make it so that horses can only be used by mounted infantry for transportation. No more fighting on horseback. Maybe shields shouldn't be usuable in a fight either - only for sliding down hills.
Haven't played battle for awhile so I dunno what kind of archers play there. On siege we have Druzhina and Grey archers, combined with Quincy's. Most of them can't block. Actually they can block, but only long and slow weapons. They can't block warhammer, that's for sure.And from this you can derive the argument that pierce is too effective, can't you? Remember, damage values weren't changed, the only thing that was changed, is that the score reward is now directly proportional to the actual damage you deal, rather than imaginary damage that gets soaked by armor. It's fascinating how you can mold player perspectives on effectiveness, through rewards alone.
Recent change to score is just another buff to pure archers. Since there's no decent blunt/pierce 0 slot weapon and for siege you need two quivers, archers are forced to use cut weapons. But with this change, cut damage isn't good for score. Also archers don't get as many points from standing near the fight and fighting themselves. Now it's best to stay at distance and shoot pierce arrows.
ATM HA have insane mobility because of using horse and same shooting speed as foot ranged.Check this one out Steeve: http://atarn.net/, you can learn more about asian archery; the thumb draw and how it enhances horse archery and foot archery speed. If you have questions, I can gladly help you as well, as I practice thumb draw irl ...
I suggest to nerf a bit bows speed rating while using on horseback. It have been done to HX, so why not to HA?
Being HA have only benifits of mobility compared to foot archers. I thing that taking arrow from quiver, putting it on string, draw and aim is harder while sitting on riding horse than on foot...
The upkeep system has its uses. It does hit people in the pocket so you tend to get fewer of things you don't necessarily want to nerf outright.
It allows for a bit more realism in the design, so if you want heavy armour to behave like heavy armour you could make it very expensive so you only really get a few of them per team etc. Otherwise you would need literal or class limits which I don't think they can do.
I do like that theres a market and economy, it feels more like an RPG with things to worry about or plan for besides the current game session
Saying that though there is some arbitrary upkeep price attached to most weapons atm. We basically have a "trash" rank and a "decent weapon" rank were the upkeep is just a random number. Anything over like 4-7k is usually as good as each other in one way or another. I don't know if its worth changing much atm though, maybe reduce the cost on the more costly weapon types.
I really like Battle mode and don't really see why we should ruin a whole game mode just because people want to be "fair" and say that everything is balanced and should never be nerfed. We simply need a good counter to ranged classes that doesn't involve throwing or shooting projectiles, and we need to give good reasons to players NOT to play ranged. This can be upkeep, paying per shot, weight, no melee weapon (lol, imagine ranged get the same situation as melee do vs ranged)
We just need to stop pussy footing around the issues and get balancers with some wherewithal (balls) to do what needs to be done, without worrying about people who can't play without left clicking on guys from a safe distance
We just need to stop pussy footing around the issues and get balancers with some wherewithal (balls) to do what needs to be done, without worrying about people who can't play without left clicking on guys from a safe distance
We just need to stop pussy footing around the issues and get balancers with some wherewithal (balls) to do what needs to be done, without worrying about people who can't play without left clicking on guys from a safe distance
Or we need balancers who tell users with outright retarded opinions that they are wrong and that they won't remove classes because of a hurt superiority complex.Both seem like opposite extremes on the same spectrum that seem to be ignoring the fact that a middle ground even exists.
Lots of good from this post. Unfortunately a lot of it isn't really feasible at the moment.(click to show/hide)
I think there is no use in blaming anybody. It's more or less a natural process.
And the real reason I think this mod is declining wasn't in this list. It was not the balancers, they only got blamed by everyone who doesn't understand anything of game design.
The problem is lying the the game mode (you knew this one would come) in combination with the one-dimensional system they implemented for equipment and skills. The upkeep system itself is incredibly bad, I still can't manage to find words after all these years. The moment it got announced I knew it was going to be bullshit, and I was right. But I never would have expected that people who are able to program all the amazing features cRPG has would be stupid enough to implement a marketplace, effectively removing their upkeep system and replacing it with nothing but endless grind and a lot of scamming. So bottom line we have a relatively uninspired skill system from M&B, almost no equipment limitation at all, and a system which heavily favorizes clan stacks.
If cRPG would have a system where your items are always persistent and not limited somehow by the money you have, time you can afford to use them, and the performance on your team, and which would have a tradeoff between having good skills or good equipment or a mixture of both, and where the reward system would not be as retarded as the multiplier is, and instead be a mixture of rewarding your personal performance (not only kill wise) but also the performance of your team in a game mode which does not base only upon killing all enemies and thus heavily favorizing ranged and mounted classes, leaving melee infantry to be the fool on the battlefield, forcing the balancers to ridiculously nerf all other classes to give infantry not an absolutely horrible gameplay and still failing in the attempt, and being blamed by everybody for trying to fix something they have not broken...
*taking breath*
... then cRPG would have lived a bit longer, I presume.
Or we need balancers who tell users with outright retarded opinions that they are wrong and that they won't remove classes because of a hurt superiority complex.
-Battle, spend the whole round chasing mounted ranged, then die and watch grass grow for several minutesWell, DTV is probably a better game mode to choose for those who like to chase mounted ranged.
I dunno, but could be nice with a player count thingy like we did in the past, an check activity, cause to me the game doesn't feel like its dying.
The "retirement of elders", I truly believe oldest players were tricked to leave the game with a couple of looms, as they found it the only way to get away from seeing their good old character investments are not worth playing anymore. I blame devs for this directly. You lost a good bunch of good and skilled players.
-Rageball, never played it, but it sapped development resources that could have been used for a "real" game mode
There are no "development resources". People work on this mod when they have fun doing it or not at all. The only things rageball did was giving 2 devs a bit more proficiency&confidence with using the MS and having cmp add more operations for us to use in it. That is a good thing. Playing it gave me lot of fun, xp and gold though and I don't think I am alone with that.
I don't understand this, care to explain a bit better?
Sure. Have a look at the hall of fame in the tavern, these are the people I'm talking about. I cannot say all of course, but many of them left the game by doing this ridiculous retirement bonus. They left because their long time character builds were either made useless by nerf after anoter, or they were bored. Maybe devs thought that this was a good way to encourage these old players to start all over again because their characters are useless now. But I guess it didn't work out as planned for many of them, as they left the game for good, distributing their looms even for free.
It started a wave for retiring and people couldn't dare to start all over again. Community lost many of its old, reasonable and skilled players. That was what I was trying to say ...
I dont :D Massive cav stacks who specialize in spawn raping people with slow pcs or late starters was worse than any mass ranged :DNo, no, no. Totally opposite! Mass ranged way worse than mass cav.
Studies, work, family, band.
Yeah I agree, also they ride with their arrows in left hand rather than quiver. Imagine holding 20 arrows in your bow hand...
I was just using it to illustrate that HA can fire fairly quickly.
Also what's the poundage on the bow they are using? How much damage is it doing to someone with armor on?
They need to try bring back the mode where you build the defenses as you play and as people get kills/gold more of their own equipment gets unlocked.
Could be a lot of fun. As people get better gear the other team will have to gank them to stop them powering onto full plate.
Perhaps the mode could give no gold only xp and cost say 1k per round... I don't know just spit balling.
Seriously though, it's the same old game from 2010! It's 4 years fucking old, and it's a mod for a 4 year old game that is more or less a rehash of an 8 year old game!
It's basically a miracle it's lasted this long.
The only way to keep a game alive is competative. True story
I cba to play cus I feel im wasting my time losing round after round to roflstomp = balance has gone byebye
today merc mod had 100 players!
Merc mod also has one of the whiniest shittiest communities in a mod that I ever witnessed, the players would make up their own rules like round end duels and if I didnt follow their made up rules all my team mates would try to TK me. So I made it my mission to piss them all off in the short time I played the mod, by ruining all their duels in a battle round and playing HA which made them all rage harder than anyone in crpg. Fuck that mod.
...The reason was because there was so much ranged ...
visitors can't see pics , please register or loginseriously, nobody cares you left...
visitors can't see pics , please register or login
:lol:
Thats why we have dtv :D A safeheaven where one can retreat to lick pridewounds and regain confidense :)
Thats why we have dtv :D A safeheaven where one can retreat to lick pridewounds and regain confidense :)Lol, this is so true.
It's ridiculous how tough it is to be a new player in this mod, especially now. I've tried to get some of my buddies to play, even telling them that they'll get destroyed for a LONG time before being able to do anything, but they simply couldn't bare it. I can't even imagine being an individual just now finding out about this mod (through Youtube or something), and trying to play. You'd get dominated so hard and it would really crush any motivation to keep playing. The majority of players still remaining in this mod have been playing for quite some time now, so we're not only ahead of the game skill-wise, we have higher-level characters with loomed gear. It's not like some regular FPS game where you can pick it up pretty quick, we're talking about a rare breed medieval combat game. The learning curve is so steep compared to other games. Most people don't have much or any experience at all with this type of game. We have an insane advantage over them. It's inevitably going to be overwhelming for noobs.
I think a player's first character should start out at level 20 (25?), with 20,000 gold and a display/tutorial, suggesting to try out one of a few popular builds. Maybe 21/18 2H, tell them what character statistics they should select, explain what they mean, suggest medium armor + a bastard sword.
I've thought about this a lot, there's so many things they could do to help out new players. If anything, at least have a message displayed telling them what they're getting into. I feel like some noobs just walk into this mod blindfolded expecting to be a medieval knight ready to take on the world. I've been enjoying these patches and item additions lately, but this kind of change (a change helping new players stick with the mod) is long overdue...
But what do I know, I'm just Testi.
I know alot of ppl would go easy on a new player
Thats why we have dtv :D A safeheaven where one can retreat to lick pridewounds and regain confidense :)
Why is nobody having fucking exams like me? Is everybody either 12 or 40 or are all the students ignoring the forum during the 'bloque'?
Total noobs should have no choice at all when they start the mod for the first time, with the possible exception of choosing a class between 1h, 2h and polearms. After choosing their class, they get a pre-made STF character with pre-selected equipment corresponding to that class. After playing for a while, they unlock the possibility to create a real character.
Choice is meaningless when you don't know the consequences and I think every new player should have to go through a pretty much linear tutorial of sorts to learn all the basics before being forced to make those choices without the necessary knowledge. Gear unlocks would also help with this.
Levelling your character and your gear are pretty important traits in games that want longevity. I think cRPG is just too scewed towards long term players. When you level up your gear you don't lose anything at all, its not like there are any downsides, you don't even pay more upkeep. You should get access to more options by levelling rather than just get more powerful
It takes too long to get a useful character too. Why not start off useful and just get more options or a slight advantage? The advantage from gear and levels is huge atm, and then you add that the game takes a hell of a long time to get anywhere proficient at
seriously, nobody cares you left...
I think there's a place for multiplayer games that are unfair, in the sense that some people are way more powerful than others, in a competitive setting. I mean, people that started back in 2010 like me had fun playing as peasants against knights even though we had very little chances to win those fights. But cRPG is definitely not this anymore, as a crushing majority of players are in the "endgame" stage. Unbalanced power remains fun as long as you aren't the only one (or very few) struggling to kill anything while all the other players are gods.
Or or or....
People could start to use their brain, an group up to counter the clan stackers....
Its really simple, the days of Solo hero cRPG is long gone, so adapt instead of crying OP CLAN STACKERS!!! OP CLAN STACKERS!!! Buuu fuckin hueee....
Or or or....
People could start to use their brain, an group up to counter the clan stackers....
Its really simple, the days of Solo hero cRPG is long gone, so adapt instead of crying OP CLAN STACKERS!!! OP CLAN STACKERS!!! Buuu fuckin hueee....
I really admire your perseverance, Tzar. Despite constantly getting negative feedback every time you open your mouth, you somehow still think it's worth it to speak. You are a modern day hero!
hey wait you are in byz right? so you are lobbying and your argument is not valid
speaking with a byz or merc about change or removal of banner balance is like speaking to Donald trump about cars running on fossil fuel or, lol, Wayne LaPierre about gun bans x)
Bla bla bla...
Yes, always been a fan of this idea. The balancer should just add additional weight for clanned players and balance accordingly, even if this goes so far as making the teams 30 vs 40. I think adding another layer of banner to take classes into account based on wpf and riding skill or even selected equipment can't be impossible to code. First do the banner balance, then the class balance and finally get everything sorted according to the performance/level/gear balance. Allow aggressive adjustments each round. Not a coder, but such a system would be great.(click to show/hide)
ghosting or people not wanting to fight their own clan mates
Class balancing might help. If a clan is raping then stick a load of OP ranged on the other team and that might balance things (in a none-fun way tho)
Something easier to code and would help overall balance would be to give clans a rating. 5 being the top tier clans, going down from their. Banner balance should split the clans up according to power, never having two tier 5s on a same team unless unavoidable. The rating could even be lower the less people on in a given clan, once 4+ players are online the clan has 100% of their rating "applied". The only thing good about steamroll maps is a multiplier, and if this system is getting reworked there is no reason to want to have one sided maps.
I agree that the banner balance system is a nightmare for players who aren't in a clan. I took a look at the code to see if I could do anything, but it's too complicated and long for me.
I agree that the banner balance system is a nightmare for players who aren't in a clan. I took a look at the code to see if I could do anything, but it's too complicated and long for me.
All I see is number of ranged increasing, meaning real players is still declining. :lol:(click to show/hide)
last patch lower population of archers playing c-rpg, only old and most retarded ones like me are still pew pew :Pmost Quincy archers i know of, are not that long in the game then you right? Well they are still playing and topping the board, at least on siege. Perhaps siege is the new Ranged safe haven? like we would think it is supposed to be :lol:
last patch lower population of archers playing c-rpg, only old and most retarded ones like me are still pew pew :P
most Quincy archers i know of, are not that long in the game then you right? Well they are still playing and topping the board, at least on siege. Perhaps siege is the new Ranged safe haven? like we would think it is supposed to be :lol:I'm playing on eu1 only and really there are only afew archers playing there. Why? Most probably because of heavy cav, but at last cav and heavy armor is working as they should against arrows.
I think i die less frequently by headshots, more often then before an arrow sticks out of my head. Then again, there are still often enough headshots :mad:
I will follow the progression of ranged c(o)unts through the servers with a keen eye over the next weeks.
last patch lower population of archers playing c-rpg, only old and most retarded ones like me are still pew pew :P
I'm playing on eu1 only and really there are only afew archers playing there. Why? Most probably because of heavy cav, but at last cav and heavy armor is working as they should against arrows.
...
I wonder you still regularly play this.
There is other things in life...and other games too.... :P
Yeah buts he´s trying to sound like its the end of the world for archers atm for some fucked up reason....
And thats where us spearmen step in and try to cover ur asses :)
#script_cf_crpg_autobalance
("cf_crpg_autobalance", [
(multiplayer_is_server),
(store_script_param, ":type", 1),
#(display_message, "@AB called"),
#(assign, reg1, ":type"),
#(server_add_message_to_log, "@new autobalance start, type:{reg1}"),
(store_script_param, ":param", 2),
(assign, ":switch_player_no", -1),
(try_begin),
(eq, ":type", 0), #type0 = shuffle teams
#check if autobalance is set to 2 - sort by banners
(eq, "$g_multiplayer_auto_team_balance_limit", 2),
(assign, ":type", 3),
(else_try),
(eq, ":type", 1), #type1 = balance teams, in favor of :team_favor
(assign, ":team_favor", ":param"),
#team favor:
#-1 = no team favor
#0 = favor team 0
#1 = favor team 1
(else_try),
(eq, ":type", 2), #type2 = switch player :switch_player_no
#(display_message, "@Type: 2"),
(assign, ":switch_player_no", ":param"),
(assign, ":switch_player_score", -1),
(store_script_param, ":param2", 3),
(assign, ":force_switch", ":param2"),
(try_end),
##calculate the current team levels
(try_begin),
#(this_or_next|eq, ":type", 1), #balance
#(eq, ":type", 2), #switch player
(assign, ":level_team_0", 0),
(assign, ":level_team_1", 0),
(assign, ":player_team_0", 0),
(assign, ":player_team_1", 0),
(assign, ":kd_team_0", 0),
(assign, ":kd_team_1", 0),
(get_max_players, ":num_players"),
(try_for_range, ":player_no", 0, ":num_players"), #t_player1
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0),
(try_begin),
(player_is_active, ":player_no"),
(ge, ":player_no", 0),
(player_get_team_no, ":player_team", ":player_no"),
(is_between, ":player_team", 0, 2), #make sure he is no spec
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 1),
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(assign, ":player_score_plus_death", reg0),
(try_begin),
(eq, ":switch_player_no", ":player_no"),
(assign, ":switch_player_score", reg0),
(try_end),
(try_begin),
(eq, ":player_team", 0),
(neq, ":switch_player_no", ":player_no"), #do not take the switcher player into calc
(val_add, ":player_team_0", 1),
(val_add, ":level_team_0", ":player_score_plus_death"),
(store_add, ":cur_troop", "trp_player0_multiplayer", ":player_no"),
(ge, ":cur_troop", 0),
(troop_get_slot, ":kd", ":cur_troop", slot_troop_crpg_kd_ratio),
(val_add, ":kd_team_0", ":kd"),
(else_try),
(eq, ":player_team", 1),
(neq, ":switch_player_no", ":player_no"),
(val_add, ":player_team_1", 1),
(val_add, ":level_team_1", ":player_score_plus_death"),
(store_add, ":cur_troop", "trp_player0_multiplayer", ":player_no"),
(ge, ":cur_troop", 0),
(troop_get_slot, ":kd", ":cur_troop", slot_troop_crpg_kd_ratio),
(val_add, ":kd_team_1", ":kd"),
(try_end),
(try_begin),
(neq, ":player_score_plus_death", 0), #dont disable the slot by accident
(neq, ":player_score_plus_death", -1),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", ":player_score_plus_death"),
(try_end),
(try_end),
(try_end), #t_player1_end = this checked for levels and assigned each player his value
(try_end),
(assign, "$ab_score_team_0", ":level_team_0"),
(assign, "$ab_score_team_1", ":level_team_1"),
(assign, reg9, -3),
(neq, "$g_multiplayer_auto_team_balance_limit", 0), #if it's 0, return false, then the player selection is used
(neq, "$g_multiplayer_auto_team_balance_limit", 3), #if it's 3, return false, then the player selection is used
(neq, "$g_multiplayer_game_type", multiplayer_game_type_defend_the_village), #don't do any AB in dtv
(assign, ":do_autobalance", 1), #start with assigned autobalance
(try_begin),
(eq, ":type", 1), #type1 = balance teams, in favor of :team_favor
#one team should be in favor - check if the favored team has less level
(try_begin),
(eq, ":team_favor", 0),
(ge, ":level_team_0", ":level_team_1"), #if level0 > #level1 skip autobalance
(assign, ":do_autobalance", 0),
(else_try),
(eq, ":team_favor", 1),
(ge, ":level_team_1", ":level_team_0"), #if level1 > #level0 skip autobalance
(assign, ":do_autobalance", 0),
(try_end),
(try_end),
(try_begin),
(eq, ":type", 2), #type2 = switch player :switch_player_no
(assign, ":do_autobalance", 0), #stop autobalance here, because it's done inside this
#check if the player in question is on the lower leveled team already
(player_get_team_no, ":player_team", ":switch_player_no"),
#(display_message, "@Type 2 AB"),
(try_begin),
(eq, ":player_team", 0),
(gt, ":level_team_0", ":level_team_1"), #if level0 > #level1 do moving
(assign, reg9, 1),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(try_end),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(else_try),
(eq, ":player_team", 1),
(gt, ":level_team_1", ":level_team_0"), #if level1 > #level0 do moving
(assign, reg9, 0),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(try_end),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
#he's a spec
(try_begin), #team-switch disable in siege
(player_get_slot, ":player_previous_team", ":switch_player_no", slot_player_crpg_last_team),
(is_between, ":player_previous_team", 0, 2),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
#(eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
#(display_message, "@Previous team is 0 or 1"),
(try_begin),
(eq, ":player_previous_team", 0),
(assign, reg9, 0),
#(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(player_set_team_no, ":switch_player_no", 0),
#(display_message, "@Moving player to team 0"),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
(eq, ":player_previous_team", 1),
(assign, reg9, 1),
#(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(player_set_team_no, ":switch_player_no", 1),
#(display_message, "@Moving player to team 1"),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(try_end),
(else_try),
(ge, ":level_team_1", ":level_team_0"), #if level1 > #level0 do moving
(assign, reg9, 0),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(try_end),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
(assign, reg9, 1),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(try_end),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(try_end),
(try_end),
(try_end),
(try_begin),
#current situation:
#if type = 0, autobalance = 1
#if type = 1, autobalance = 1 if teams are unfair
#if type = 2, autobalance = 0, player got moved already
(eq, ":do_autobalance", 1),
(assign, ":new_level_0", 0),
(assign, ":new_level_1", 0),
(try_begin),
(eq, ":type", 3), #3(by banners) is very special and checked separately
#a) get all different banners, sort them in b array
(try_for_range, ":array", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_set_slot, "trp_temp_array_a", ":array", 0), #a = if the banner exists or not
(troop_set_slot, "trp_temp_array_b", ":array", 0), #b = the score of the banner
(try_end),
(store_add, ":level_score_halfed", ":level_team_0", ":level_team_1"),
(store_div, ":level_score_halfed_regulars", ":level_score_halfed", 9),
(val_div, ":level_score_halfed", 3),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
(player_get_banner_id, ":banner", ":player_no"),
(try_begin),
(le, ":banner", -1),
(store_random_in_range, ":banner", crpg_banner_number_start, crpg_banner_number_end),
(try_end),
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner"),
(troop_get_slot, ":player_value", "trp_multiplayer_data", ":slot_index"),
(try_begin),
(is_between, ":banner", crpg_banner_number_start, crpg_banner_number_end),
(assign, ":score", ":level_score_halfed_regulars"),
(else_try),
(assign, ":score", ":level_score_halfed"),
(try_end),
(val_add, ":rank", ":player_value"),
(try_begin),
(ge, ":rank", ":score"),
#security mechanism - if one side has more than 50% power, split them
#(val_add, ":banner", 1), #just take the next banner, doesn't matter
(store_random_in_range, ":banner", crpg_banner_number_start, crpg_banner_number_end), #this is better
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner"),
(val_add, ":rank", ":player_value"),
(try_end),
(troop_set_slot, "trp_temp_array_a", ":banner", 1),
(troop_set_slot, "trp_temp_array_b", ":banner", ":rank"),
(player_set_slot, ":player_no", slot_player_crpg_ab_banner, ":banner"),
(try_end),
(try_for_range, ":banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner_id"),
(gt, ":rank", 100),
(assign, ":power", 1),
(set_fixed_point_multiplier, 10000),
(convert_to_fixed_point, ":power"),
(convert_to_fixed_point, ":rank"),
(val_mul, ":power", 11),
(val_div, ":power", 10), #result: 1.1
(store_pow, ":tmp", ":rank", ":power"),
(assign, ":rank", ":tmp"),
(convert_from_fixed_point, ":rank"),
(troop_set_slot, "trp_temp_array_b", ":banner_id", ":rank"),
(try_end),
#(assign, ":assign_players_to_team", 0),
#b) loop through banners, get the one with the highest number
(try_for_range, ":banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_slot_eq, "trp_temp_array_a", ":banner_id", 1),
(assign, ":selected_banner_id", -1),
(assign, ":selected_banner_score", -1),
(try_for_range, ":ranking_banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(neg|troop_slot_eq, "trp_temp_array_b", ":ranking_banner_id", 0),
(troop_get_slot, ":rank", "trp_temp_array_b", ":ranking_banner_id"),
(ge, ":rank", ":selected_banner_score"),
(assign, ":selected_banner_score", ":rank"),
(assign, ":selected_banner_id", ":ranking_banner_id"),
(try_end),
(gt, ":selected_banner_id", -1), #it's valid
(troop_set_slot, "trp_temp_array_b", ":selected_banner_id", 0), #removed from the loop pool
#b2) select the proper team:
(try_begin),
(eq, ":new_level_0", 0),
(eq, ":new_level_1", 0),
(store_current_scene, ":cur_scene"), #assign the start team randomly, based on scene nr
(store_mod, ":assign_players_to_team", ":cur_scene", 2),
(else_try),
(gt, ":new_level_1", ":new_level_0"),
(assign, ":assign_players_to_team", 0),
(else_try),
(assign, ":assign_players_to_team", 1),
(try_end),
#c) highest banner selected, switch all players of this banner to team
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
#(player_get_banner_id, ":banner", ":player_no"),
#banner can now be overridden:
(player_get_slot, ":banner", ":player_no", slot_player_crpg_ab_banner),
(eq, ":banner", ":selected_banner_id"),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(try_begin),
(eq, ":assign_players_to_team", 0),
(val_add, ":new_level_0", ":value"),
(else_try),
(eq, ":assign_players_to_team", 1),
(val_add, ":new_level_1", ":value"),
(try_end),
(player_get_team_no, ":curr_team", ":player_no"),
(try_begin),
(neq, ":curr_team", ":assign_players_to_team"),
(call_script, "script_crpg_switch_player_team", ":player_no", ":assign_players_to_team"),
(try_end),
(try_end),
(try_end),
(assign, "$ab_score_team_0", ":new_level_0"),
(assign, "$ab_score_team_1", ":new_level_1"),
(try_end),
(neq, ":type", 3), #3(banners) is very special and checked before, fail if done
(try_for_range, ":unused", 0, ":num_players"), #t_player1
(player_is_active, ":unused"),
(assign, ":max_score_plus_death", -30000030),
(assign, ":max_score_plus_death_player_no", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(try_begin),
(eq, ":type", 0), #check if it's shuffle command
(gt, ":value", ":max_score_plus_death"),
(assign, ":max_score_plus_death", ":value"),
(assign, ":max_score_plus_death_player_no", ":player_no"),
(else_try),
(eq, ":type", 1), #check if it's autobalance command
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0), #wasnt moved yet
#calculate the team diff
(store_sub, ":level_diff", ":level_team_0", ":level_team_1"),
#divide by 2
(val_div, ":level_diff", 2),
(try_begin),
(gt, ":level_diff", 0), #team0 has higher level
(assign, ":from_team", 0),
(else_try),
(lt, ":level_diff", 0), #team1 has higher level
(val_abs, ":level_diff"),
(assign, ":from_team", 1),
(else_try),
(assign, ":from_team", -1),
(try_end),
#get team
(player_get_team_no, ":player_team", ":player_no"),
(eq, ":player_team", ":from_team"),
(val_sub, ":level_diff", ":value"),
(ge, ":level_diff", 0),
(this_or_next|eq, ":max_score_plus_death", -30000030),
(lt, ":level_diff", ":max_score_plus_death"),
(assign, ":max_score_plus_death", ":level_diff"),
(assign, ":max_score_plus_death_player_no", ":player_no"),
(try_end),
(try_end), #t_player2
#here we now have the highest player
(try_begin),
(eq, ":type", 0), #check if it's shuffle command
(ge, ":max_score_plus_death_player_no", 0),
(store_add, ":slot_index", ":max_score_plus_death_player_no", multi_data_player_index_list_begin),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(assign, reg8, ":value"),
(assign, ":value", ":max_score_plus_death"),
(assign, reg12, ":value"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(player_get_team_no, ":curr_team", ":max_score_plus_death_player_no"),
(try_begin),
(gt, ":new_level_0", ":new_level_1"),
(assign, reg9, 1),
(val_add, ":new_level_1", ":value"),
#checking if he is on the right team
(try_begin),
(neq, ":curr_team", 1),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 1),
(try_end),
(else_try),
(val_add, ":new_level_0", ":value"),
(assign, reg9, 0),
#checking if he is on the right team
(try_begin),
(neq, ":curr_team", 0),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 0),
(try_end),
(try_end),
#(str_store_player_username, s1, ":max_score_plus_death_player_no"),
#(assign, reg15, ":new_level_0"),
#(assign, reg16, ":new_level_1"),
#(assign, reg17, ":curr_team"),
#(server_add_message_to_log, "@autobalanceshuffle: player:{s1}, value:{reg12}, checkvalue:{reg8}, team:{reg9}[old:{reg17}], {reg15}:{reg16}"),
(try_end),
(try_begin),
(eq, ":type", 1), #check if it's autobalance command
(ge, ":max_score_plus_death_player_no", 0),
(store_add, ":slot_index", ":max_score_plus_death_player_no", multi_data_player_index_list_begin),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(assign, reg2, ":value"),
(str_store_player_username, s1, ":max_score_plus_death_player_no"),
#(server_add_message_to_log, "@autobalance: player:{s1}, value:{reg2}"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(player_get_team_no, ":player_team", ":max_score_plus_death_player_no"),
(try_begin),
(eq, ":player_team", ":from_team"),
(eq, ":player_team", 0),
(val_add, ":level_team_1", ":value"),
(val_sub, ":level_team_0", ":value"),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 1),
(else_try),
(eq, ":player_team", ":from_team"),
(eq, ":player_team", 1),
(val_add, ":level_team_0", ":value"),
(val_sub, ":level_team_1", ":value"),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 0),
(try_end),
(try_end),
(try_end),
(try_begin),
(eq, ":type", 0),
(assign, "$ab_score_team_0", ":new_level_0"),
(assign, "$ab_score_team_1", ":new_level_1"),
(else_try),
(assign, "$ab_score_team_0", ":level_team_0"),
(assign, "$ab_score_team_1", ":level_team_1"),
(try_end),
(try_begin),
(eq, ":type", -1), #make the teams even by number
#disabled
#first, check how many are different
(store_sub, ":team_diff", ":player_team_0", ":player_team_1"),
(val_abs, ":team_diff"),
(ge, ":team_diff", 2),
#let's see who to move now...
(try_begin),
(gt, ":player_team_0", ":player_team_1"),
(assign, ":move_from", 0),
(assign, ":move_to", 1),
(store_div, ":average", ":level_team_0", ":player_team_0"),
(else_try),
(assign, ":move_from", 1),
(assign, ":move_to", 0),
(store_div, ":average", ":level_team_1", ":player_team_1"),
(try_end),
#how many? teamdiff/2
#get average from team with more players - done above
(get_max_players, ":num_players"),
(assign, ":move_total_value", 0),
(try_for_range, ":unused", 0, ":team_diff"), #t_player1
(assign, ":move_player_no", -1),
(assign, ":move_player_value", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_from"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(ge, reg0, ":average"), #he is above average - check if we have someone who is lower already
(this_or_next|eq, ":move_player_no", -1),
(gt, ":move_player_value", reg0), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
#now we should have one guy slightly above average -move him, and add his value
(val_add, ":move_total_value", ":move_player_value"),
(call_script, "script_crpg_switch_player_team", ":move_player_no", ":move_to"),
(try_end),
(val_div, ":team_diff", 2),
(store_div, ":average", ":move_total_value", ":team_diff"),
(try_for_range, ":unused", 0, ":team_diff"), #t_player1
(assign, ":move_player_no", -1),
(assign, ":move_player_value", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_to"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(ge, reg0, ":average"), #he is above average - check if we have someone who is lower already
(this_or_next|eq, ":move_player_no", -1),
(gt, ":move_player_value", reg0), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
(try_begin),
(eq, ":move_player_no", -1), #found no suitable match - take the highest player
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_to"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(this_or_next|eq, ":move_player_no", -1),
(gt, reg0, ":move_player_value"), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
(try_end),
#now we should have one guy slightly above average -move him, and add his value
#(val_add, ":move_total_value", ":move_player_value"),
(call_script, "script_crpg_switch_player_team", ":move_player_no", ":move_from"),
(try_end),
(try_end),
#(assign, reg1, ":level_team_0"),
#(assign, reg2, ":level_team_1"),
#(server_add_message_to_log, "@end of autobalance: team1:{reg1}, team2:{reg2}"),
(try_end),
(eq, 0, 1), #break script
]),
#script_cf_crpg_autobalance_get_level
#Input: none
#Output: none
("cf_crpg_autobalance_get_level", [
(store_script_param, ":player_no", 1),
(try_begin),
(store_add, ":troop_no", "trp_player0_multiplayer", ":player_no"),
(troop_get_slot, ":level", ":troop_no", slot_troop_crpg_level),
(gt, ":level", 0),
(val_add, ":level", 5), #add 4 levels to everyone so every player counts higher
(try_begin),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_rabbit),
(val_add, ":level", 25), #in rabbit, people by itself count more
(try_end),
(player_get_score, ":kill_count", ":player_no"),
(player_get_death_count, ":death_count", ":player_no"), #get_death_count
(val_div, ":kill_count", 10),
(val_sub, ":kill_count", ":death_count"),
(val_mul, ":kill_count", 3),
(store_mul, ":player_score_plus_death", ":level", 10),
(val_add, ":player_score_plus_death", ":kill_count"),
#(val_sub, ":player_score_plus_death", ":death_count"),
#(val_mul, ":player_score_plus_death", ":player_score_plus_death"),
(set_fixed_point_multiplier, 10000),
#(val_mul, reg0, 10000),
(troop_get_slot, ":kd", ":troop_no", slot_troop_crpg_kd_ratio),
(val_div, ":kd", 100),
(val_add, ":player_score_plus_death", ":kd"),
(val_max, ":player_score_plus_death", 0),
(assign, ":power", 1),
(convert_to_fixed_point, ":player_score_plus_death"),
(convert_to_fixed_point, ":power"),
(val_mul, ":power", 11),
(val_div, ":power", 10),
(store_pow, ":tmp", ":player_score_plus_death", ":power"),
(assign, ":player_score_plus_death", ":tmp"),
(convert_from_fixed_point, ":player_score_plus_death"),
(assign, reg0, ":player_score_plus_death"),
(try_begin),
(player_get_team_no, ":team", ":player_no"),
(is_between, ":team", 0, 2),
(team_get_score, ":this_team_score", ":team"),
(store_sub, ":enemy_team", ":team", 1),
(val_abs, ":enemy_team"),
(team_get_score, ":enemy_team_score", ":team"),
(val_sub, ":this_team_score", ":enemy_team_score"),
(lt, ":this_team_score", 0),
(val_mul, ":this_team_score", 30),
(val_add, reg0, ":this_team_score"),
(try_end),
(else_try),
(assign, reg0, 1),
(try_end),
]),
#script_crpg_switch_player_team
#Input: none
#Output: none
("crpg_switch_player_team", [
(store_script_param, ":player_no", 1),
(store_script_param, ":team", 2),
#(assign, reg1, ":player_no"),
#(assign, reg2, ":team"),
#(str_store_player_username, s1, reg1),
#(server_add_message_to_log, "@autobalance: moving player:{s1} ({reg1}), team2:{reg2}"),
(try_begin),
#if player is living add +1 to his kill count because he will get -1 because of team change while living.
(player_get_agent_id, ":latest_joined_agent_id", ":player_no"),
(ge, ":latest_joined_agent_id", 0),
(agent_is_alive, ":latest_joined_agent_id"),
(player_get_kill_count, ":player_kill_count", ":player_no"), #adding 1 to his kill count, because he will lose 1 undeserved kill count for dying during team change
(val_add, ":player_kill_count", 1),
(player_set_kill_count, ":player_no", ":player_kill_count"),
(player_get_death_count, ":player_death_count", ":player_no"), #subtracting 1 to his death count, because he will gain 1 undeserved death count for dying during team change
(val_sub, ":player_death_count", 1),
(player_set_death_count, ":player_no", ":player_death_count"),
(player_get_score, ":player_score", ":player_no"), #adding 1 to his score count, because he will lose 1 undeserved score for dying during team change
(val_add, ":player_score", 1),
(player_set_score, ":player_no", ":player_score"),
(get_max_players, ":num_players"),
(try_for_range, ":player_send", 1, ":num_players"), #0 is server so starting from 1
(player_is_active, ":player_send"),
(multiplayer_send_4_int_to_player, ":player_send", multiplayer_event_set_player_score_kill_death, ":player_no", ":player_score", ":player_kill_count", ":player_death_count"),
(try_end),
(try_end),
(player_set_team_no, ":player_no", ":team"),
#(multiplayer_send_message_to_player, ":player_no", multiplayer_event_force_start_team_selection),
]),
Someone asked for the team balance code, here it is, prepare to grease your scroll wheels:Code: [Select]-Insanely fucking long code-
Someone asked for the team balance code, here it is, prepare to grease your scroll wheels:tl;dr
Someone asked for the team balance code, here it is, prepare to grease your scroll wheels:Code: [Select]#script_cf_crpg_autobalance
("cf_crpg_autobalance", [
(multiplayer_is_server),
(store_script_param, ":type", 1),
#(display_message, "@AB called"),
#(assign, reg1, ":type"),
#(server_add_message_to_log, "@new autobalance start, type:{reg1}"),
(store_script_param, ":param", 2),
(assign, ":switch_player_no", -1),
(try_begin),
(eq, ":type", 0), #type0 = shuffle teams
#check if autobalance is set to 2 - sort by banners
(eq, "$g_multiplayer_auto_team_balance_limit", 2),
(assign, ":type", 3),
(else_try),
(eq, ":type", 1), #type1 = balance teams, in favor of :team_favor
(assign, ":team_favor", ":param"),
#team favor:
#-1 = no team favor
#0 = favor team 0
#1 = favor team 1
(else_try),
(eq, ":type", 2), #type2 = switch player :switch_player_no
#(display_message, "@Type: 2"),
(assign, ":switch_player_no", ":param"),
(assign, ":switch_player_score", -1),
(store_script_param, ":param2", 3),
(assign, ":force_switch", ":param2"),
(try_end),
##calculate the current team levels
(try_begin),
#(this_or_next|eq, ":type", 1), #balance
#(eq, ":type", 2), #switch player
(assign, ":level_team_0", 0),
(assign, ":level_team_1", 0),
(assign, ":player_team_0", 0),
(assign, ":player_team_1", 0),
(assign, ":kd_team_0", 0),
(assign, ":kd_team_1", 0),
(get_max_players, ":num_players"),
(try_for_range, ":player_no", 0, ":num_players"), #t_player1
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0),
(try_begin),
(player_is_active, ":player_no"),
(ge, ":player_no", 0),
(player_get_team_no, ":player_team", ":player_no"),
(is_between, ":player_team", 0, 2), #make sure he is no spec
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 1),
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(assign, ":player_score_plus_death", reg0),
(try_begin),
(eq, ":switch_player_no", ":player_no"),
(assign, ":switch_player_score", reg0),
(try_end),
(try_begin),
(eq, ":player_team", 0),
(neq, ":switch_player_no", ":player_no"), #do not take the switcher player into calc
(val_add, ":player_team_0", 1),
(val_add, ":level_team_0", ":player_score_plus_death"),
(store_add, ":cur_troop", "trp_player0_multiplayer", ":player_no"),
(ge, ":cur_troop", 0),
(troop_get_slot, ":kd", ":cur_troop", slot_troop_crpg_kd_ratio),
(val_add, ":kd_team_0", ":kd"),
(else_try),
(eq, ":player_team", 1),
(neq, ":switch_player_no", ":player_no"),
(val_add, ":player_team_1", 1),
(val_add, ":level_team_1", ":player_score_plus_death"),
(store_add, ":cur_troop", "trp_player0_multiplayer", ":player_no"),
(ge, ":cur_troop", 0),
(troop_get_slot, ":kd", ":cur_troop", slot_troop_crpg_kd_ratio),
(val_add, ":kd_team_1", ":kd"),
(try_end),
(try_begin),
(neq, ":player_score_plus_death", 0), #dont disable the slot by accident
(neq, ":player_score_plus_death", -1),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", ":player_score_plus_death"),
(try_end),
(try_end),
(try_end), #t_player1_end = this checked for levels and assigned each player his value
(try_end),
(assign, "$ab_score_team_0", ":level_team_0"),
(assign, "$ab_score_team_1", ":level_team_1"),
(assign, reg9, -3),
(neq, "$g_multiplayer_auto_team_balance_limit", 0), #if it's 0, return false, then the player selection is used
(neq, "$g_multiplayer_auto_team_balance_limit", 3), #if it's 3, return false, then the player selection is used
(neq, "$g_multiplayer_game_type", multiplayer_game_type_defend_the_village), #don't do any AB in dtv
(assign, ":do_autobalance", 1), #start with assigned autobalance
(try_begin),
(eq, ":type", 1), #type1 = balance teams, in favor of :team_favor
#one team should be in favor - check if the favored team has less level
(try_begin),
(eq, ":team_favor", 0),
(ge, ":level_team_0", ":level_team_1"), #if level0 > #level1 skip autobalance
(assign, ":do_autobalance", 0),
(else_try),
(eq, ":team_favor", 1),
(ge, ":level_team_1", ":level_team_0"), #if level1 > #level0 skip autobalance
(assign, ":do_autobalance", 0),
(try_end),
(try_end),
(try_begin),
(eq, ":type", 2), #type2 = switch player :switch_player_no
(assign, ":do_autobalance", 0), #stop autobalance here, because it's done inside this
#check if the player in question is on the lower leveled team already
(player_get_team_no, ":player_team", ":switch_player_no"),
#(display_message, "@Type 2 AB"),
(try_begin),
(eq, ":player_team", 0),
(gt, ":level_team_0", ":level_team_1"), #if level0 > #level1 do moving
(assign, reg9, 1),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(try_end),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(else_try),
(eq, ":player_team", 1),
(gt, ":level_team_1", ":level_team_0"), #if level1 > #level0 do moving
(assign, reg9, 0),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(try_end),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
#he's a spec
(try_begin), #team-switch disable in siege
(player_get_slot, ":player_previous_team", ":switch_player_no", slot_player_crpg_last_team),
(is_between, ":player_previous_team", 0, 2),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
#(eq, "$g_multiplayer_game_type", multiplayer_game_type_battle),
#(display_message, "@Previous team is 0 or 1"),
(try_begin),
(eq, ":player_previous_team", 0),
(assign, reg9, 0),
#(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(player_set_team_no, ":switch_player_no", 0),
#(display_message, "@Moving player to team 0"),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
(eq, ":player_previous_team", 1),
(assign, reg9, 1),
#(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(player_set_team_no, ":switch_player_no", 1),
#(display_message, "@Moving player to team 1"),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(try_end),
(else_try),
(ge, ":level_team_1", ":level_team_0"), #if level1 > #level0 do moving
(assign, reg9, 0),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 0),
(try_end),
(val_add, "$ab_score_team_0", ":switch_player_score"),
(else_try),
(assign, reg9, 1),
(try_begin),
(eq, ":force_switch", 1),
(call_script, "script_crpg_switch_player_team", ":switch_player_no", 1),
(try_end),
(val_add, "$ab_score_team_1", ":switch_player_score"),
(try_end),
(try_end),
(try_end),
(try_begin),
#current situation:
#if type = 0, autobalance = 1
#if type = 1, autobalance = 1 if teams are unfair
#if type = 2, autobalance = 0, player got moved already
(eq, ":do_autobalance", 1),
(assign, ":new_level_0", 0),
(assign, ":new_level_1", 0),
(try_begin),
(eq, ":type", 3), #3(by banners) is very special and checked separately
#a) get all different banners, sort them in b array
(try_for_range, ":array", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_set_slot, "trp_temp_array_a", ":array", 0), #a = if the banner exists or not
(troop_set_slot, "trp_temp_array_b", ":array", 0), #b = the score of the banner
(try_end),
(store_add, ":level_score_halfed", ":level_team_0", ":level_team_1"),
(store_div, ":level_score_halfed_regulars", ":level_score_halfed", 9),
(val_div, ":level_score_halfed", 3),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
(player_get_banner_id, ":banner", ":player_no"),
(try_begin),
(le, ":banner", -1),
(store_random_in_range, ":banner", crpg_banner_number_start, crpg_banner_number_end),
(try_end),
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner"),
(troop_get_slot, ":player_value", "trp_multiplayer_data", ":slot_index"),
(try_begin),
(is_between, ":banner", crpg_banner_number_start, crpg_banner_number_end),
(assign, ":score", ":level_score_halfed_regulars"),
(else_try),
(assign, ":score", ":level_score_halfed"),
(try_end),
(val_add, ":rank", ":player_value"),
(try_begin),
(ge, ":rank", ":score"),
#security mechanism - if one side has more than 50% power, split them
#(val_add, ":banner", 1), #just take the next banner, doesn't matter
(store_random_in_range, ":banner", crpg_banner_number_start, crpg_banner_number_end), #this is better
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner"),
(val_add, ":rank", ":player_value"),
(try_end),
(troop_set_slot, "trp_temp_array_a", ":banner", 1),
(troop_set_slot, "trp_temp_array_b", ":banner", ":rank"),
(player_set_slot, ":player_no", slot_player_crpg_ab_banner, ":banner"),
(try_end),
(try_for_range, ":banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_get_slot, ":rank", "trp_temp_array_b", ":banner_id"),
(gt, ":rank", 100),
(assign, ":power", 1),
(set_fixed_point_multiplier, 10000),
(convert_to_fixed_point, ":power"),
(convert_to_fixed_point, ":rank"),
(val_mul, ":power", 11),
(val_div, ":power", 10), #result: 1.1
(store_pow, ":tmp", ":rank", ":power"),
(assign, ":rank", ":tmp"),
(convert_from_fixed_point, ":rank"),
(troop_set_slot, "trp_temp_array_b", ":banner_id", ":rank"),
(try_end),
#(assign, ":assign_players_to_team", 0),
#b) loop through banners, get the one with the highest number
(try_for_range, ":banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(troop_slot_eq, "trp_temp_array_a", ":banner_id", 1),
(assign, ":selected_banner_id", -1),
(assign, ":selected_banner_score", -1),
(try_for_range, ":ranking_banner_id", crpg_banner_number_start, crpg_banner_number_end*2),
(neg|troop_slot_eq, "trp_temp_array_b", ":ranking_banner_id", 0),
(troop_get_slot, ":rank", "trp_temp_array_b", ":ranking_banner_id"),
(ge, ":rank", ":selected_banner_score"),
(assign, ":selected_banner_score", ":rank"),
(assign, ":selected_banner_id", ":ranking_banner_id"),
(try_end),
(gt, ":selected_banner_id", -1), #it's valid
(troop_set_slot, "trp_temp_array_b", ":selected_banner_id", 0), #removed from the loop pool
#b2) select the proper team:
(try_begin),
(eq, ":new_level_0", 0),
(eq, ":new_level_1", 0),
(store_current_scene, ":cur_scene"), #assign the start team randomly, based on scene nr
(store_mod, ":assign_players_to_team", ":cur_scene", 2),
(else_try),
(gt, ":new_level_1", ":new_level_0"),
(assign, ":assign_players_to_team", 0),
(else_try),
(assign, ":assign_players_to_team", 1),
(try_end),
#c) highest banner selected, switch all players of this banner to team
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
#(player_get_banner_id, ":banner", ":player_no"),
#banner can now be overridden:
(player_get_slot, ":banner", ":player_no", slot_player_crpg_ab_banner),
(eq, ":banner", ":selected_banner_id"),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(try_begin),
(eq, ":assign_players_to_team", 0),
(val_add, ":new_level_0", ":value"),
(else_try),
(eq, ":assign_players_to_team", 1),
(val_add, ":new_level_1", ":value"),
(try_end),
(player_get_team_no, ":curr_team", ":player_no"),
(try_begin),
(neq, ":curr_team", ":assign_players_to_team"),
(call_script, "script_crpg_switch_player_team", ":player_no", ":assign_players_to_team"),
(try_end),
(try_end),
(try_end),
(assign, "$ab_score_team_0", ":new_level_0"),
(assign, "$ab_score_team_1", ":new_level_1"),
(try_end),
(neq, ":type", 3), #3(banners) is very special and checked before, fail if done
(try_for_range, ":unused", 0, ":num_players"), #t_player1
(player_is_active, ":unused"),
(assign, ":max_score_plus_death", -30000030),
(assign, ":max_score_plus_death_player_no", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(store_add, ":slot_index", ":player_no", multi_data_player_index_list_begin),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0),
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", -1),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(try_begin),
(eq, ":type", 0), #check if it's shuffle command
(gt, ":value", ":max_score_plus_death"),
(assign, ":max_score_plus_death", ":value"),
(assign, ":max_score_plus_death_player_no", ":player_no"),
(else_try),
(eq, ":type", 1), #check if it's autobalance command
(neg|troop_slot_eq, "trp_multiplayer_data", ":slot_index", 0), #wasnt moved yet
#calculate the team diff
(store_sub, ":level_diff", ":level_team_0", ":level_team_1"),
#divide by 2
(val_div, ":level_diff", 2),
(try_begin),
(gt, ":level_diff", 0), #team0 has higher level
(assign, ":from_team", 0),
(else_try),
(lt, ":level_diff", 0), #team1 has higher level
(val_abs, ":level_diff"),
(assign, ":from_team", 1),
(else_try),
(assign, ":from_team", -1),
(try_end),
#get team
(player_get_team_no, ":player_team", ":player_no"),
(eq, ":player_team", ":from_team"),
(val_sub, ":level_diff", ":value"),
(ge, ":level_diff", 0),
(this_or_next|eq, ":max_score_plus_death", -30000030),
(lt, ":level_diff", ":max_score_plus_death"),
(assign, ":max_score_plus_death", ":level_diff"),
(assign, ":max_score_plus_death_player_no", ":player_no"),
(try_end),
(try_end), #t_player2
#here we now have the highest player
(try_begin),
(eq, ":type", 0), #check if it's shuffle command
(ge, ":max_score_plus_death_player_no", 0),
(store_add, ":slot_index", ":max_score_plus_death_player_no", multi_data_player_index_list_begin),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(assign, reg8, ":value"),
(assign, ":value", ":max_score_plus_death"),
(assign, reg12, ":value"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(player_get_team_no, ":curr_team", ":max_score_plus_death_player_no"),
(try_begin),
(gt, ":new_level_0", ":new_level_1"),
(assign, reg9, 1),
(val_add, ":new_level_1", ":value"),
#checking if he is on the right team
(try_begin),
(neq, ":curr_team", 1),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 1),
(try_end),
(else_try),
(val_add, ":new_level_0", ":value"),
(assign, reg9, 0),
#checking if he is on the right team
(try_begin),
(neq, ":curr_team", 0),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 0),
(try_end),
(try_end),
#(str_store_player_username, s1, ":max_score_plus_death_player_no"),
#(assign, reg15, ":new_level_0"),
#(assign, reg16, ":new_level_1"),
#(assign, reg17, ":curr_team"),
#(server_add_message_to_log, "@autobalanceshuffle: player:{s1}, value:{reg12}, checkvalue:{reg8}, team:{reg9}[old:{reg17}], {reg15}:{reg16}"),
(try_end),
(try_begin),
(eq, ":type", 1), #check if it's autobalance command
(ge, ":max_score_plus_death_player_no", 0),
(store_add, ":slot_index", ":max_score_plus_death_player_no", multi_data_player_index_list_begin),
(troop_get_slot, ":value", "trp_multiplayer_data", ":slot_index"),
(assign, reg2, ":value"),
(str_store_player_username, s1, ":max_score_plus_death_player_no"),
#(server_add_message_to_log, "@autobalance: player:{s1}, value:{reg2}"),
(troop_set_slot, "trp_multiplayer_data", ":slot_index", 0), #removed from the loop pool
(player_get_team_no, ":player_team", ":max_score_plus_death_player_no"),
(try_begin),
(eq, ":player_team", ":from_team"),
(eq, ":player_team", 0),
(val_add, ":level_team_1", ":value"),
(val_sub, ":level_team_0", ":value"),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 1),
(else_try),
(eq, ":player_team", ":from_team"),
(eq, ":player_team", 1),
(val_add, ":level_team_0", ":value"),
(val_sub, ":level_team_1", ":value"),
(call_script, "script_crpg_switch_player_team", ":max_score_plus_death_player_no", 0),
(try_end),
(try_end),
(try_end),
(try_begin),
(eq, ":type", 0),
(assign, "$ab_score_team_0", ":new_level_0"),
(assign, "$ab_score_team_1", ":new_level_1"),
(else_try),
(assign, "$ab_score_team_0", ":level_team_0"),
(assign, "$ab_score_team_1", ":level_team_1"),
(try_end),
(try_begin),
(eq, ":type", -1), #make the teams even by number
#disabled
#first, check how many are different
(store_sub, ":team_diff", ":player_team_0", ":player_team_1"),
(val_abs, ":team_diff"),
(ge, ":team_diff", 2),
#let's see who to move now...
(try_begin),
(gt, ":player_team_0", ":player_team_1"),
(assign, ":move_from", 0),
(assign, ":move_to", 1),
(store_div, ":average", ":level_team_0", ":player_team_0"),
(else_try),
(assign, ":move_from", 1),
(assign, ":move_to", 0),
(store_div, ":average", ":level_team_1", ":player_team_1"),
(try_end),
#how many? teamdiff/2
#get average from team with more players - done above
(get_max_players, ":num_players"),
(assign, ":move_total_value", 0),
(try_for_range, ":unused", 0, ":team_diff"), #t_player1
(assign, ":move_player_no", -1),
(assign, ":move_player_value", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_from"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(ge, reg0, ":average"), #he is above average - check if we have someone who is lower already
(this_or_next|eq, ":move_player_no", -1),
(gt, ":move_player_value", reg0), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
#now we should have one guy slightly above average -move him, and add his value
(val_add, ":move_total_value", ":move_player_value"),
(call_script, "script_crpg_switch_player_team", ":move_player_no", ":move_to"),
(try_end),
(val_div, ":team_diff", 2),
(store_div, ":average", ":move_total_value", ":team_diff"),
(try_for_range, ":unused", 0, ":team_diff"), #t_player1
(assign, ":move_player_no", -1),
(assign, ":move_player_value", -1),
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_to"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(ge, reg0, ":average"), #he is above average - check if we have someone who is lower already
(this_or_next|eq, ":move_player_no", -1),
(gt, ":move_player_value", reg0), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
(try_begin),
(eq, ":move_player_no", -1), #found no suitable match - take the highest player
(try_for_range, ":player_no", 0, ":num_players"), #t_player2
(player_is_active, ":player_no"),
(player_get_team_no, ":team", ":player_no"),
(eq, ":team", ":move_to"), #he's on the right team - check if his lvl is above average
(call_script, "script_cf_crpg_autobalance_get_level", ":player_no"),
(this_or_next|eq, ":move_player_no", -1),
(gt, reg0, ":move_player_value"), #the guy before has a higher value
(assign, ":move_player_no", ":player_no"),
(assign, ":move_player_value", reg0),
(try_end),
(try_end),
#now we should have one guy slightly above average -move him, and add his value
#(val_add, ":move_total_value", ":move_player_value"),
(call_script, "script_crpg_switch_player_team", ":move_player_no", ":move_from"),
(try_end),
(try_end),
#(assign, reg1, ":level_team_0"),
#(assign, reg2, ":level_team_1"),
#(server_add_message_to_log, "@end of autobalance: team1:{reg1}, team2:{reg2}"),
(try_end),
(eq, 0, 1), #break script
]),
#script_cf_crpg_autobalance_get_level
#Input: none
#Output: none
("cf_crpg_autobalance_get_level", [
(store_script_param, ":player_no", 1),
(try_begin),
(store_add, ":troop_no", "trp_player0_multiplayer", ":player_no"),
(troop_get_slot, ":level", ":troop_no", slot_troop_crpg_level),
(gt, ":level", 0),
(val_add, ":level", 5), #add 4 levels to everyone so every player counts higher
(try_begin),
(eq, "$g_multiplayer_game_type", multiplayer_game_type_rabbit),
(val_add, ":level", 25), #in rabbit, people by itself count more
(try_end),
(player_get_score, ":kill_count", ":player_no"),
(player_get_death_count, ":death_count", ":player_no"), #get_death_count
(val_div, ":kill_count", 10),
(val_sub, ":kill_count", ":death_count"),
(val_mul, ":kill_count", 3),
(store_mul, ":player_score_plus_death", ":level", 10),
(val_add, ":player_score_plus_death", ":kill_count"),
#(val_sub, ":player_score_plus_death", ":death_count"),
#(val_mul, ":player_score_plus_death", ":player_score_plus_death"),
(set_fixed_point_multiplier, 10000),
#(val_mul, reg0, 10000),
(troop_get_slot, ":kd", ":troop_no", slot_troop_crpg_kd_ratio),
(val_div, ":kd", 100),
(val_add, ":player_score_plus_death", ":kd"),
(val_max, ":player_score_plus_death", 0),
(assign, ":power", 1),
(convert_to_fixed_point, ":player_score_plus_death"),
(convert_to_fixed_point, ":power"),
(val_mul, ":power", 11),
(val_div, ":power", 10),
(store_pow, ":tmp", ":player_score_plus_death", ":power"),
(assign, ":player_score_plus_death", ":tmp"),
(convert_from_fixed_point, ":player_score_plus_death"),
(assign, reg0, ":player_score_plus_death"),
(try_begin),
(player_get_team_no, ":team", ":player_no"),
(is_between, ":team", 0, 2),
(team_get_score, ":this_team_score", ":team"),
(store_sub, ":enemy_team", ":team", 1),
(val_abs, ":enemy_team"),
(team_get_score, ":enemy_team_score", ":team"),
(val_sub, ":this_team_score", ":enemy_team_score"),
(lt, ":this_team_score", 0),
(val_mul, ":this_team_score", 30),
(val_add, reg0, ":this_team_score"),
(try_end),
(else_try),
(assign, reg0, 1),
(try_end),
]),
#script_crpg_switch_player_team
#Input: none
#Output: none
("crpg_switch_player_team", [
(store_script_param, ":player_no", 1),
(store_script_param, ":team", 2),
#(assign, reg1, ":player_no"),
#(assign, reg2, ":team"),
#(str_store_player_username, s1, reg1),
#(server_add_message_to_log, "@autobalance: moving player:{s1} ({reg1}), team2:{reg2}"),
(try_begin),
#if player is living add +1 to his kill count because he will get -1 because of team change while living.
(player_get_agent_id, ":latest_joined_agent_id", ":player_no"),
(ge, ":latest_joined_agent_id", 0),
(agent_is_alive, ":latest_joined_agent_id"),
(player_get_kill_count, ":player_kill_count", ":player_no"), #adding 1 to his kill count, because he will lose 1 undeserved kill count for dying during team change
(val_add, ":player_kill_count", 1),
(player_set_kill_count, ":player_no", ":player_kill_count"),
(player_get_death_count, ":player_death_count", ":player_no"), #subtracting 1 to his death count, because he will gain 1 undeserved death count for dying during team change
(val_sub, ":player_death_count", 1),
(player_set_death_count, ":player_no", ":player_death_count"),
(player_get_score, ":player_score", ":player_no"), #adding 1 to his score count, because he will lose 1 undeserved score for dying during team change
(val_add, ":player_score", 1),
(player_set_score, ":player_no", ":player_score"),
(get_max_players, ":num_players"),
(try_for_range, ":player_send", 1, ":num_players"), #0 is server so starting from 1
(player_is_active, ":player_send"),
(multiplayer_send_4_int_to_player, ":player_send", multiplayer_event_set_player_score_kill_death, ":player_no", ":player_score", ":player_kill_count", ":player_death_count"),
(try_end),
(try_end),
(player_set_team_no, ":player_no", ":team"),
#(multiplayer_send_message_to_player, ":player_no", multiplayer_event_force_start_team_selection),
]),
(val_add, ":level", 5), #add 4 levels to everyone so every player counts higher
(player_get_score, ":kill_count", ":player_no"),
(player_get_death_count, ":death_count", ":player_no"), #get_death_count
(val_div, ":kill_count", 10),
(val_sub, ":kill_count", ":death_count"),
(val_mul, ":kill_count", 3),
^ what you fail to understand, is that your banner got removed, not because I wanted it, but because it was breaking certain banner rules.Look at the mass opposition in the first and second threads. Yet the second you speak out, a lone neckbear, and some admin (Name not revealed in the messages sent to the leaders of the affected clans which I cant check because no leader on) decides to pull the plug on all of them?
And trust me, I`m the last person of this community that the devs would satisfy.
Get over it already
Look at the mass opposition in the first and second threads. Yet the second you speak out, a lone neckbear, and some admin (Name not revealed in the messages sent to the leaders of the affected clans which I cant check because no leader on) decides to pull the plug on all of them?
I feel like I`m discussing with a 10 year old.You just dodge questions and seem to somehow miss every single point I've made against your banner burning crusade.
You make Berserkardin look smart.
...
my god is this how everything works in the module system ? The horror.
Btw I miss rabbit mode :(
I think that in "script_cf_crpg_autobalance_get_level" this :Code: [Select](val_add, ":level", 5), #add 4 levels to everyone so every player counts higher
should be lowered (and the comment fixed ? I'm not sure if this 5 actually means 4 or something), to give a bigger advantage to lower levels.
Also if I get this right those lines :Code: [Select](player_get_score, ":kill_count", ":player_no"),
(player_get_death_count, ":death_count", ":player_no"), #get_death_count
(val_div, ":kill_count", 10),
(val_sub, ":kill_count", ":death_count"),
(val_mul, ":kill_count", 3),
Will get the kill amount, the death amount, divide the kill amount by 10 then substract by the death amount and multiply by 3. Shouldn't kills have a little more value than this compared to deaths ? I mean, it would seem more fair to me, at least in siege. Anyway, working with this system must be a pain in the ass.
(troop_get_slot, ":kd", ":troop_no", slot_troop_crpg_kd_ratio),
(val_div, ":kd", 100),
I agree with Kafein about putting more weight on kill amount.
Also... this seems a little confusing to me:Code: [Select](troop_get_slot, ":kd", ":troop_no", slot_troop_crpg_kd_ratio),
(val_div, ":kd", 100),
Does autobalance use permanent (=Battle) k/d in this player "power" calculation?
Also that second line, if you divide it by 100, doesn't it become negligible? Ie for level it does (level + 5) * 10, which produces a whole lot bigger value.
The thing is that this language is so weird they have to use fixed point dark magic to get "real numbers", so I honestly don't even know what this "val_div" actually does.Hate.
Hate.What? Why? What's going on? Should I get popcorn?
Fucking. Hate.
What? Why? What's going on? Should I get popcorn?
damn you Tydeus and your sexual phantasies :lol:(click to show/hide)
damn you Tydeus and your sexual phantasies :lol:
The thing is that this language is so weird they have to use fixed point dark magic to get "real numbers", so I honestly don't even know what this "val_div" actually does.
lern2loveintegerdivision
In my case, the gym. The 2 hours a day I played on c-rpg is now took up by the gym. Nothing to do with the balance of the game imo, everything can counter something.Gym has no counter, nerf it quick
p.s the maps are shite though.
the banner balance code has to be more complicated than the true balance code yes? everything else seem completely illogical to me but then again im a nabcake with no idea of programming or scripting :D
regarding the poll... "mod too old" wtf? so you quit a game because you deem it "out of date"??? lols... please remove the troll option :)
to you, I guess chess is also out of date but thing is just... its the most played game in the world :)