yavl / teeworlds-infclassr Goto Github PK
View Code? Open in Web Editor NEWThis project forked from necropotame/teeworlds-infclass
Slightly modified version of official InfClass
License: Other
This project forked from necropotame/teeworlds-infclass
Slightly modified version of official InfClass
License: Other
I was a soldier and killed a zombie after stunning it with stun grenades. Then the message about eliminating my target appeared. There was no other indication that i have a target.
I don't have specific steps to reproduce this problem. I expected that the soldier does not get additional frags for their kills.
When a round ends the scoreboard will be shown too long. Many people leave during this time period.
I suggest a much shorter display of the scoreboard. I will keep my eyes open maybe i can find out how to do it. Please tell me if you agree or disagree.
New feature suggestion:
At the start of a round when you choose your class you can type /random to get a random class. (or click the button)
If you dont like it, you can type /random one more time to get another class. But the second time you wont get the extra armor and start with no armor.
Steps to reproduce:
Expected:
Zombie n1 health/armor remains unchanged
Observed:
Zombie n1 gets health/armor
I created a new branch: slowmo_effect
In order to test a new kind of slowmo effect. This one also slows down down and up movement.
But i am not sure if it is good, feel free to try it out and change vars and tell me what you think.
[5baf2e7c][game]: kill killer='0:omgg' victim='0:omgg' weapon=-2 special=0
[5baf2e7e][chat]: 5:-2:DEBIAN 10: GeGe = (Ge)²
[5baf2e7e][chat]: 4:-2:Re3ses: GG
[5baf2e7e][chat]: 0:-2:omgg: gg
[5baf2e7e][chat]: 6:-2:Master Dragon: gg
[5baf2e7f][teamchat]: 3:0:огон�: Debian buster: I TEAM
[5baf2e81][chat]: *** 'Master Dragon' called vote to change server option 'infc_skull' (No reason given)
[5baf2e83][server]: ClientID=5 rcon='vote no'
[5baf2e83][server]: forcing vote no
[5baf2e83][server]: forcing vote no
[5baf2e83][chat]: *** Vote failed
[5baf2e83][chat]: 4:-2:Re3ses: f4
[5baf2e88][game]: start round type='InfClassR' teamplay='0' id='1131359211'
[5baf2e91][game]: kill killer='3:огон�' victim='3:огон�' weapon=-2 special=0
[5baf2e93][game]: kill killer='7:Genefest' victim='9:aqwa' weapon=0 special=0
[5baf2e97][game]: kill killer='2:Debian buster' victim='9:aqwa' weapon=0 special=0
[5baf2e98][assert]: src/engine/server/server.cpp(150): id error
Enhance the slow motion effect:
Steps to reproduce:
Unfortunately, i could not capture the exception that happened and have only the following trace:
#1 0x0000563931709896 in CCharacter::Snap (this=0x5639319ddf18 <ms_PoolDataCCharacter+8440>, SnappingClient=5) at src/game/server/entities/character.cpp:3133
#2 0x00005639316d1c56 in CGameWorld::Snap (this=0x7f13973e3178, SnappingClient=5) at src/game/server/gameworld.cpp:114
#3 0x00005639316eeb3c in CGameContext::OnSnap (this=0x7f13973e0010, ClientID=5) at src/game/server/gamecontext.cpp:4213
#4 0x00005639316a510b in CServer::DoSnapshot (this=0x7f1392123010) at src/engine/server/server.cpp:856
#5 0x00005639316ab1b1 in CServer::Run (this=0x7f1392123010) at src/engine/server/server.cpp:2234
#6 0x00005639316ae0e7 in main (argc=1, argv=0x7fff7fbe5e68) at src/engine/server/server.cpp:2862
On my server line numbers are a little different because of few modifications. Corresponding lines (they are the same as upstream): https://github.com/bretonium/my-infclass-server/blob/test-master/src/game/server/entities/character.cpp#L3133
If I want to nerf a weapon easily (#48) I have to #include gamecontext.h (includes NerfFactor) in every weapon.
Furthermore every weapon needs the same kind of modification which is bad practice when done in each file, it is not only hard to read but makes further modifications to the weapons in the future even harder.
Thus I want to outsource all relevant variables into one place.
I suggest to use more config vars (compiler macros, #96 ) and access them during runtime from gamecontext.cpp via console.cpp to make changes according the value of NerfFactor automatically. It would need a new config file, called config_weapons in src/engine/shared
There is another approach:
src/engine/server.cpp sets weapon configs already.
e.g. SetFireDelay, SetAmmoRegenTime
I could use the design of this architecture to modify other weapon parameters like scientist mine dmg.
It would need:
Hero indicator shows where the flag is. I disabled it on my server for 2 reasons:
However, on some maps it might be frustrating to search for the flag and not to find it for a long time. For example, on huge infc_towers.
Lets show it in stages. Each stage takes 10 seconds. Stage 0 starts right after the flag appears.
Stage 0: no indicator
Stage 1: indicator is visible 1 time for 1 second
Stage 2: indicator is visible 2 times, each 1 second
Stage 3: indicator is visible 3 times, each 1 second
Stage 4: you guessed it
Problem:
It is difficult to jump start a server. When there are only few players playing the server can die easily.
If there are only 3 players playing - 2 zombies, 1 merc, it will be much easier for the merc to escape. Which will make it annoying to play as zombie. The same goes for hero. It is much easier for the hero to find flags when there are only few players on. Playing with only few players is very unbalanced and not fun which leads to players leaving and making the problem worse.
Solution 1:
Nerf certain human classes depending on how many players are online. For example give heroes only a grenade launcher when there are at least 6 players. Reduce reload speed of merc pistol. Let scientists only have 1 mine and remove its teleporter. Let ninja only have 1 zap before touching the ground again. And maybe more....
Solution 2:
Buff the movement speed of all zombies depending on how many players are online.
Solution 3:
Give each map a minimum player number. For example infc_warehouse and hardcore pit could have a very low min player number (of 0) while infc_newdust and spacelab could have higher one. If the next map has a higher player number than online players it will skip the map and search for a map with lower min player number.
Steps to reproduce:
Actual result: zombie class gets changed
Expected result: zombie class does not change. For example, ghost should keep being ghost
How the King works:
X people have to write /king and 1 human randomly becomes the King.
The King has a passive heal aura, that heals humans in a certain range.
The King also makes wall of engineers last longer.
The King only has a hammer as weapon.
If the King dies all humans get damaged and walls might break.
Why the King is bad:
Playing as King is boring, you only have a hammer and you cant do much.
You didn't choose to become King but you were forced to play it.
Waiting as zombie in front of an engineer wall is boring, you cant do much.
Making the walls last longer makes it worse.
Passive heal is also boring, you as king don't have to do much to heal, and it allows humans to do more mistakes / get less punished for mistakes. Or in other words zombies get less rewarded for good play.
I don't want to lose health or my wall only because another human died. Maybe I am on the opposite side of the map and couldn't do anything to protect the King, or the King was stupid and just committed suicide, or maybe the King is just afk and its impossible to protect him.
That players have to write /king is not intuitive or fun. It would be better if the king was summoned if the humans made some sort of ritual or idk.
When i stop infclass process via SIGINT
(in my case i just press Ctrl-C
) or SIGTERM
(via kill <pid>
) econ socket is not getting closed. Because of it, i cannot restart the server immediately and have to wait for 60 seconds.
Steps to reproduce:
# binding to 0.0.0.0 is dangerous, but whatever
ec_bindaddr 0.0.0.0
ec_port 8309
ec_password <password>
ec_output_level 2
telnet <ip> 8309
, you will see password prompt)Ctrl-C
Expected: connection to econ succeeds
Observed: connection fails; in server log there is message about the server not being able to open a socket
compilation terminated.
bam: 'objs/infclassr/GeoLite2PP.o' error 256
[25/26] #1 c++ src/infclassr/geolocation.cpp
In file included from src/infclassr/geolocation.cpp:1:0:
src/infclassr/geolocation.h:4:26: fatal error: GeoLite2PP.hpp: No such file or directory
#include <GeoLite2PP.hpp>
Config vars are awesome. They make the server more flexible and give them extra features.
The possibilities are endless.
For example we could create fun rounds by using config vars.
Someone could create a cfg file that gets executed when people vote for it.
This is already possible. What is not possible i think is to automatically reset it after the fun round ended.
But the idea is that the more config vars we have the more we can do with it.
Hello, I am trying compile on Windows 10 with mingw. I disabled only geolocation, because couldn't compile it. So all compile good, but in the last step, it writes many errors, but only 2 types: "undefined reference to __stack_chk_fail'" and "undefined reference to
__stack_chk_guard'". I googled about it, and tried stackprotector.value = true in config.lua, but nothing changes.
It would be nice if there was a step by step tutorial on how to compile and run this mode in the readme.
That you have to use bam 4.0 and where to find it.
And a list of all dependencies that you have to install.
A list of commands that you type in the terminal / cmd to compile and run it.
I think ddnet did a good job with this: https://github.com/ddnet/ddnet
Steps to reporoduce:
After this the second zombie flies away somewhere and never dies
We can try fixing necropotame#217 without waiting for the parent repo
request from ;D, I agree, makes him more powerful!
(gdb) where
#0 0x000055c24fea7271 in CPlayer::IsInfected (this=0x0) at src/game/server/player.cpp:828
#1 0x000055c24feaa43a in CGameContext::CreateExplosion (this=0x7ff985a11010, Pos=..., Owner=7, Weapon=0, NoDamage=false, TakeDamageMode=0, MercBomb=true)
at src/game/server/gamecontext.cpp:411
#2 0x000055c24fee4430 in CGrowingExplosion::Tick (this=0x55c251451a00) at src/game/server/entities/growingexplosion.cpp:170
#3 0x000055c24fea0ea3 in CGameWorld::Tick (this=0x7ff985a14178) at src/game/server/gameworld.cpp:236
#4 0x000055c24fead939 in CGameContext::OnTick (this=0x7ff985a11010) at src/game/server/gamecontext.cpp:1137
#5 0x000055c24fe7b610 in CServer::Run (this=0x7ff980754010) at src/engine/server/server.cpp:2161
#6 0x000055c24fe7e3ff in main (argc=1, argv=0x7fff7854d398) at src/engine/server/server.cpp:2772
This is my line 411 of gamecontext.cpp
: https://github.com/bretonium/my-infclass-server/blob/33522cbdbf91c66f81da549a31e10eb0c8b359e5/src/game/server/gamecontext.cpp#L411 . As we can see, m_apPlayers[Owner]
is null for some reason.
The stats show that engineer is still op.
https://stats.resamvi.de/#/
Most kills, most picked, most survived, most alive
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x000055a586f75626 in CPlayer::Tick (this=0x55a5872623d8 <ms_PoolDataCPlayer+14040>)
at src/game/server/player.cpp:159
159 if(GameServer()->DistanceWithKing(m_pCharacter->m_Pos) <= g_Config.m_InfKingRadius)
[Current thread is 1 (Thread 0x7f07ce4a9740 (LWP 21326))]
(gdb) p m_pCharacter
$1 = (CCharacter *) 0x0
As you can see from this gdb session that i ran after the crash, m_pCharacter
is null and it caused the segfault
Original InfClass was already localized in many languages, few strings were added for /help pages and commands like /witch since then and are not going to change.
Many players from Latin America, Russian-speaking countries, some young players from France don't understand English well, so they usually don't take part in "Player is calling for Witch!" challenge, nor they form taxi or revive infected. Therefore those newly added strings should be translated to Spanish, Russian, French and some other languages.
Because of the strong explosion of merc bombs it is possible to kill humans with it in certain maps.
You place it next to spikes or void and wait until a human comes by and then explode it so it will push the human into the spikes or void.
Possible solutions i can think of:
(i think solution 1 is the best)
There are 2 config vars to set looper wall duration:
https://github.com/yavl/teeworlds-infclassR/blob/master/src/engine/shared/config_variables.h#L131
https://github.com/yavl/teeworlds-infclassR/blob/master/src/engine/shared/config_variables.h#L133
I expect to have 1.
I wanted to code it so that the server remembers the last 3 classes a human picked and do not give it to him again if he chooses random. Then i found that this function already exists:
https://github.com/yavl/teeworlds-infclassR/blob/master/src/game/server/gamemodes/mod.cpp#L839
But is commented out because apparently it breaks fun rounds. This is not a good solution. Instead please make a check if there is currently a fun round going on or something like this.
See title.
What happened?
Sniper didn't infect while being in InfZone, providing that he is in stationary mode.
How to reproduce:
Steps to reproduce:
Expected: A's hook is released
Observed: Human A still hooks B and damaged them, without any timeout
scatter-grenade.cpp has to be modified.
mercenary scatter-grenade needs to be independent from this fix by using the m_isflashgrenade variable.
Problem:
GetActivePlayerCount()
in server.cpp is called from different locations. The number has to be generated all again instead of generating it once all x seconds and storing the value into an instance variable, that can be accessed from different locations.FindFirst(CGameWorld::ENTTYPE_CHARACTER)
has not to be called in Tick() in real-time. hero-flag.cpp for example can check for players all 0.3 seconds, which is still enough time to receive it without lag.Proposed solution:
Breton please write your fix again. Why is the class selector on your server visible?
New Zombie Class: Charger (idea by Katrtlen)
Skin: Zombie Twinbop Zombie with one unique feature: charged hammer swings. Regular zombie's hammer hitbox is very short so such zombie must almost get in touch with human to infect it. When Charger stays still in one place, it will charge his power which shows in message as percentage just like ghoul's stomach meter, higher percentage slightly changes Charger's skin to more white. When it's over 25%, instead of normal swing Charger will release single "sweep". Looks like a sword curve swing effect. Sweep is way bigger than normal swing and more charged sweeps will be bigger in size, maximum charges will release a massive sweep which can hurt humans in range of 5-6 tiles. Now the thing is: first, the bigger sweep is, the less damage it will deal. Even smallest sweep won't infect human immediately but leave damage almost killing, meanwhile very big sweeps will deal even less damage, yet the size multiply compared to damage reduction makes bigger sweeps way more useful. Second thing, charge percentage drops fast when moving, it takes around 5 seconds to charge it 100% and around 3 seconds to drop to 0%. That makes Chargers use sweeps quickly only when needed instead of wandering around map while being charged. Additional appearance: Charger has eyes closed during charging and when charge is very high, small laser sparks will emit from it's body.
(i copy pasted this from discord)
Current master (b05755e) leads to segmentation fault between rounds. To reproduce, finish a round by infecting all humans and wait.
The following applies to maps lunaroutpost, skull, halfdust, warehouse, newdust, normandie.
Today bat + witch = 100% win for zombies on these maps.
Before tarzan mode and bats there was only one method to throw zombies behind human defense lines - boomfly. It required high skill, boomer, could be performed only with 1 zombie at a time and was not very controllable. Boomflying a witch required risk assessment - are there spikes? is there engie wall?
With bats it became easier. Bats could hook zombies or witch to the air and drop them from there. It made life of zombies way easier. But with low enough hook time it still had complications: was audible for humans, required zombies to hook many times (and it sometimes failed for $reasons) and required coordination from bat and zombie/witch.
With tarzan mode zombies life became way too easy. Zombies silently hook in batches to bats and without any complications fly up. 0 skill required. What is worse is that witch can hook bat and hang in the skies, absolutely unreachable for humans, spawning zombies all over the map. It makes game for humans boring, defies all their defenses and makes the game for them boring.
Right now a hunter will not be influenced by the pullback of a medic shotgun.
Every other zombie will be thrown trough the air but it will have no affect on the hunter class.
I think this is not good, because many people dont know about it and it makes it so that as medic you need to get lucky that you not encounter hunters.
I would like that the hunter is equally effected by the medic shotgun, therefore nerf the pullback of the shotgun a bit. And maybe give hunter a tiny speed buff to its movement.
reason unknown
seems lag when you try to move a zombie or human with your body ....
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x000055755bf7531b in dbg_break () at src/base/system.c:87
87 *((volatile unsigned*)0) = 0x0;
[Current thread is 1 (Thread 0x7fa651ef2740 (LWP 11404))]
(gdb) where
#0 0x000055755bf7531b in dbg_break () at src/base/system.c:87
#1 0x000055755bf752e8 in dbg_assert_imp (filename=0x55755c0289f1 "src/engine/server/server.cpp", line=153, test=0, msg=0x55755c0289e8 "id error")
at src/base/system.c:81
#2 0x000055755bf803bf in CSnapIDPool::NewID (this=0x7fa64d2ed7cc) at src/engine/server/server.cpp:153
#3 0x000055755bf8bb31 in CServer::SnapNewID (this=0x7fa64cc00010) at src/engine/server/server.cpp:2758
#4 0x000055755bfb8cbb in CGameContext::CreateLaserDotEvent (this=0x7fa651ebd010, Pos0=..., Pos1=..., LifeSpan=8) at src/game/server/gamecontext.cpp:246
#5 0x000055755bff4291 in CGrowingExplosion::Tick (this=0x55755e542560) at src/game/server/entities/growingexplosion.cpp:213
#6 0x000055755bfb04ff in CGameWorld::Tick (this=0x7fa651ec0178) at src/game/server/gameworld.cpp:236
#7 0x000055755bfbc5da in CGameContext::OnTick (this=0x7fa651ebd010) at src/game/server/gamecontext.cpp:1031
#8 0x000055755bf89104 in CServer::Run (this=0x7fa64cc00010) at src/engine/server/server.cpp:2213
#9 0x000055755bf8c189 in main (argc=1, argv=0x7ffda8c5e4c8) at src/engine/server/server.cpp:2862
Please note that it happened with my version https://github.com/bretonium/my-infclass-server/tree/test-master (test-master branch)
I am thinking about this since some time now:
The exact numbers can be changed / need to be balanced.
What do you think?
Heros each have their private flag to chase, however the global gift is still locked behind a cooldown.
So heros don't compete against each other, however they can still get their health back by themselves
A discord member wanted to ask if we implement scientist laser portals.
Do we want that, and if yes, who still cares about stitch?
Sometimes when merc heart bombs explode they will cause lasers to go straight in direction of the left top corner over a great distance.
I am not sure if this is only visual or has an effect.
A more natural and less clunky taxi mode. Let hook-protected humans infinitely hook non hook-protected humans without affecting them.
Example for humans:
16 players on the server, spacious map (normandie, damascus, newdust) is being played, Mercenary is not hook-protected and 3 other tees are hook protected. Those 3 tees hook mercenary and then mercenary starts flying with a tail of 3 tees.
Example for bats:
Bat-only feature for quick infected forces' transportation on large maps. Same behaviour, unlimited number of zombies hook Bat and fly with him. If zombs won't stop holding hook button, Bat could throw down zombies at any time by enabling hook protection.
At a distance smaller than minimum, hook should behave like spider's hook on web mode.
inf_scientist_tp_selfharm
has no effect in the current master.
Steps to reproduce:
inf_scientist_tp_selfharm 2
Expected: scientist gets 2 damage
Observed: scientist gets 0 damage
7cfd5b0 is the first bad commit. My guess is that it happens because of change in @@ -2708,7 +2711,7 @@ bool CCharacter::TakeDamage(vec2 Force, int Dmg, int From, int Weapon, int Mode)
when player in the top of taxi and in the infection zone at once he will be infectioned
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.