Jump to content

wezt

Inactive Member
  • Posts

    97
  • Joined

  • Last visited

  • Days Won

    4
  • Feedback

    0%

Everything posted by wezt

  1. 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
  2. Do you have some errors in server logs or in hack_log table?
  3. 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.
  4. Hey, Thanks for your tips @Ken , you've showed the same way, but with more elegant steps. Regards.
  5. 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".
  6. 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
  7. 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.
  8. 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.
  9. 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
  10. 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
  11. 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
  12. 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.
  13. 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.
  14. Looks like something wrong with files in icon/hair/ or in py files from root
  15. [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.
  16. 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.
  17. @Benhero, you always can move core file to server where you've compiled binary
  18. 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)
  19. Hi, try to update gdb for last version pkg install gdb-7.9.1 and run it like /usr/local/bin/gdb791
  20. 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
  21. 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
  22. 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.
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.