Recent posts

#41
General Discussion / "Convenient VC-MP" mod
Last post by kyber7 - Apr 19, 2025, 08:44 AM










DESCRIPTION


"What is this?"

This is an "addon" to your vanilla VC-MP gameplay, or more precisely - an AutoHotkey script, that automates a lot of the stuff you'll be doing during anything that involves "combat".


"What is AutoHotkey?"

AutoHotkey is a program/programming language that lets you - via the power of coding - bind a set of instructions to a button/button-combo, with precise timing, delay, press duration, etc. etc., which gives you the possibility to automate a lot of stuff involving input from the keyboard & mouse.

For example: I can make it so that when I press i.e. the "F" button - to tell the computer to press "A" + "S" + "Left Mouse Button" for half a second, then press "T" to open the in game chatbox and type "hurrrr durrrr", followed by an "Enter" (to send it) - all while doing that in an instant!


It's what's refered to as "gaming macros".


"What does this have to do VC-MP, and especially - during combat?"

If you're even remotely familiar with the combat techniques in VC-MP (which you can find here), there're a lot of precisely timed button-combo executions. Some may argue that this is what makes VC-MP fun & no one should dare remove that from the gameplay. But what if "grinding key combos" ain't smth you find pleasing? What if - instead of spending so much energy grinding buttons, you have that stuff automated, so you can spend more of your energy making "art" on the battlefield?

This is where "Convenient VC-MP" comes into play & offers those players the option!

This is a "mod"/"addon"/".ahk script" (autohotkey script) that binds a lot of the basic techniques' key combos (i.e. the "Crouch Glitch") into a single button press! (some - toggleable, some - only while the key is pressed down)


"Wait, hold on. Isn't this hax?"

I'll be entirely honest with you here - it depends who you ask.

If you ask for my maximum objective opinion on the matter - it's neither a "hax", nor is it a "non-hax".

It stands somewhere between the 2 worlds.


"Why do you think it isn't hax?"

For once - it does absolutely nothing to the vanilla game (like conventional hacks do). It just uses what's already there - the crouching, the jumping, the left/right, the command typing - and binds the unique combinations of those elements: into a single key.

QuoteIf something cannot be performed in the vanilla game - AutoHotkey (& this mod) cannot perform it too.

For twice - a "hack" is usually something that not a lot of players possess, thus the additional inaccessible power is concentrated into a few players only (tilting the "fairness" scale in the playing field even more). By putting out this script out into the open, and making it open source - I hope to bring more power into the masses, for everyone to have higher odds against the hidden hackers that are out there, yet to be detected by even the most modern anti-cheats available today.

QuoteA piece of technology + NOT available to all = "hack"
A piece of technology  +  IS available to all  = "a feature!"


"Then why do you think it IS hax?"

For the very simple reason that this unloads a lot of effort from the player (from grinding key combos), which allows him to focus more on things like aiming, strategy, tactics, and - making "art" in general.

I'll be honest - even thoe this isn't a "hack" in the conventional sense, the fact that a more efficient allocation of a player's energy is achieved with it - and thus he stands out from the rest that aren't using it - DOES bring a sort of "advantage" to that player.

Mostly - in saving calories from his VC-MP sessions.

Ofc, I still get pwnt by the top dawgs out there that possess the very essence that makes them a top dawg - this cannot be achieved by technology. (unless you step into the realm of real hacking)
Nor can it be combated. (but it sure helps for a better K/D ratio, kek)

QuoteYou're either a dawg or you're not.
(and then there are the rest of us plebs that are scattered across the spectrum)

Still - let's not forget that this is a game after all, and - in my opinion - as long as the fundamental game's mechanics aren't touched - every player has the right to make modifications to his "gaming" to achieve maximum competitiveness his potential permits.

Some do it via their wallet by purchasing an expensive competitive mouse/keyboard/monitor, etc.
(which could also come with an embedded "macros" software, similar to AutoHotkey)

Some do it by consuming illicit drugs.
(to see in slow-motion, for example)

Some do it via the oldschool path of grindin' & Mastery.
(to turn their fine-muscles & muscle memory into AutoHotkey)

And some like me - in this case at least - do it with their brainz.  /o/
(combined in ☯ balance with the rest, ofc.)


"Does this work for Linux?"

Sadly, no. AutoHotkey was made & is only for Windows. With that said, I heard the stuff AutoHotkey can do CAN be made in Python too. But that's just some 2 cents here, no promises for future updates on the mod itself for Linux compatibility.


