|
You last visited: Today at 14:50
Advertisement
vSRO-ServerAddon (C++/DLL)
Discussion on vSRO-ServerAddon (C++/DLL) within the SRO PServer Guides & Releases forum part of the SRO Private Server category.
07/27/2021, 01:59
|
#76
|
elite*gold: 0
Join Date: Oct 2019
Posts: 47
Received Thanks: 4
|
yes please add
Please add
- Split exp / sp rate
- SOX Drop rate
|
|
|
07/27/2021, 02:36
|
#77
|
elite*gold: 0
Join Date: Jun 2007
Posts: 718
Received Thanks: 378
|
Awesome project !
If you want to add "Astral failback" to + 4, here opcode:
Quote:
Originally Posted by gigola123
on your gameserver just change those:
00506D92 CMP EBX,4
00506DD2 MOV CL,4
Just change 4 by the new "+" you want after astral does effect.
Make sure to change both ! Because the first line (CMP EBX,4) check if the item "+" is greater or equal to 4, if it stay at "CMP EBX,4", people who will put astral from +4 to +5 which fail, will go directly to the value that you put on CL.
|
|
|
|
07/27/2021, 23:09
|
#78
|
elite*gold: 0
Join Date: May 2020
Posts: 8
Received Thanks: 1
|
Quote:
Originally Posted by WolfgangNeverDie
Please add
- Split exp / sp rate
- SOX Drop rate
|
cc
|
|
|
07/28/2021, 13:20
|
#79
|
elite*gold: 100
Join Date: Sep 2017
Posts: 1,097
Received Thanks: 889
|
In case anyone might need it, here's beginner marker option level limit:
Code:
00518B99 | 8078 66 13 | cmp byte ptr ds:[eax+66],13 | Beginner Marker Level Limit
(edit: never mind, seems like you already have it)
|
|
|
07/28/2021, 14:05
|
#80
|
elite*gold: 0
Join Date: Jul 2013
Posts: 481
Received Thanks: 317
|
Quote:
Originally Posted by JellyBitz
Hello there!
Customize Silkroad Online server files (v1.188) behavior through DLL injection.
Features:- Patch values from memory directly
- Define all options from the respective config file
- Easy to inject using STUD_PE
- Execute actions from Gameserver (the first gameserver running will execute these actions)
Preview:
Gameserver Action (Example):
- Adds item(s) to the inventory from character
PHP Code:
INSERT INTO [SRO_VT_SHARD].[dbo].[_ExeGameServer] ( Action_ID, CharName16, Param01, -- CodeName Param02, -- Amount Param03, -- Randomize stats Param04 -- Plus ) VALUES ( 1, 'JellyBitz', 'ITEM_EU_SWORD_01_A', 1, 0, 3 );
- Updates the gold amount from character by increasing (positive) or decreasing (negative)
PHP Code:
INSERT INTO [SRO_VT_SHARD].[dbo].[_ExeGameServer] ( Action_ID, CharName16, Param02 -- Gold Offset ) VALUES ( 2, 'JellyBitz', 10000000 -- Increase by 10m );
- ... Everything else on .
Full info on GitHub:
Latest version:
|
Dude we need all this in your project
//Cap
#define CHAR_MAX_LEVEL_OFFSET 0x5094E0
#define PET_MAX_LEVEL_OFFSET 0x004D641E
#define CH_MASTERY_MAX_LEVEL_OFFSET 0x0059C5E7
#define EU_MASTERY_MAX_LEVEL_OFFSET 0x00B46130
//Rates
#define RATE_LIMIT_BYPASS_INDIVIDUAL_OFFSET 0x0042714E
#define RATE_LIMIT_BYPASS_PARTY_OFFSET 0x004271F7
#define RATE_LIMIT_BYPASS_DROP_ITEM_RATIO_OFFSET 0x004272A2
#define RATE_LIMIT_BYPASS_DROP_GOLD_RATIO_OFFSET 0x0042734B
//Null instance fix
#define GOBJ_GET_CHAR_NAME_FUNC_OFFSET 0x004A66D0
#define GOBJ_GET_NICK_NAME_FUNC_OFFSET 0x004DDC50
//Green book
#define GREEN_BOOK_NOP_OFFSET_1 0x004142E2
#define GREEN_BOOK_NOP_OFFSET_2 0x0041474D
//Quest
#define QUEST_RAISE_EVENT_DISABLE_MSG_OFFSET 0x005805C8
//Flag world
#define FLAG_WORLD_KILL_REWARD_CODENAME_OFFSET 0x005F19AA
#define FLAG_WORLD_KILL_REWARD_COUNT_OFFSET 0x005F1998
#define FLAG_WORLD_WIN_REWARD_CODENAME_OFFSET 0x00646D43
#define FLAG_WORLD_WIN_REWARD_COUNT_OFFSET 0x00646D41
//Arena
#define BATTLE_ARENA_REWARD_CODENAME_OFFSET 0x006691C7
#define BATTLE_ARENA_GUILD_AND_JOB_WIN_REWARD_COUNT_OFFSET 0x0066915C
#define BATTLE_ARENA_GUILD_AND_JOB_LOSE_REWARD_COUNT_OFFSE T 0x00669177
#define BATTLE_ARENA_PARTY_AND_RANDOM_WIN_REWARD_COUNT_OFF SET 0x00669163
#define BATTLE_ARENA_PARTY_AND_RANDOM_LOSE_REWARD_COUNT_OF FSET 0x0066917E
//PK
#define PK_MIN_LEVEL_OFFSET 0x005295DB
#define PK_MIN_LEVEL_FOR_ITEM_DROP_OFFSET 0x004E6A34
//Job
#define JOB_MAX_LEVEL_OFFSET 0x0060DE6C
#define JOB_DISABLE_JOB_NPC_SPAWN_OFFSET 0x0060C4AB
#define JOB_TEMPLE_ENTRY_BUTTON_LEVEL_OFFSET 0x0051AE72
#define JOB_TEMPLE_AP_LEVEL_OFFSET 0x0051ABE9
//Guild
#define GUILD_UNION_MAX_CHAT_PLAYERS_OFFSET 0x005C4B46
#define GUILD_LEVEL_REQ_FOR_MERCENARY_SPAWN_OFFSET 0x004FD02B
#define GUILD_ALLOW_NON_GM_SPAWN_MERCENARIES_OFFSET 0x004FD045
#define GUILD_DISABLE_GRANT_NAME_RESTRICTION_OFFSET_1 0x00517C20
#define GUILD_DISABLE_GRANT_NAME_RESTRICTION_OFFSET_2 0x005C75AB
//Alchemy
#define ALCHEMY_MIN_ITEM_LEVEL_FOR_ASTRAL_TAKING_EFFECT_OF FSET 0x00506D94
#define ALCHEMY_ITEM_LEVEL_FOR_ASTRAL_RECOVERY_OFFSET 0x00506DD3
#define ALCHEMY_DROP_ITEM_MAX_PLUS_CHECK_OFFSET 0x004AA74C
//Academy
#define ACADEMY_CREATION_LEVEL_REQUIREMENT_OFFSET 0x004E46C5
#define ACADEMY_CREATION_GOLD_REQUIREMENT_OFFSET 0x004E46E2
#define ACADEMY_MAX_SUB_MENTOR_COUNT_OFFSET 0x005E4457
#define ACADEMY_MAX_APPRENTICES_COUNT_OFFSET 0x005E44D7
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_1 0x005192CF
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_1 0x00519304
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_2 0x005196CE
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_2 0x00519713
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_3 0x00519885
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_3 0x00519895
#define ACADEMY_DISBAND_PENALTY_OFFSET 0x005DD36B
//Monster
#define MONSTER_GIANT_SPAWN_DISABLE_PATCH_OFFSET_1 0x0056093C
#define MONSTER_GIANT_SPAWN_DISABLE_PATCH_OFFSET_2 0x0056093F
//NPC
#define NPC_SET_AVAILABLE_INTERACTIONS_FUNC_OFFSET 0x004C6350
#define NPC_ADD_AVAILABLE_INTERACTION_FUNC_OFFSET 0x004C3F50
#define NPC_MAX_LEVEL_TO_TELEPORT_AT_DEATH_POS__OR_RECALL_ POINT_OFFSET 0x004F36F4
//Misc, Client side for ressurect at same pos offset = 0x00797E21
#define MISC_MAX_LEVEL_FOR_RESSURECT_AT_SAME_POS_OFFSET 0x00510180
//Other
#define MSG_WRITE_OUT_FUNC_OFFSET 0x00936640
//Pet
#define GRAB_PET_INVENTORY_SIZE_OFFSET 0x004D6F9F
#define GRAB_PET_PAGE_FIX_OFFSET 0x004FBD8A
//Inline hooks, kinda mess to use dwords here but ok for now
const DWORD ORIG_UNIQUE_ENTERED_MSG_CALL_ADDR = 0x00936640;
const DWORD ORIG_UNIQUE_KILLED_MSG_CALL_ADDR = 0x00936640;
const DWORD UNIQUE_ENTERED_MSG_HOOK_JUMPBACK = 0x00414DB5;
const DWORD UNIQUE_KILLED_MSG_HOOK_JUMPBACK = 0x00414BAE;
const DWORD UNIQUE_ENTERED_MSG_HOOK_ADDR = 0x00414DB0;
const DWORD UNIQUE_KILLED_MSG_HOOK_ADDR = 0x00414BA9;
|
|
|
07/30/2021, 11:11
|
#81
|
elite*gold: 0
Join Date: Sep 2016
Posts: 31
Received Thanks: 0
|
thank You
|
|
|
08/10/2021, 11:23
|
#82
|
elite*gold: 0
Join Date: Jul 2013
Posts: 481
Received Thanks: 317
|
Quote:
Originally Posted by therock2007e
Dude we need all this in your project
//Cap
#define CHAR_MAX_LEVEL_OFFSET 0x5094E0
#define PET_MAX_LEVEL_OFFSET 0x004D641E
#define CH_MASTERY_MAX_LEVEL_OFFSET 0x0059C5E7
#define EU_MASTERY_MAX_LEVEL_OFFSET 0x00B46130
//Rates
#define RATE_LIMIT_BYPASS_INDIVIDUAL_OFFSET 0x0042714E
#define RATE_LIMIT_BYPASS_PARTY_OFFSET 0x004271F7
#define RATE_LIMIT_BYPASS_DROP_ITEM_RATIO_OFFSET 0x004272A2
#define RATE_LIMIT_BYPASS_DROP_GOLD_RATIO_OFFSET 0x0042734B
//Null instance fix
#define GOBJ_GET_CHAR_NAME_FUNC_OFFSET 0x004A66D0
#define GOBJ_GET_NICK_NAME_FUNC_OFFSET 0x004DDC50
//Green book
#define GREEN_BOOK_NOP_OFFSET_1 0x004142E2
#define GREEN_BOOK_NOP_OFFSET_2 0x0041474D
//Quest
#define QUEST_RAISE_EVENT_DISABLE_MSG_OFFSET 0x005805C8
//Flag world
#define FLAG_WORLD_KILL_REWARD_CODENAME_OFFSET 0x005F19AA
#define FLAG_WORLD_KILL_REWARD_COUNT_OFFSET 0x005F1998
#define FLAG_WORLD_WIN_REWARD_CODENAME_OFFSET 0x00646D43
#define FLAG_WORLD_WIN_REWARD_COUNT_OFFSET 0x00646D41
//Arena
#define BATTLE_ARENA_REWARD_CODENAME_OFFSET 0x006691C7
#define BATTLE_ARENA_GUILD_AND_JOB_WIN_REWARD_COUNT_OFFSET 0x0066915C
#define BATTLE_ARENA_GUILD_AND_JOB_LOSE_REWARD_COUNT_OFFSE T 0x00669177
#define BATTLE_ARENA_PARTY_AND_RANDOM_WIN_REWARD_COUNT_OFF SET 0x00669163
#define BATTLE_ARENA_PARTY_AND_RANDOM_LOSE_REWARD_COUNT_OF FSET 0x0066917E
//PK
#define PK_MIN_LEVEL_OFFSET 0x005295DB
#define PK_MIN_LEVEL_FOR_ITEM_DROP_OFFSET 0x004E6A34
//Job
#define JOB_MAX_LEVEL_OFFSET 0x0060DE6C
#define JOB_DISABLE_JOB_NPC_SPAWN_OFFSET 0x0060C4AB
#define JOB_TEMPLE_ENTRY_BUTTON_LEVEL_OFFSET 0x0051AE72
#define JOB_TEMPLE_AP_LEVEL_OFFSET 0x0051ABE9
//Guild
#define GUILD_UNION_MAX_CHAT_PLAYERS_OFFSET 0x005C4B46
#define GUILD_LEVEL_REQ_FOR_MERCENARY_SPAWN_OFFSET 0x004FD02B
#define GUILD_ALLOW_NON_GM_SPAWN_MERCENARIES_OFFSET 0x004FD045
#define GUILD_DISABLE_GRANT_NAME_RESTRICTION_OFFSET_1 0x00517C20
#define GUILD_DISABLE_GRANT_NAME_RESTRICTION_OFFSET_2 0x005C75AB
//Alchemy
#define ALCHEMY_MIN_ITEM_LEVEL_FOR_ASTRAL_TAKING_EFFECT_OF FSET 0x00506D94
#define ALCHEMY_ITEM_LEVEL_FOR_ASTRAL_RECOVERY_OFFSET 0x00506DD3
#define ALCHEMY_DROP_ITEM_MAX_PLUS_CHECK_OFFSET 0x004AA74C
//Academy
#define ACADEMY_CREATION_LEVEL_REQUIREMENT_OFFSET 0x004E46C5
#define ACADEMY_CREATION_GOLD_REQUIREMENT_OFFSET 0x004E46E2
#define ACADEMY_MAX_SUB_MENTOR_COUNT_OFFSET 0x005E4457
#define ACADEMY_MAX_APPRENTICES_COUNT_OFFSET 0x005E44D7
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_1 0x005192CF
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_1 0x00519304
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_2 0x005196CE
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_2 0x00519713
#define ACADEMY_SUB_MENTOR_LEVEL_REQUIREMENT_OFFSET_3 0x00519885
#define ACADEMY_APPRENTICE_LEVEL_REQUIREMENT_OFFSET_3 0x00519895
#define ACADEMY_DISBAND_PENALTY_OFFSET 0x005DD36B
//Monster
#define MONSTER_GIANT_SPAWN_DISABLE_PATCH_OFFSET_1 0x0056093C
#define MONSTER_GIANT_SPAWN_DISABLE_PATCH_OFFSET_2 0x0056093F
//NPC
#define NPC_SET_AVAILABLE_INTERACTIONS_FUNC_OFFSET 0x004C6350
#define NPC_ADD_AVAILABLE_INTERACTION_FUNC_OFFSET 0x004C3F50
#define NPC_MAX_LEVEL_TO_TELEPORT_AT_DEATH_POS__OR_RECALL_ POINT_OFFSET 0x004F36F4
//Misc, Client side for ressurect at same pos offset = 0x00797E21
#define MISC_MAX_LEVEL_FOR_RESSURECT_AT_SAME_POS_OFFSET 0x00510180
//Other
#define MSG_WRITE_OUT_FUNC_OFFSET 0x00936640
//Pet
#define GRAB_PET_INVENTORY_SIZE_OFFSET 0x004D6F9F
#define GRAB_PET_PAGE_FIX_OFFSET 0x004FBD8A
//Inline hooks, kinda mess to use dwords here but ok for now
const DWORD ORIG_UNIQUE_ENTERED_MSG_CALL_ADDR = 0x00936640;
const DWORD ORIG_UNIQUE_KILLED_MSG_CALL_ADDR = 0x00936640;
const DWORD UNIQUE_ENTERED_MSG_HOOK_JUMPBACK = 0x00414DB5;
const DWORD UNIQUE_KILLED_MSG_HOOK_JUMPBACK = 0x00414BAE;
const DWORD UNIQUE_ENTERED_MSG_HOOK_ADDR = 0x00414DB0;
const DWORD UNIQUE_KILLED_MSG_HOOK_ADDR = 0x00414BA9;
|
Dude need this offest
MISC_MAX_LEVEL_FOR_RESSURECT_AT_SAME_POS_OFFSET 0x00510180
And
Pet
#define GRAB_PET_INVENTORY_SIZE_OFFSET 0x004D6F9F
#define GRAB_PET_PAGE_FIX_OFFSET 0x004FBD8A
|
|
|
08/10/2021, 18:51
|
#83
|
elite*gold: 0
Join Date: Sep 2018
Posts: 344
Received Thanks: 770
|
v1.0.3.0 has been released yesterday.
Quote:
Originally Posted by therock2007e
#define GRAB_PET_INVENTORY_SIZE_OFFSET 0x004D6F9F
#define GRAB_PET_PAGE_FIX_OFFSET 0x004FBD8A
|
Please, make sure the patch is working before requesting.
I know what's the issue about grab pet inventory and I'm pretty sure a jmp instruction will not fix it.
|
|
|
08/10/2021, 20:09
|
#84
|
elite*gold: 0
Join Date: Apr 2017
Posts: 987
Received Thanks: 456
|
Quote:
Originally Posted by JellyBitz
v1.0.3.0 has been released yesterday.
Please, make sure the patch is working before requesting.
I know what's the issue about grab pet inventory and I'm pretty sure a jmp instruction will not fix it.
|
If you use jmp some scrolls ill give a disconnect. (pet scrolls)
|
|
|
08/11/2021, 05:49
|
#85
|
elite*gold: 260
Join Date: Aug 2008
Posts: 560
Received Thanks: 3,752
|
I don't think it's been posted, but if it has, please ignore.
I recently wanted to make a full party with all level 1 characters. The following GameServer logic can be modified to change the minimal level required for creating a party from 5 to whatever.
I've been doing a lot of testing on the EU side of things, and the level 1 mobs there do still swarm the party, so it's not completely useless.
Code:
00513FEA | FFD0 | call eax
00513FEC | 3C 05 | cmp al, 0x5 | can increase/decrease this level for a speciality server
00513FEE | 73 06 | jae 0x513FF6 | or could just force jmp to allow parties from every level, but less flexible
00513FF0 | 66:B8 0A2C | mov ax, 0x2C0A | error code for character level too low to make a party
00513FF4 | 59 | pop ecx
00513FF5 | C3 | ret
|
|
|
08/23/2021, 04:27
|
#86
|
elite*gold: 0
Join Date: Sep 2018
Posts: 344
Received Thanks: 770
|
v1.0.4.0 has been released. Everything is on Github as usual.
|
|
|
08/30/2021, 11:11
|
#87
|
elite*gold: 0
Join Date: Sep 2011
Posts: 117
Received Thanks: 29
|
Hi! First of all, thank you for this!
How could we use it with multiple gameservers? It seems that only one gameserver is executing actions. Maybe I am doing something wrong...
Thank you in advance and keep up!
|
|
|
08/31/2021, 20:45
|
#88
|
elite*gold: 0
Join Date: Sep 2018
Posts: 344
Received Thanks: 770
|
Quote:
Originally Posted by thehaifisch
How could we use it with multiple gameservers? It seems that only one gameserver is executing actions.
|
I never tried actually. So I'm not aware about the issues can be over there.
|
|
|
08/31/2021, 22:40
|
#89
|
elite*gold: 0
Join Date: Sep 2011
Posts: 117
Received Thanks: 29
|
Quote:
Originally Posted by JellyBitz
I never tried actually. So I'm not aware about the issues can be over there.
|
Forgot to add that all 3 gameservers read the ini correctly and also write into the LOG DB. But only one of them is putting out in these 3 lines in the debug console:
Code:
* Initializing database fetch to execute actions...
- Waiting 1min before start fetching...
- Fetching started!
Every time the server modules are started it is completely random which of the gameservers will execute functions.
Maybe some of you already tried it and have some experience running with multiple GS?
Edit: I realized it is by design
Code:
CreateMutexA(0, FALSE, "JellyBitz/vSRO-GameServer");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// Avoid create fetch connection
return;
}
Without this part, all GS could process the records from _ExeGameServer but we would have to solve the second problem where only the first GS to grab any record would actually process it because it would no longer have the Action_Result UNKNOWN by the time the other gameservers get to it.
It might be a dumb idea but do gameservers have IDs? If yes, we could have as many tables as there are gameservers all named for example _ExeGameServer_ID and would insert desired actions into all such tables. I think it wouldn't hurt as all GS would process their respective tables but only one gameserver would return SUCCESS and execute the action because the others would return CHARNAME_NOT_FOUND.
Of course this is just an idea and there are probably better ways to solve this. I am nowhere near that level to evaluate that.
|
|
|
09/01/2021, 03:06
|
#90
|
elite*gold: 0
Join Date: Sep 2018
Posts: 344
Received Thanks: 770
|
Quote:
Originally Posted by thehaifisch
... we could have as many tables as there are gameservers ...
Of course this is just an idea and there are probably better ways to solve this.
|
I had some ideas but as I said, I never tried since I don't have this setup at the moment.
Synchronize a process in the same machine it's easy actually but it gets complicated when we are talking about a process between multiples machines. At this case, yes, creating another table will avoid desyncronization but as result you'll have to deal with "CHARNAME_NOT_FOUND" by checking all tables before take some conclusion.
Just hit me up on Discord if you want to try the latest changes.
|
|
|
|
|
Similar Threads
|
[INFO]About missing msvcr100.dll / msvcp100.dll and other missing dll files
08/22/2017 - S4 League Hacks, Bots, Cheats & Exploits - 106 Replies
English
Maybe if you wanna start a hack from Elitepvpers you will get this Error:
or a similar message
This dll files are for programs written in C/C++ with Visual Studio
To fix this problem you need to download the Microsoft Visual C++ 2010 Redistributable Package (x86) from here: Download Microsoft Visual C++ 2010 Redistributable Package (x86) from Official Microsoft Download Center
If you have a 64-Bit System you also need the Microsoft Visual C++ 2010 Redistributable Package...
|
[HOW TO] MSVCR110.dll fehlt BEHEBEN | [MSVCR120.dll MSVCP110.dll MSVCP100.dll etc]
03/25/2014 - Tutorials - 2 Replies
Hier ist ein Youtube Video:
MSVCR100.dll feht BEHEBEN / MSVCR110.dll fehlt MSVCR120.dll MSVCP110.dll MSVCP100.dll MSVCP120.dll - YouTube
Aber den ganzen Kram könnt ihr auch als Text haben:
Viele von euch kennen bestimmt das Problem das ne dll auf dem PC fehlt und das Programme dann nicht laufen. Hier ist die Lösung:
Schaut erstmal nach, welche Microsoft Redistributables auf eurem PC installiert sind. Geht hierzu auf Start > Sytemsteuerung > Programme > Programme und Funktionen
und...
|
[DLL]How to change injector if i want inject granny22.dll not python22.dll ?
10/07/2012 - Metin2 Private Server - 0 Replies
Hello i have a laucher protected and can not run launcher if i modify granny22.dll in python22.dll
I want inject hack intro granny22.dll
What can i do ?
I give you thaks for good answer.
|
[Dll] For persons who have problem with mcvr100.dll, mscvrp100.dll and others
11/19/2011 - S4 League Hacks, Bots, Cheats & Exploits - 0 Replies
Hi :)
I post for persons who have problem with mcvr100.dll, mscvrp100.dll and other dll.
-Go here
-Download you(s) DLL(s)
-Put on C:\Windows\System32 and C:\Program Files\alaplaya\S4League
Bye ...
|
All times are GMT +2. The time now is 14:50.
|
|