Jump to content

V3ct0r

Administrators
  • Content Count

    2,889
  • Joined

  • Last visited

  • Days Won

    519

Posts posted by V3ct0r


  1. Hello @Daxter,

     

    These mods and the tool work only with official 1.3x Game.exe. There a number of official builds of 1.3x Game.exe. They are similar in their binary structure, but still have some differences that are critical when developing mods. It's hard to develop mods for every single version of Game.exe, so I only supported 6 of them, which are most often used by administrators and players.

     

    The message says that your Game.exe is not included in the set of supported Game.exe.

     

    Note 1: I don’t know what specific versions these Game.exe have (1.35, 1.36, 1.38 or 1.39), but they all fall under the definition of version 1.3x. 

    Note 2: As you can understand, mods do not work with Game.exe, which are obtained after building the Corsairs Online source codes (when you use source codes, there is no need to use mods - you can make changes directly to the source code, which is much easier).

    • Like 1

  2. Hello @StaffEN,

    --[[ NpcSdk.lua Lines
    		elseif item.func == GetRankingListing then
    			GetRankingListing( character,item.p1)
    		elseif item.func == PlayerPkPMazeCheck then
    			PlayerPkPMazeCheck( character,item.p1)
    		elseif item.func == PlayerPkPCheck then
    			PlayerPkPCheck( character)
    		elseif item.func == PvPWinnerReward then
    			PvPWinnerReward( character)
    		elseif item.func == PvPWinnerReward2 then
    			PvPWinnerReward2( character)
    			
    	MissionSdk.lua Lines add this somewhere around line 2500
    				elseif conditions[i].func == CheckIsPvPWinner then
    				PRINT( "ConditionsTest:CheckIsPvPWinner, p1 = ", conditions[i].p1 )
    				local ret = CheckIsPvPWinner( character, conditions[i].p1 )
    				if ret ~= LUA_TRUE then
    					PRINT( "ConditionsTest: CheckIsPvPWinner = false" )
    					return LUA_FALSE
    				end
    				elseif conditions[i].func == CheckIsPvPWinner2 then
    				PRINT( "ConditionsTest:CheckIsPvPWinner, p1 = ", conditions[i].p1 )
    				local ret = CheckIsPvPWinner2( character, conditions[i].p1 )
    				if ret ~= LUA_TRUE then
    					PRINT( "ConditionsTest: CheckIsPvPWinner2 = false" )
    					return LUA_FALSE
    				end
    ]]--

    Did you add these changes to files NpcSdk.lua and MissionSdk.lua?


  3. Hello @Daxter,

     

    MakeItem() as a result returns two variables (a tuple): success flag (boolean) and position of the created item in the character's bag:

    r1,r2 = MakeItem(role, <Item ID>, <Amount>, <Quality/Type>)
    -- if r1 == 1 then the item <Item ID> x <Amount> of quality <Quality/Type> is successfully added to the inventory/bag.
    -- r2 contains the number of the inventory slot in which the created item is placed if r1 == 1

    GiveItem() returns just a success flag:

    r1 = GiveItem(role, 0, <Item ID>, <Amount>, <Quality/Type>)
    -- The second parameter is an NPC descriptor, usually it equals 0.

    You can see examples of using both functions in GameServer scripts.

     

    On 1/8/2024 at 1:41 AM, Daxter said:

    Bump

    Can anyone help with (at least) the item quality part? Function name, or list of values. From what I've gathered 4 seems to be the default, but there's also 96? And from 101+ it's used for gem levels

    It depends on the type of item (gem, fairy, etc). For regular items, I think you can use value 4.

    • Thanks 1

  4. On 12/31/2023 at 7:07 PM, nyarum12 said:

    Интересно, поднимается ли архив при новых сообщениях
    Я вернулся, у меня были разьезды по зарубежу

    Гласный факт о стабильной работе был нарушен, и в целом хуйня идея была :)
    Сервер вернется только в виде эмулятора и уже очень скоро, официальную сборку я не хочу больше трогать

    Всем пис

    Привет!

     

    Вытащил тему из архива. 

     

    P.S. Ждем эмулятор :smile:

    • Like 1

  5. Привет, @Nik!

     

    GameServer

    1) Поместить папку 07xmas в директорию GameServer\resource\;

    2) Добавить карту 07xmas в файл GameServer\resource\script\MisScript\ScriptDefine.lua:

    AddMap("07xmas", "\205\238\226\238\227\238\228\237\255\255 \196\229\240\229\226\237\255") --ID = 27	(Новогодняя Деревня)
    

    3) Добавить карту в GameServerXX.cfg (где XX - номер, либо может отсутствовать):

    [Map]
    ...
    map = 07xmas

    4) При необходимости организовать вход на карту для игроков (предмет-билет, NPC-портальщик, портал и др.).

     

    Клиент

    1) Добавить файлы 07xmas.obj и 07xmas.map в директорию Клиент\map\;

    2) Добавить файл 07xmas.pk в директорию Клиент\texture\minimap\07xmas\;

    3) Добавить строку в файл Клиент\scripts\table\mapinfo.txt:

    27	07xmas	Новогодняя деревня	1	150,150	3,150,150	255,255,255

    4) Добавить строку в файл Клиент\scripts\table\areaset.txt:

    135	Новогодняя Деревня	233,118,107	-1	128,128,128	255,255,255	-1,-1,-1	0

    5) Скомпилировать файлы mapinfo.txt и areaset.txt с помощью команды table_bin.

    • Like 1

  6. On 12/20/2023 at 9:42 PM, Andy said:

    there is bug with the client.  after you log and get the reward.  double click on pots, chest. etc doesnt work anymore. you need restart client

    Hello @Andy,

     

    Yes, there is the problem in the pkodev.mod.reward.client\dllmain.cpp file.

     

    Change

    // bool CCommandObj::IsAllowUse()
    bool __cdecl IsAllowUse()
    {
        return false;
    }

    to

    // bool CCommandObj::IsAllowUse()
    bool __cdecl IsAllowUse()
    {
        return true;
    }

    and rebuild the mod using Visual Studio version 2019 or newer.

    • Like 1
    • Thanks 1

  7. // Вывод рейтинга
    if (_IsShowName && _pOwn->IsPlayer())
    {
    	if (_pOwn->getGuildID())
    		y -= 14;
    	
    	static char szTextRating[32u] = { 0 };
    	sprintf(szTextRating, "- [%d] -", CalculateRating(_pOwn));
    	
    	static const DWORD COLOR_TEXT_RATING = 0xFF00FFFF;
    	const int nDrawX =  x - (CGuiFont::s_Font.GetWidth(szTextRating) / 2);
    	const int nDrawY =  y - 28;
    	
    	CGuiFont::s_Font.BRender(szTextRating, nDrawX, nDrawY, COLOR_TEXT_RATING, COLOR_BLACK);	
    }

     

    // Подсчет рейтинга
    inline int CalculateRating(const CCharacter* pCha) 
    {
    	const SGameAttr* pGameAttr = pCha->getGameAttr();
    	
    	int nPowerCounter = 0;
    	nPowerCounter += pGameAttr->get(ATTR_HP);
    	
    	return nPowerCounter;
    }

     

    Функцию CalculateRating() хорошо было бы сделать членом какого-нибудь класса, например class CHeadSay или class CCharacter.

     

    Вопрос: будет ли это работать для персонажей других игроков? Так как есть сомнения, что сервер присылает (синхронизирует) характеристики других персонажей нашему клиенту, и для других игроков рейтинг будет отображаться некорректно. Если код задумывался для отображения рейтинга только нашего персонажа, то можно заменить:

    if (_IsShowName && _pOwn->IsPlayer())

    на:

    if (_IsShowName && _pOwn->IsMainCha())

     

    Стоит учесть, что в некоторых случаях рейтинг персонажа может уйти в минус. Если говорить про ATTR_HP, то лучше взять ATTR_MXHP, и так далее.

     

     

    P.S. Не тестил код выше.

    • Like 1
    • Thanks 1

  8. On 11/23/2023 at 11:59 AM, Vehd said:

    Привет @V3ct0r

    Вить тут можно сделать и так и так , Я могу сам за ней следить нужен человек который только поможет мне все запустить , бд,им , и т.д . на этом все (если проблем не будет ) ибо сервер с обновами на 2 года в перед . Если же по 2му пункту я и на 20% согласен

    Привет, @Vehd!

     

    Спасибо за ответ! Хочу пожелать удачи с проектом!


  9. On 5/30/2023 at 1:54 AM, Arcerz said:


    I pulled a client from this clean release: https://pkodev.net/topic/6130-release-clean-top-138-client/

    And this is the header in the included Game.exe: https://i.imgur.com/yn2Auw7.png

    Is this just an "uncommon" version, or am I misreading the timestamp?

    Hello @Arcerz,

     

    You can check your Game.exe with this program:

     

×
×
  • Create New...