-
Posts
97 -
Joined
-
Last visited
-
Days Won
4 -
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Everything posted by wezt
-
Hey, if I understand you correct, you need to add new quest function in source, which will take as argument item vnum. Something like this pc.unequip_item(vnum) And use it like this (just an example): when login begin if pc.get_map_index() == 113 then pc.unequip_item(101) end end
-
Do you have some errors in server logs or in hack_log table?
-
official Monster Informations Official like - Lv + AIFlag
wezt replied to xP3NG3Rx's topic in Features & Metin2 Systems
Hi. @xP3NG3Rx, first of all I'd like to say thanks for this nice tutorial (added on server some time ago). Also I have little suggestion for IsPet(): Regards. -
Hey, Thanks for your tips @Ken , you've showed the same way, but with more elegant steps. Regards.
-
Sry, forgot to add all changes for OXEvent.h. Change function type, "void CheckIpAdr(DWORD pidm);" to "bool CheckIpAdr(DWORD pidm);" Nope, this system checks "Internet IP".
-
Hi, yes you're right. I've made some changes in code, now this bug should be fixed, also it doesn't use m_list_iplist anymore: Regards
-
Hey, If you mean switching bonuses with scrolls (71052, 71084), then check out database (player.item_attr and player.item_attr_rare). New bonuses should be in these tables.
-
Hi there I'd like to ask for some tips, about where in client source (file/function) could be changed default size for mobs (scale the granny model)? Thanks in advance. Best regards.
-
Hi, If player/person which was disconnected 1st time, login again the system won't disconnect him because of: if (GetMapIndex() == OXEVENT_MAP_INDEX) COXEventManager::instance().RemoveFromIpList(GetDesc()->GetHostName()); //with this part you removing ip address from check-list I suggest to add few changes in this system. 1) Delete part from char.cpp 2) Add in bool COXEventManager::CloseEvent() this m_list_iplist.clear(); 3) Replace disconnects with warp_to_village and add option to enable/disable ip-check with event-flag if (!strcmp(listdekiIp, pkChrIP) && quest::CQuestManager::instance().GetEventFlag("oxevent_chk_ip") == 1) { //pkMyChar->GetDesc()->DelayedDisconnect(5); pkMyChar->ChatPacket(CHAT_TYPE_INFO, "Multi IP detected!"); m_map_attender.erase(pidm); BYTE bEmpire = pkMyChar->GetEmpire(); pkMyChar->WarpSet( g_start_position[bEmpire][0], g_start_position[bEmpire][1] ); } Regards
-
Hi, you need to use patchlist.txt with md5 hash. In order to get md5 you can use php script (was added in previous post) but you need: //change this line $hash = hash_file( 'crc32b', $file ); //to $hash = hash_file( 'md5', $file ); Or you can add "CalculateMD5Hash(string Name)" function in Sanchez.Lister
-
Hi, try to change crc hash to md5, it helped me. Also I'd like to share php script which generate patchlist.txt (probably will be useful for someone): Best Regards
-
Hey, thanks! Very useful things About antisafezone: I suggest to remove victim's sectree, because when players fighting near safezone and attacker use some distance skill on victim which is moving into safezone, it causes wrong disconnections.
-
Also you can do it with source and event flag: 1) To activate maintenance you need set in game "/e name_for_event_flag 1" 2) To make it works, in source go in game/src -> open input_login.cpp -> search for void CInputLogin::Entergame(LPDESC d, const char * data) and add after if (test_server || (ch->IsGM() == true && ch->GetGMLevel() == GM_IMPLEMENTOR)) ch->ChatPacket(CHAT_TYPE_COMMAND, "ConsoleEnable"); this DWORD maintenance_mode = quest::CQuestManager::instance().GetEventFlag('name_for_event_flag'); if(ch->GetGMLevel() == GM_PLAYER && maintenance_mode == 1) { ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Server in maintenance mode, only staff members allowed to enter!")); d->DelayedDisconnect(10); } PS: I didn't check it on a live server, so try it somewhere on dev before use on main one.
-
Looks like something wrong with files in icon/hair/ or in py files from root
-
Hi. Please attach syserr.txt
-
[Hidden Content] Thanks, I'll try that. Edit: But If I usedon't get those errors. Even without converting my gr2 files. Why? You don't have any errors from granny because in this release commented these rows: //static void GrannyError(granny_log_message_type Type, // granny_log_message_origin Origin, // char const* File, // granny_int32x Line, // char const* Message, // void * UserData) //{ // TraceError("GRANNY: %s", Message); //} // granny_log_callback Callback; // Callback.Function = GrannyError; // Callback.UserData = 0; // GrannySetLogCallback(&Callback); return 1; But I still wondering about errors which gives new granny with converted models, probably someone who is in good relationships with it explain these: 0817 21:40:26555 :: GRANNY: Unable to find matching track_group for Model: "Object01" in Animation: "D:\zwork\박재관\3월21일이후의수정애니메이션\수라캐릭터수정\수라모션수정\onehand_sword\wait.max" 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 HeadNub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 Ponytail1Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 L Finger0Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 L Finger1Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 L Finger2Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Object01' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone01' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone02' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone03' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone04' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 R Finger0Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 R Finger1Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 R Finger2Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Object08' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone05' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone06' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone07' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bone08' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 L Toe0Nub' in the ToSkeleton 0817 21:40:43038 :: GRANNY: NewMeshBinding: Unable to find bone: 'Bip01 R Toe0Nub' in the ToSkeleton Should I worry about such errors as "GRANNY: NewMeshBinding: Unable to find bone" and "GRANNY: Unable to find matching track_group for Model" ? Thanks in advance. Regards.
-
Sura Mirage bug skill without sword
wezt replied to NesT's topic in Community Support - Questions & Answers
Hey, as far I understand from source, huge damage for skills without weapon happening because in such cases doesn't calculate weapon resistance (sword resistance for sura). In char_skill.cpp at case SKILL_ATTR_TYPE_MELEE: You can see how calculate dmg, for example: if (pkWeapon) switch (pkWeapon->GetSubType()) { case WEAPON_SWORD: iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_SWORD)) / 100; break; So I've added this part after "switch" (probably not a best way to fix): if (m_pkChr->GetJob() == JOB_SURA && !pkWeapon) iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_SWORD)) / 100; With current changes for sura skills without weapon, core keep using sword resistance for damage calculation. -
@Benhero, you always can move core file to server where you've compiled binary
-
Would be nice to see errors which you get with new gdb. If it's the same, then try to compile the game without -O -O2 -O3 flags and with -g flag (you need to check each Makefile). Furthermore I can advice you to make cmd file for gdb and start it with -x argument, gdb.cmd file should contains path to directories with source files, it will help to see c++ code while debugging. Example of my gdb.cmd directory /root/workspace/mainline/extern/include/boost directory /root/workspace/mainline/extern/include directory /root/workspace/mainline/extern/lib directory /root/workspace/mainline/src_gcc49/libdevil directory /root/workspace/mainline/src_gcc49/liblua/include directory /root/workspace/mainline/src_gcc49/libthecore/lib directory /root/workspace/mainline/src_gcc49/libpoly directory /root/workspace/mainline/src_gcc49/libsql directory /root/workspace/mainline/src_gcc49/libgame/lib directory /root/workspace/mainline/src_gcc49/liblua/lib directory /root/workspace/mainline/src_gcc49/game/src directory /root/workspace/mainline/src_gcc49/db/src So after you can start gdb like this: /usr/local/bin/gdb791 -x gdb.cmd Also, as it was told before, do not forget set target architecture (set gnutarget i386-marcel-freebsd in case if binary is 32bit one)
-
Hi, try to update gdb for last version pkg install gdb-7.9.1 and run it like /usr/local/bin/gdb791
-
Core crash because of quest/map, probably c++ issue
wezt replied to wezt's topic in Community Support - Questions & Answers
Hello, I've found solution for my problem. And I'd like to share it with you (probably will be useful for someone) The problem was in d.purge_area() , somehow when this function triggered in quest-file and if player used skills at same time, the core allows to use skills on nonexistent (already purged) characters. So I've changed just one row in questlua_dungeon.cpp in struct FPurgeArea and now all works well. This topic could be closed. #SOLVED -
Core crash because of quest/map, probably c++ issue
wezt replied to wezt's topic in Community Support - Questions & Answers
Hi, thanks for reply. I've tried to crash the core with next lines in quest: function level_clear() d.setf("level",0) d.clear_regen() --d.purge_area(750000,620000,817400,689400) -- doesn't crash dev server d.kill_all() -- crash server only when amount of spawned mobs goes over 20k d.regen_file("locale/germany/map/metin2_map_n_flame_01/regen_full.txt") d.regen_file("locale/germany/map/metin2_map_n_flame_01/regen_full.txt") end when test1.server_timer begin if d.select(get_server_timer_arg()) then d.notice("server timer test1") d.notice("flame_dungeon.level_clear()") flame_dungeon.level_clear() server_timer ("test2", 1, get_server_timer_arg()) end end when test2.server_timer begin if d.select(get_server_timer_arg()) then d.notice("server timer test2") d.notice("flame_dungeon.level_clear()") flame_dungeon.level_clear() server_timer ("test1", 1, get_server_timer_arg()) end end Also I've moved forward little bit (thanks to @martysama0134 ). And from gdb I've found that somehow destroyed characters (mobs) still exist as objects. Were add several lines in void CHARACTER::UpdateStateMachine(DWORD dwPulse) void CHARACTER::UpdateStateMachine(DWORD dwPulse) { //start added lines if (!this) return; if (!this->m_pkMobData && !IsPC()) { sys_err("UpdateStateMachine %s doesn't have m_pkMobData", GetName()); Destroy(); return; } //end added lines if (dwPulse < m_dwNextStatePulse) return; if (IsDead()) return; Update(); m_dwNextStatePulse = dwPulse + m_dwStateDuration; //sys_log(0,"UpdateStateMachine %s", GetName()); } And after core crashed in CHARACTER::ClearTarget (gdb) where #0 0x0808aadb in std::tr1::__detail::_Hashtable_iterator_base<CHARACTER*, false>::_M_incr (this=0xffff9858) at /usr/local/lib/gcc5/include/c++/tr1/hashtable_policy.h:215 #1 0x08088ddf in std::tr1::__detail::_Hashtable_iterator<CHARACTER*, true, false>::operator++ (this=0xffff9858) at /usr/local/lib/gcc5/include/c++/tr1/hashtable_policy.h:300 #2 0x0808007d in CHARACTER::ClearTarget (this=0x30341000) at char.cpp:5037 #3 0x080735e0 in CHARACTER::Destroy (this=0x30341000) at char.cpp:451 #4 0x0807d900 in CHARACTER::UpdateStateMachine (this=0x30341000, dwPulse=128944) at char.cpp:4063 #5 0x080c7bf5 in std::mem_fun1_t<void, CHARACTER, unsigned int>::operator() (this=0xffff996c, __p=0x30341000, __x=128944) at /usr/local/lib/gcc5/include/c++/bits/stl_function.h:1020 #6 0x080c6dc4 in std::binder2nd<std::mem_fun1_t<void, CHARACTER, unsigned int> >::operator() (this=0xffff996c, __x=@0x2a08339c: 0x30341000) at /usr/local/lib/gcc5/include/c++/backward/binders.h:164 #7 0x080c5a3c in std::for_each<__gnu_cxx::__normal_iterator<CHARACTER**, std::vector<CHARACTER*, std::allocator<CHARACTER*> > >, std::binder2nd<std::mem_fun1_t<void, CHARACTER, unsigned int> > > (__first=..., __last=..., __f=...) at /usr/local/lib/gcc5/include/c++/bits/stl_algo.h:3767 #8 0x080c3ec4 in CHARACTER_MANAGER::Update (this=0xffffd174, iPulse=128944) at char_manager.cpp:695 #9 0x08290f77 in idle () at main.cpp:775 #10 0x0828ff2f in main (argc=1, argv=0xffffd7b0) at main.cpp:461 -
Hi. Try to backtrace core files with gdb (in case if you are using freebsd). Bactrace results probably will help you, or will help someone to help you.