igroglaz / srvmgr Goto Github PK
View Code? Open in Web Editor NEWThis project forked from jewalky/srvmgr
Home Page: http://tangar.info/allods2
This project forked from jewalky/srvmgr
Home Page: http://tangar.info/allods2
HOEBAC:
Spell: Slow - Using this spell on a 2x2 sized monster (Troll and Ogre) will cause in their hitbox bugging out. By this I mean the monster model is not where the screen shows you. The monster might be actually closer or further away from you than one might think. How this affects players: You might see the (example troll) being 3 squares/hexes away from you, but it stil can reach you. This is because the monster model is not actually 3 squares/hexes away from you, but already next to you. I'm not sure if this visual bug relating to this spell is fixable.
EDIT I believe this is/might be part of the hard-coded stuff which one is not able to modify?
How to reproduce: Cast spell: Slow on 2x2 sized target, inspect the movement and you'll be able to see the delayed visual model (monsters hitting further than 1 attack range)
How it should be: Casting spell: Slow should not affect the monster model
How it actually is: Casting spell: Slow affects the monster model and therefore you are not able to see in which squares / hexes the monster is actually moving in
there are already flags for drop/no drop.. it would be fun to add new flags - for partial drop, eg when player die, only his inventory would be lost as a bag (but not items worn). Example of possible flags for death drop:
Remove 'creature' reward for tavern's quests as it breaks game balance.
It would be fun to implement new flag for server - to disable 'watch'
"Watch" (F3 -> 'watch') -- other players will be capable of watching your character and all the events within your character’s sight range.
Would make game extra hard.. and more interesting in certain circumstances.
Also I suppose it could solve most of crushes :)
Right now mail gives 2% of player experience as reward. I suppose if we will be able to change this value somehow it will be good way to rebalance mail system.. but as we have 110 skill limit (and it's possible to get exp even after you got a 110 value), even lesser, eg 0.5% of reward could give stat potion as reward..
So the idea is - to award 2% of exp, but not more than, for example:
It's approximate values; exact ones we could define during tests
sometimes (super extremely rare) an item can be 'comsumed' (dissapear) when using a healing potion (or any other consumable items), if this item lies in front of the consumable in inventory
eg today one player had weapon dissapeared that way
Easiest way to solve problem with multiple taverns on map and 'mail' is to add restriction for maximum distance of 'teleport' spell
Teleport max distance with 100 skill should be ~ 10
Mage could raise astral exp after he got 110 cap skill. By doing it he could increase his EXP.
Add config flag that after player died - he got -1 stat point (couldb e used instead of -exp). Ideally also make player drop stat point, so other players could pick it up.
Also there should be a restricting, that stats can not drop below basic value (starting summ of stat points).
remove message about cancelling quest as it spams chat window when you 'roll' quests
sometimes when you apply elven (100%) curse to monster - he could still make a ful blow at you. Very low chance, but happens (proof: https://www.youtube.com/watch?v=Q5GTYxISuI8 )
to make mage more viable in PvP: to add damage multiplicator for mage's spells which will work only on other players in PvP, but monsters will receive the same damage as it written in data.
ZZYZX said that it's possible to do @ OnDamage:
if (player1 && player2 && !*(uint32_t*)(player1+0x2C) && !*(uint32_t*)(player2+0x2C) &&
(*(uint8_t*)(unit1+0x4C) & 4))
damage *= 3;
RoM2 got 4 classes - male warrior, female warrior (amazon), male wizard, female wizard (witch).
But people use only male warrior and wizards cause max stat got more 'body' stat. Current max stats:
Warrior | 52 | 50 | 48 | 46
Amazon | 50 | 52 | 46 | 48
Wizard | 48 | 46 | 52 | 50
Witch | 46 | 48 | 50 | 52
The idea is change amazon/witch max stats to make them compatible to male classes. Eg, if amazon would have max stats:
48 52 52 52 (so amazon would have 99 protection from magic, but much less HP).
it would make it compatible to male warrior; and useful in certain situations (this particular values is just an example, we would have to experiment with them to find right balance).
So task is to add new constants in server config:
amazon_body
amazon_agility
amazon_mind
amazon_spirit
witch_body
witch_agility
witch_mind
witch_spirit
To do so we need to find certain spots in the code which got this constants. It's possible to do it if we would use IDA and drink stat potions near the maximmum value
when you aggravate hero and then use big-range teleport away OR die inside 'darkness' spell and then mob cast invisibility on itself - monster could 50/50 chance to become bug-invisible (won't come out from invisibility). could be fixed only by relogin
Make taverns show more quests, because right now players has to cancel quests often to 'move queue' so there will be better quests.
I suppose it's possible to show much more quests in tavern, like in two rows
as we have international hat - it would be nice to allow character nicknames in English
It's quite low priority.. an explanation - atm foreign players can't write PM to people with cyrillic nicknames
right now quest radius in tavern is 64 tiles (approximately)... it will be fun to make it 240 or even bigger, to it will be possible to get quests all around map
We are designing new quest map progress: each quest map will have only one item at the end.. It will be like a dungeon which you have to go through to get the prize.. And it's only one prize, free for all.
The problem is that some players will be able to steal the prize right under the nose of people who cleared all the way. In general stealing is alright and there is PvP to prevent it, but the problem is that there is possibility for a players to ressurect again and again, teleporting to in vein to get the prize. Even with exp loss some players might consider to ressurect a lot of times just to get an item (as it takes 2 hours to get from 0 exp to 95 skill).
To prevent such behaivour could be such solution:
add server flag "prevent_ressurection"
if this flag is ON on server configuration -> any player won't have possibility to ressurect upon death (so player has to 'alt+f4' and wait 5 minutes, so hat will release his character and player will be able to contunie playing).
It will give feeling of battle-royale for quest maps... "There can be only one" ;)
Atm I see two ways to implement such design:
currently max damage in A2 is 400. it would be fun to remove this limitation for two-handed weapons
Add possibility to assign CD (cooldown - period in which spell can not be used after you used it) on spells, eg so it will be possible to assign teleportation CD to 2 seconds.
shaman 4-5 drop bugged staves
the looks like this outdoors:
https://cdn.discordapp.com/attachments/623619510645161984/674884739424976911/unknown.png
and like this in shop:
https://cdn.discordapp.com/attachments/623619510645161984/674885959279575060/unknown.png
Spell:
Animate dead (corpse)
Raises zombie, skeleton, or ghost from a unit's corpse
We need to limit max hitpoints of ghosts/skeletons/zombies summoned by player-mage by 'Animate dead' spell..
Because right now mages use ghosts from lvl 5 mobs to use them as unkillable tanks, which is wrong (as we reduce DPS from mobs atm, warriors will be able to tank and should do it instead of ghosts).
Was fixed a bit via reducing lvl 5 mobs HPs
if player teleport far away (radius more then character vision) and use invisibility - his 'clone' stays in his spot. Other players are able to attack this 'clone' so they would track character even in invisibility
The most ezpz fix for #21 would be to create auto-restarting script. So server would auto-close once per day (at 4am msk) and then restart to purge memory. And to add notification abotu restart before 15, 10, 5 minutes
Map: beach_t1.alm : https://github.com/igroglaz/rom2maps/blob/master/3%20hard/beach_t1.alm
if I delete bottom respawn point - map starts to crush server with error:
[18.01.2020 10:52:59.448] Server started.
[18.01.2020 10:52:59.520] EXCEPTION DUMP:
eax=00000000h,ebx=0000000Dh,ecx=00000000h,edx=0018ED4Ch,
esp=0018ED10h,ebp=0018ED18h,esi=00000457h,edi=0217DAF8h;
eip=0059FF27h;
addr=0059FF27h,code=C0000005h,flags=00000000h
[18.01.2020 10:52:59.520] BEGIN STACK TRACE: 0x0059FF27h <= 0059C3DBh <= 0059BDC2h <= 004F1801h <= 0048E71Ch <= 004882AEh <= 005E0988h <= 005E0C3Eh <= 768F8E71h <= 768F90D1h <= 768FA66Fh <= 76925D00h <= 005DEA73h <= END STACK TRACE
[18.01.2020 10:52:59.525] Exception was caught, but there is no map. Not saving characters.
Warbeginner:
how such return could appear?
0059C3D6 |. E8 00FBFFFF CALL 0059BEDB ; \a2serv1.0059BEDB
!0059C3DB | 8D4D EC LEA ECX,[LOCAL.5]
из этого (обозримого даже в hiew):
0059FF10 /$ 55 PUSH EBP ; a2serv1.0059FF10(guessed Arg1)
0059FF11 |. 8BEC MOV EBP,ESP
0059FF13 |. 83EC 08 SUB ESP,8
0059FF16 |. 894D F8 MOV DWORD PTR SS:[LOCAL.2],ECX
0059FF19 |. 8B45 08 MOV EAX,DWORD PTR SS:[ARG.1]
0059FF1C |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0059FF1E |. 894D FC MOV DWORD PTR SS:[LOCAL.1],ECX
0059FF21 |. 8B55 08 MOV EDX,DWORD PTR SS:[ARG.1]
0059FF24 |. 8B45 FC MOV EAX,DWORD PTR SS:[LOCAL.1]
!0059FF27 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0059FF29 |. 890A MOV DWORD PTR DS:[EDX],ECX
0059FF2B |. 8B45 FC MOV EAX,DWORD PTR SS:[LOCAL.1]
0059FF2E |. 83C0 08 ADD EAX,8
0059FF31 |. 8BE5 MOV ESP,EBP
0059FF33 |. 5D POP EBP
0059FF34 . C2 0400 RETN 4
ZZYZX (in Russian from discord):
12:07]ZZYZX:А это не тот же самый краш где нулевой итем?
[12:08]ZZYZX:А удаление точки просто перезаписывает карту, вот оно и фиксится
[12:08]ZZYZX:Хотя посмотреть надо)
[12:10]ZZYZX:ух ты
[12:10]ZZYZX:Это вообще как
[12:12]ZZYZX:Выглядит как как будто во время итерации по списку (чуть ли не с помощью std::...::iterator) чего-то там оказывается нулл
[12:12]ZZYZX:Вопрос в том, почему нет проверки
[12:20]ZZYZX:Там такая конструкция странная которая не очень декомпилится идой
[12:20]ZZYZX:
Attachment file type: unknown
unknown.png
7.32 KB
[12:20]ZZYZX:Суть в том что sub_59BEDB принимает два аргумента
[12:21]ZZYZX:а arg_0, это аргумент как раз в 59AB40, которое и крашится
[12:21]ZZYZX:а хотя не)
[12:21]ZZYZX:Даже веселее
[12:21]ZZYZX:В 59AB40 вообще нету аргумента
[12:21]ZZYZX:Но при этом изнутри он читается
[12:21]ZZYZX:Как — мне непонятно
[12:22]ZZYZX:так
[12:22]ZZYZX:чё-т я куда-то не туда смотрю :D
[12:22]ZZYZX:Там стек чтоли кривой какой-то
[12:24]ZZYZX:0059FF27h <= 0059C3DBh это никак не получится, потому что перед 0059C3DBh стоит вызов 59BEDB а не 59FF10 -_-
[12:26]ZZYZX:Вывод, настоящий вызов находится внутри 59BEDB вот тут:
[12:26]ZZYZX:
Attachment file type: unknown
unknown.png
18.04 KB
[12:26]ZZYZX:Хоть стеку и не соответствует, зато ближайший)
[12:32]ZZYZX:У меня только один вопрос, на хуя это вообще делается
Attachment file type: unknown
unknown.png
6.88 KB
[12:32]ZZYZX:Этот код условно не делает вообще ничего
[12:32]ZZYZX:а, не, делает, кстати) он ставит a1=*a1, условно. Просто изнутри это выглядит как *a1 = **a1
[12:32]ZZYZX:В общем я примерно понял что происходит
[12:33]ZZYZX:Там какой-то linked list
[12:33]ZZYZX:Который кончается раньше
[12:33]ZZYZX:Чем указано в его размере (v23[3])
[12:34]ZZYZX:Происходит всё это мракобесие в конце загрузки карты
[12:34]ZZYZX:Скорее всего опять редактор какую-то дичь туда записал
[12:35]ZZYZX:Сохраните карту потом посмотреть чё с ней)
[12:35]ZZYZX:а. Был файл
[12:36]ZZYZX:В общем самый простой способ пофиксить конкретно это — проверять, что нулл (a1==0), перед вызовом 59FF10 (не внутри!)
temporary workaround on 'map' side - changed this respawn point to proper place..
Add skill limits for different classes. Eg
warrior
maximum 100 pike
maximum 110 axe
maximum shooting 70amazon
110 pike
100 axe
110 shooting
So we need such parameters in server config:
warrior_blade_max_skill
warrior_axe_max_skill
warrior_bludgeon_max_skill
warrior_pike_max_skill
warrior_shooting_max_skill
amazon_blade_max_skill
amazon_axe_max_skill
amazon_bludgeon_max_skill
amazon_pike_max_skill
amazon_shooting_max_skill
mage_fire_max_skill
mage_water_max_skill
mage_air_max_skill
mage_earth_max_skill
mage_astral_max_skill
witch_fire_max_skill
witch_water_max_skill
witch_air_max_skill
witch_earth_max_skill
witch_astral_max_skill
as we will have new quest map concept (a lot of quest maps, like ~24; each one will have one item in the boss) it will be fun to be able to randomize order of their appearence; so players will be able to get certain equipment no matter of their timezone.
Our server restarts every 24 hours, so having 24 maps (each map for 1 hour) - we have full cycle once per day, till restart.
The bug is related to magic duration when corresponding skill is high enough.
When magic duration is supposed to be more than 4096sec
, overflow occurs and counter starts from zero.
Here is an example:
Case 1
Astral: 192
Magic shield duration: 3944sec
Case 2 (Overflow)
Astral: 194
Magic shield duration: 47.6sec
add stuff from https://github.com/jewalky/srvmgr/commits/master
at softcore mode quests in taverns doesn't give exp. some players have complains over this mechanics, so I suppose good solution would be to add option in server config - to allow/disallow exp as reward in tavern. then we could make easy and middle maps with quest exp allowed
We need to be able to reduce Stone Curse effect drammatically, so it will work like temporary 'stun'. I've reduced 1 (out from 10), but it doesn't give any effect apparently:
<empty>0</empty>
<name>Stone Curse</name>
<level>20</level>
<manaCost>40</manaCost>
<sphere>4</sphere>
<item>0</item>
<spellTarget>1</spellTarget>
<deliverySystem>1</deliverySystem>
<maxRange>5</maxRange>
<effectSpeed>0</effectSpeed>
<distribution>1</distribution>
<radius>0</radius>
<areaAffect>0</areaAffect>
<areaDuration>0</areaDuration>
<areaFrequency>0</areaFrequency>
<unitApplyMethod>2</unitApplyMethod>
<duration>1</duration>
<frequency>0</frequency>
<damageMin>-1</damageMin>
<damageMax>-1</damageMax>
<defensive>-1</defensive>
<skillOffset>0</skillOffset>
<scrollCost>10000</scrollCost>
<bookCost>999000000</bookCost>
<effect>"absorbtion=+5:duration 1,defence=-20:duration 1"</effect>
So I suppose this value hardcoded somehow.
Task if to add modifier to server config file which will allow changing this Stone Curse max duration.
sometime elven scroll of earth protection applied as it was common scrolls. the same to other scrolls. it's a very rare chance, but it happens sometimes.
Several scrolls disappears at once when use you them too fast
There is a problem with server:
when I launch it - initially the RAM load is 40%. but gradually, it grows - in 9 hours it become ~60% and after a while it become close to 100% (even if there are no players on the hat). Apparently after each map change - server crookedly cleans the memory buffer or something
So without periodic reboots, the hat cannot work in principle.
in data file there is no 'stone curse' and 'vampirism' item's volume.. so we can not change certain items properties. we need to add such function.. to add it in data or just add some formulas to server code
Add limits for maximum skill value per different map difficulties - so players will have access for quests for longer time, because right now if you have more than 60 skill at easy map - you won't receive any quest in tavern (amount of overal exp counts).
We could use such values:
easy 60
medium 95
hard 100
horror 110
there is a forbidden (bannable offence!) way to put monster on respawn point:
Nikolai:
when dragon cast darkness and I've got ogre near me - my warrior doesnt hit him, but ogre hit me.
also if you start moving in darkness, slide show starts. you stay on the spot, then suddenly appear on tile next to you.. also heal doesnt work while it happens
add limits for max magic resistance values for different classes, eg:
warrior would have max earth resistance 94
amazon max earth 99
etc..
Flags for config:
warrior_fire_max_res
warrior_water_max_res
warrior_air_max_res
warrior_earth_max_res
warrior_astral_max_res
amazon_fire_max_res
amazon_water_max_res
amazon_air_max_res
amazon_earth_max_res
amazon_astral_max_res
mage_fire_max_res
mage_water_max_res
mage_air_max_res
mage_earth_max_res
mage_astral_max_res
witch_fire_max_res
witch_water_max_res
witch_air_max_res
witch_earth_max_res
witch_astral_max_res
Witch receives spirit & body potions even if you have max stats (43 body, 48 agility, 52 spirit). Example Halodd had an issue that he wasn't able to get Mind potions as quest rewards (only via trading with community or creating new account). At this part his stats were somewhere around 43, 48, 54, 52
When player trying to upgrade vamp staff in tavern and it's 17-25 already - it gives message about 'cheating' and removes other random staff from inventory (not vamp); eg removed spray staff from our player
klen312 (Мафусаил):
Eg on the 'RedHat' map. Quest "Kill a group of enemies" with a portrait of a demon. Killed a demon - the quest is not ready. The demon rises - you kill again. Quest completed... So to complete demon quest you have to kill it twice..
eg zombie 4-5 doesn't cast stone curse after you kill them for the first time.
Right now there are flags for experience: when the PK kill player - experience is not lost, and when the mob kills players - exp lost. Next task is to attach the 'nodrop' flag to a specific case - when player kill other player. So when someone PK other player 'manually' - this player won't loose equipment.
This is possible to implement. ZZYZX said:
Somewhere there is a pointer to the one who beat you for the last time. Arena murder messages works with this popinter. For example, if you hit someone with fire and then use #kill command on him - then game will write about fire. That is, there exist logic which checks who and what beat the last time, and is not activated directly when dealing damage.
WarBeginner implemented different exp flags, but they doesn't work properly:
**
https://github.com/igroglaz/srvmgr/commit/a2a78d2ad34093d390a3db861022baeec97259d0
**
I've tested this config:
DeathExpMult=0.9
KilledExpMult=1
PKExpMult=1
RespawnExpMult2=1
I died 2 time from player, then died from monster...
Then entered on 'Horror' and died from monsters.
My experience become:
-1333333
Also one other guys had such exp when died !on each skill!:
blade 4294958543
axe 4294947424
bludgeon 18136
pike 128313
shooting 4294961710
if you stay on the map for a long time, then you will get less experience; it is fixed by the camping from the map and re-enterin back.. It's like this: when you enter you get 100% per blow, at the end of map onlt 1-2%.
To fix it we should make exp amount always equal
staff attack distance could be significally increased if you would put auto-attack with fireball while staff in hand
Add physical resistance values for different classes. This values won't be visible in UI, but they would add flavour to class system. Eg warriors would be more resistant to blugeon, amazons to sword, mage/witch to pike.
warrior_blade_res
warrior_axe_res
warrior_bludgeon_res
warrior_pike_res
warrior_shooting_res
amazon_blade_res
amazon_axe_res
amazon_bludgeon_res
amazon_pike_res
amazon_shooting_res
mage_blade_res
mage_axe_res
mage_bludgeon_res
mage_pike_res
mage_shooting_res
witch_blade_res
witch_axe_res
witch_bludgeon_res
witch_pike_res
witch_shooting_res
The same stuff could be made for magic resistances - so each class will have different flavour
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.