Giter Club home page Giter Club logo

teeworlds-infclassr's People

Contributors

defeater avatar duralakun avatar henningstone avatar incrediblecake avatar kaffeine avatar manmellon avatar necropotame avatar progval avatar resamvi avatar rotolonico avatar socialdarwinist avatar teoman002 avatar yavl avatar zlaxy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

teeworlds-infclassr's Issues

Soldier got +2 for eliminating target

screenshot_20190201_115002

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.

Changing Map - End of rounds take way too long

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.

the /random command

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.

breton

You complain about me, but at same time you push changes that you dident even compile:
b64133d
8879a3b
typos dont compile, and where are the reviews?

Zombie is healed when hooks zombie

Steps to reproduce:

  1. 2 zombies with disabled hook protection for both
  2. Zombie n1 hooks zombie n2

Expected:
Zombie n1 health/armor remains unchanged

Observed:
Zombie n1 gets health/armor

Loopers SlowMo effect

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.

Server crash

[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

Looper slow motion improvement

Enhance the slow motion effect:

  • the slow motion limits the move speed to a specific value and does not multiply a percentage with the current move speed
  • changes to m_GroundControlAccel, m_AirControlAccel,m_HookDragAccel will be deactivated because of complexity
  • m_HookDragSpeed will be minimally affected 10-15%

Server crash with hero indicator enabled

Steps to reproduce:

  1. Enable flag indicator
  2. Several people took heroes

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

Put all weapon/damage related variables into one place

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:

  • a new struct with all weapon parameters
  • getter and setter functions
  • no console access necessary

Hero indicator idea

Hero indicator shows where the flag is. I disabled it on my server for 2 reasons:

  1. Several people (me included) thought that it made playing with hero boring. No need to search the flag, just follow the white dot!
  2. I personally think it made heroes too powerful on some maps and with few zombies.

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

Few players - unbalanced gameplay

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.

Spectating changes zombie class

Steps to reproduce:

  1. Become infected, note the assigned class (for example, ghost)
  2. Join spectators
  3. Join game again (note the class assigned)

Actual result: zombie class gets changed
Expected result: zombie class does not change. For example, ghost should keep being ghost

Why King is bad

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.

econ socket is not closed on SIGTERM and SIGINT

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:

  1. Set up the server with econ enabled
# 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
  1. Run the server and verify that econ works: (for example, using telnet <ip> 8309, you will see password prompt)
  2. Shutdown the server by pressing Ctrl-C
  3. Start the server again and try connecting to the econ

Expected: connection to econ succeeds
Observed: connection fails; in server log there is message about the server not being able to open a socket

compiler error

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>

We need more config vars

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.

Linker error (on Windows)

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.

How to compile - tutorial

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

Infinite flying when boomed with collision off

Steps to reporoduce:

  1. 2 zombies, 1 of them is boomer
  2. Both turn off hook protection (and collisions)
  3. Both stand in the same position - for example, in some corner
  4. Boomer explodes

After this the second zombie flies away somewhere and never dies

merc bomb caused server crash

(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.

Segfault with king

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

Translate new /help pages and commands for major languages

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.

Merc bombs killing humans

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:

  • Dont allow merc bombs to influence the movement of other humans except the owner of the bomb
  • Dont allow mercs to explode their own bombs
  • Replace merc bombs with turrets

(i think solution 1 is the best)

Fun Rounds breaking random pick feature

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.

bug: sniper not infected in InfZone

What happened?
Sniper didn't infect while being in InfZone, providing that he is in stationary mode.

How to reproduce:

  1. Sniper is in stationary mode
  2. Pull as zombie sniper into InfZone
  3. See if he gets infected.

tarzan hooking is not reset after infection

Steps to reproduce:

  1. 1 zombie and 2 humans, human A with hook protection, human B without
  2. Human A hooks human B and holds
  3. Zombie infects human A

Expected: A's hook is released
Observed: Human A still hooks B and damaged them, without any timeout

scatter-flash-grenade does not explode if zombie is hit

scatter-grenade.cpp has to be modified.
mercenary scatter-grenade needs to be independent from this fix by using the m_isflashgrenade variable.

  • TODO: correct trajectory estimation (the hard part) and explode on human impact.

Introduce IntervalTick() for non-real-time updates

Problem:

  • Often 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.
  • Sometimes 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.
  • Turrets do not need real-time player detection (radar), 0.5 seconds are enough to check if a player is in range.
  • To conclude: the amount of entity calls can sometimes reduced

Proposed solution:

  • virtual function Intervalltick() in base class which can be implemented by each child class.
  • It has an interval timer and does non-real-time updates in a specific object e.g. turret.cpp

New Zombie Class: Charger (idea by Katrtlen)

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)

Tarzan mode defies ideas of maps

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.

Hunters and Medic shotguns

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.

Server Crash - SnapNewID()

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)

Suggestion: Changing Ninja

I am thinking about this since some time now:

  • Remove target system - instead every kill gives 1 point, an assist gives half a point
  • For every point the ninja gains 1 damage upgrade + 1 health (not more than max health)
  • For every 3 points or so ninja gains a speed buff (when he attacks / slashes)
  • For every 5 points or so ninja gains 1 extra grenade ammo
  • Ninja starts with only 1 slash in mid air and gains another one after 3 points or so
  • Ninja is immortal while slashing (so he can slash boomers without stunning them first)
  • Ninja can explode stun grenades mid air (like merc grenades)
  • Remove pistol (no longer needed, makes it easier for noobs to switch between the 2 main weapons)
  • Ninja starts with 7 damage or so (this would mean he needs to kill 3 zombies first before being able to instant kill them / if they have no armor)

The exact numbers can be changed / need to be balanced.
What do you think?

Merc Bomb laser bug

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.

Suggestion: Tarzan-mode for humans or bats or both

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.

Scientist does not take damage on teleportation

inf_scientist_tp_selfharm has no effect in the current master.

Steps to reproduce:

  1. Run a server with inf_scientist_tp_selfharm 2
  2. Choose scientist and teleport

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)

uber bug

when player in the top of taxi and in the infection zone at once he will be infectioned

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.