THE CONTROLS  /  KEY FEATURES



To NOT make this post longer than it already is, I'll just show you the script's entire control set, which should showcase its features to you at the same time.

Don't get turned off from your first glance over this "weird/different/unconventional" controls that you'll be using. Once you decide to trust the Process here - and give the script AT LEAST a single try - you'll quickly notice the whole logic & design behind all of its structuring.

The script (and the fundamental control layout it was based on) was made with "finger ergonomics" / "efficiency" in mind, meaning - everything is structured in such a way so that any corners are cut & maximum user input is achieved. (so it's definately worth getting into [& used to] it)

Even if you plan to stop using the script one day, you can still take away the basic fundamental controls from it & apply (anything from) it to your own. All of this WILL transition into other games you play too, & make you a better gamer overall :)

At the very least - a good brain workout from the adapting effort.
(will go a long way to not only other games you'll play, but anything else you'll do in life afterwards)

QuoteFor y'all of you that just wouldn't bother to go through the initial hustle - I'm sorry to say, but this isn't for you & you don't deserve the fruits it will bear later on in your gameplay.

You can check out the original "fundamental control layout" (that the making of this script was based on) here.

After setting up the necessary prerequisites (which I'll cover in the next section), this is how you'll be playing VC-MP from now on:


     LMB - Left Mouse Button
     RMB - Right Mouse Button
     MMB - Middle Mouse Button (clicking down the scroll wheel)


░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                           (F4) - Reload script to defaults.
                                    (in case smth messes up)

                           (F1) - Off/On the script.

                        (MMB) - Spawn from the lobby.
                                    (on some servers you may still need to press LMB to spawn)
                                    (on some servers you need to turn off the script first, via "F1")
               
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                (W) - Run.

                       (A) + (W) - Sprint.

                      hold (LMB) - Backwards.
                           
             press once (LMB) - Activate auto-running.
                                         (deactivate by pressing "W" once)

                  (LEFT SHIFT) - Go left.

                                  (R) - Go right.

             (LEFT ALT) / (N) - Look behind. (+ while in car too)

                             (MMB) - Jump.

               (LMB) + (MMB) - Jump backwards.
                           
                                   (3) - Double jump.
                                          (sometimes it doesn't work; try again)
                                          (also - in some servers it doesn't work AT ALL)

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                        hold (RMB) - Crouch Glitch.

               (SPACE) / (LMB) - Stand up / crouch down.
                                           (ONLY while performing the Crouch Glitch)

                                  (F2) - Toggle between "Before-shot" & "After-shot" Crouch Glitch style.

                                   (~) - Toggle between "Crouch Glitch" & "No-Crouch Glitch" mode.
                                           (if you're going to be playing i.e. in "littlewhitey's" server)
                                           (applies to M4 usage too)

          (LEFT SHIFT) + (~) - Toggle between "Single style" & "Mixed style" crouching.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                       hold (SPACE) - Crouch & shoot with M4/Rugger/M60.

                                 (LMB) - Stand up / crouch down.
                                             (while shooting with the M4/Rugger)

                          hold (RMB) - Increase sensitivity.
                                             (while shooting with the M4/Rugger/M60)

                                    (F3) - Toggle between "M4/Rugger" and "M60" mode.
                                             (for the "SPACE" button)

           (LEFT SHIFT) + (F2) - Toggle between "Before-shot" & "After-shot" Crouch Glitch style.

           (LEFT SHIFT) + (F3) - Toggle between "Single style" & "Mixed style" crouching.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                      (E) - Manual fire button.

                                      (X) - Manual crouch button.

                                      (C) - Manual next weapon button.
                                              (from "Ingram" to "M4", to "M60", etc.)

                                      (D) - Manual previous weapon button
                                              (from "Ingram" to "Shotgun", etc.)

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                  hold (1) - Aim with RPG. ("Asian City" server only!)

                                    (RMB) - Shoot a rocket.

           hold (LMB) + let go (1) - Exit RPG without jumping-off afterwards.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                  hold (2) - Shoot with Flamethrower.

           hold (LMB) + let go (2) - Exit Flamethrower without jumping-off afterwards.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                        (4) - Switch to molotov/grenade.

                    hold/press (RMB) - Throw molotov/grenade.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                        (5) - Switch to mele.

                    hold/press (RMB) - Hit with mele / Crouch Glitch with mele.

                          hold (SPACE) - Switch to shotgun & perform Crouch Glitch.
                                                (using the crouch glitching mode you use normally)

                                     (LMB) - Stand up / crouch down while performing the Crouch Glitch.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                  hold (Q) - Switch to & aim with Sniper.

                     hold/press (RMB) - Fire with Sniper.

                                   hold (E) - Hold breath / Decrease sensitivity while aiming with Sniper.

                                          (R) - Zoom in.
                                                  (sometimes it bugs out & starts moving the scope
                                                    to the right - just exit from scoping [Q] and scope again)
                                                  (use Mouse Wheel if you have a working one)


                            (LEFT SHIFT) - Zoom out.
                                                  (sometimes it bugs out & starts moving the scope
                                                    to the left - just exit from scoping [Q] and scope again)
                                                  (use Mouse Wheel if you have a working one)


              hold (LMB) + let go (Q) - Exit Sniper without jumping-off afterwards.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                              (LEFT CTRL) - Set spawn location. (the cheapest way possible)
                                                     ("Asian City" server only!)

                                             (H) - Heal.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                       (MMB) - Horn.

                                        (RMB) - Handbrake.

                                        (LMB) - Reverse / auto-accelerate mode.
                                                     (press "W" to stop auto-acceleration)

                                             (Z) - Flip vehicle.

                                             (V) - Fix vehicle.

                                             (F) - Eject vehicle.

                                        (END) - Enter vehicle as passenger.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                             (P) - "Top Gun" / pilot mode.
                                                     (one-hand steering aircraft & vehicles with the mouse)

                (MOUSE MOVEMENT) - Steer the aircraft / vehicle.

             press once (LMB)/(RMB) - Auto-acceleration / Auto-ascending ON.
                                                    (press "W" to stop auto-acceleration)

                                 hold (RMB) - Handbrake.

                                  hold (LMB) - Reverse vehicle / descent aircraft.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                                              (O) - "Cruise Mode"
                                                       (one-hand fighting with the mouse)

                  (MOUSE LOOK LEFT) - Move to the right.

               (MOUSE LOOK RIGHT) - Move to the left.

                         press once (LMB) - Activate auto-running.
                                                      (press "W" to stop auto-running)

                           hold (XButton1) - Crouch & shoot with M4/Rugger/M60/Flamethrower.

                                  (XButton2) - Manual switch from Ingram to Shotgun, etc.

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

                    (the below taunt buttons work ONLY in "Asian City" server!)

                                              (6) - Taunt "Roll".

                                              (7) - Taunt "Chill".

                                             (8 ) - Taunt "Jump off".

                                              (9) - Taunt "Monke".

                                              (0) - Taunt "Bow".

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░


/!\ USAGE DISCLAIMER ALERT /!\


/!\ Always hold Ingram when using any weapon-switching from the scripted buttons!
     (the manual buttons - except for "E" - are NOT scripted)

/!\ Whenever you switch to molotovs/grenades, or mele - via the scripted buttons:
      
     You MUST switch back via the same button that you used!

i.e - Let's say you're sprinting around with Ingram. Then you decide that you want to switch to mol/grenade/mele by pressing the button for it ("4" / "5"), & once done - you decide that you want to switch back to Ingram:

     You MUST press the SAME weapon's button again!

(NOT via manual switching!)
(you can still use manual switching afterwards + "E", but if you used the script's button for the weapon you switched to - that's how you MUST proceed)
(to reset everything back to normal; else - bugs will happen)
      
    (i) EXCEPTIONS:
         
> IF while doing "crouch glitching" from its button (RMB) & it fails (sometimes) to switch back to ingram - you can safely switch back manually.

> Same applies to using M4/M60's button (SPACE).

> IF while using "M4/M60" from its button (SPACE), you increase the sensitivity from its sensitivity button (RMB), & the sensitivity fails (sometimes) to restore afterwards - just tap once SPACE to reset it back.

> You can still Double Jump while holding mols/grenades, or mele. BUT these weps MUST be from their own buttons ("4" / "5"). NOT from manual switching. (else - double jumping won't work)




TL;DR - You can just press the "F4" button to reload the script, & everything will be reset back to normal. (in case smth fucks up)
(also - be holding the Ingram again afterwards)


(we continue to PART 2 below)
#42
Support / Re: [Help] I want to use cshar...
Last post by [R3V]Kelvin - Apr 16, 2025, 09:31 PM
I don't quite understand what you mean, but if you are trying to get started into plugin development in VC:MP I would follow this tutorial, which worked for me pretty good back in the day when I was new to this myself:
https://forum.vc-mp.org/index.php?topic=7347.0
  • Don't know about C#, but this one works for C++ (and, with a few tweaks, C)
  • The SDK header on that tutorial is outdated, find the latest one at https://v04.adtec.ovh/VCMP.h
  • Requires Visual Studio (which you seem to be using already, anyway)
#43
Support / Re: [Help] I want to use cshar...
Last post by 2b2ttianxiu - Apr 16, 2025, 11:20 AM
生成开始于 19:15...
1>------ 已启动生成: 项目: helloworld, 配置: Debug x64 ------
1>SQConsts.cpp
1>The contents of <variant> are available only with C++17 or later.
1>SQFuncs.cpp
1>The contents of <variant> are available only with C++17 or later.
1>Y:\c\helloworld\SQFuncs.cpp(24,15): warning C4244: "初始化": 从"SQInteger"转换到"int",可能丢失数据
1>SQMain.cpp
1>The contents of <variant> are available only with C++17 or later.
1>正在生成代码...
1>LINK : warning LNK4075: 忽略"/INCREMENTAL"(由于"/OPT:ICF"规范)
1>SQConsts.obj : warning LNK4075: 忽略"/EDITANDCONTINUE"(由于"/OPT:ICF"规范)
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::debug(char const *)" (?debug@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::debug(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?debug@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::error(char const *)" (?error@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?error@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Logger::format_number(unsigned long,int)" (?format_number@Logger@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KH@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Logger::getFormattedTime(void)" (?getFormattedTime@Logger@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::info(char const *)" (?info@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::info(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?info@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl Logger::parseLogMessage(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?parseLogMessage@Logger@@YA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@0@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::rawLogger(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?rawLogger@Logger@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::rawLogger(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (?rawLogger@Logger@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::rawLogger(char const *,char const *)" (?rawLogger@Logger@@YAXPEBD0@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::success(char const *)" (?success@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::success(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?success@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::warning(char const *)" (?warning@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void __cdecl Logger::warning(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?warning@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "void * Logger::hstdout" (?hstdout@Logger@@3PEAXEA) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "bool Logger::DEBUG" (?DEBUG@Logger@@3_NA) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int> > > Logger::COLORS" (?COLORS@Logger@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::map<int,int,struct std::less<int>,class std::allocator<struct std::pair<int const ,int> > > Logger::COLORS_32" (?COLORS_32@Logger@@3V?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int> > > Logger::LEVELS" (?LEVELS@Logger@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Logger::defaultPrefix" (?defaultPrefix@Logger@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Logger::FORMAT" (?FORMAT@Logger@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQFuncs.obj : error LNK2005: "class std::basic_regex<char,class std::regex_traits<char> > Logger::REGEXP" (?REGEXP@Logger@@3V?$basic_regex@DV?$regex_traits@D@std@@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::debug(char const *)" (?debug@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::debug(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?debug@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::error(char const *)" (?error@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?error@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Logger::format_number(unsigned long,int)" (?format_number@Logger@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KH@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Logger::getFormattedTime(void)" (?getFormattedTime@Logger@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::info(char const *)" (?info@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::info(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?info@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl Logger::parseLogMessage(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?parseLogMessage@Logger@@YA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@0@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::rawLogger(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?rawLogger@Logger@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::rawLogger(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (?rawLogger@Logger@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::rawLogger(char const *,char const *)" (?rawLogger@Logger@@YAXPEBD0@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::success(char const *)" (?success@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::success(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?success@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::warning(char const *)" (?warning@Logger@@YAXPEBD@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void __cdecl Logger::warning(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?warning@Logger@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "void * Logger::hstdout" (?hstdout@Logger@@3PEAXEA) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "bool Logger::DEBUG" (?DEBUG@Logger@@3_NA) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int> > > Logger::COLORS" (?COLORS@Logger@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::map<int,int,struct std::less<int>,class std::allocator<struct std::pair<int const ,int> > > Logger::COLORS_32" (?COLORS_32@Logger@@3V?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int> > > Logger::LEVELS" (?LEVELS@Logger@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Logger::defaultPrefix" (?defaultPrefix@Logger@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Logger::FORMAT" (?FORMAT@Logger@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 SQConsts.obj 中定义
1>SQMain.obj : error LNK2005: "class std::basic_regex<char,class std::regex_traits<char> > Logger::REGEXP" (?REGEXP@Logger@@3V?$basic_regex@DV?$regex_traits@D@std@@@std@@A) 已经在 SQConsts.obj 中定义
1>  正在创建库 Y:\c\helloworld\x64\Debug\helloworld.lib 和对象 Y:\c\helloworld\x64\Debug\helloworld.exp
1>Y:\c\helloworld\x64\Debug\helloworld.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
1>已完成生成项目"helloworld.vcxproj"的操作 - 失败。
========== 生成: 0 成功,1 失败,0 最新,0 已跳过 ==========
========== 生成 于 19:16 完成,耗时 25.540 秒 ==========


:(
#44
Support / Re: [Help] I want to use cshar...
Last post by 2b2ttianxiu - Apr 16, 2025, 09:29 AM
Quote from: MEGAMIND on Apr 16, 2025, 09:05 AM
Quote from: 2b2ttianxiu on Apr 16, 2025, 08:54 AMI want to use csharp language to make dll c squirrel or call with python, but how can i make it(?
or how to fast develop plugin
YOU can simply adapt that by using plugin sdk of vcmp & Download sources from Habi's basic plugin download fiels check whats going on..! use those in chsarp if ur good at it
But... i use those, maybe get LINK2019 or other
#45
Support / Re: [Help] I want to use cshar...
Last post by MEGAMIND - Apr 16, 2025, 09:05 AM
Quote from: 2b2ttianxiu on Apr 16, 2025, 08:54 AMI want to use csharp language to make dll c squirrel or call with python, but how can i make it(?
or how to fast develop plugin
YOU can simply adapt that by using plugin sdk of vcmp & Download sources from Habi's basic plugin download fiels check whats going on..! use those in chsarp if ur good at it
#46
Support / Re: [Help] I want to use cshar...
Last post by 2b2ttianxiu - Apr 16, 2025, 08:55 AM
maybe can use unix or tcp socket to call other language
#47
Support / [Help] I want to use csharp to...
Last post by 2b2ttianxiu - Apr 16, 2025, 08:54 AM
I want to use csharp language to make dll c squirrel or call with python, but how can i make it(?
or how to fast develop plugin
#48
Community Plugins / Re: NPC/Bots implementation in...
Last post by [TDA]Speed - Apr 11, 2025, 08:30 AM
well habi i guess the plugins is bugged on linux 64 bit plugins of npc not loading and i tested this npc on windows of same version of npc the 0.4.7.1 and working for windows everything okey but on windows RFC from server side crashing the npc
for linux dosnt want to load the plugins of npc in npcscripts

the npc script is shooting anyone shoot near him and using your script of npc.fire
this error i got on npc linux 64 when i shoot him for first time he starting shooting normal and no bugs when i go away script will kill timer of shooting when i back again to shoot him he shot 1 time then timing out

Failed loading plugin: rpclib
Failed loading plugin: z-finder
 Loaded 0 plugins.
Connecting to 127.0.0.1: 8205. Connected. Player 'Ammu-Nation_Man' ID 0 connected.
[SCRIPT] ID: Ammu-Nation_Man has joined the server
ID 0. Vice City Gang Wars. Ammu-Nation_Man
Warning: Cannot update weapon slot for weapon 114
Warning: Cannot update weapon slot for weapon 114
Warning: Cannot update weapon slot for weapon 114
Player 'Ammu-Nation_Man' ID 0 disconnected (timeout).
#49
Community Plugins / Re: NPC/Bots implementation in...
Last post by [TDA]Speed - Apr 10, 2025, 11:26 AM
also @habi whenever i use RFC(F from server side to bot script it always crash the server
#50
Community Plugins / Re: NPC/Bots implementation in...
Last post by [TDA]Speed - Apr 09, 2025, 10:27 PM
Quote from: MEGAMIND on Apr 09, 2025, 02:04 PM
Quote from: PLAYER on Apr 09, 2025, 01:55 PMI used the Same Structure You Gave me:-
ConnectNPCEx("Bot", Vector(-1375.21, -664.22, 14.1484), 90.0, 1, 26, 255, "shoot.nut", true, "127.0.0.1", "rpclib actionlib");

But its still showing error
Failed loading plugin: rpclib
Failed loading plugin: actionlib
 Loaded 0 plugins


make sure these are linux plugins not the win architecture, also  make sure the plugins are in right path
npcscripts/plugins

i have the same error too though iam using the correct path
home/container/npcscripts/plugins/rpclib64.so