Моды LIF

Moderators: StivenWolf, Модераторы LiF

Моды LIF

Post Number:#1  Postby IrvinSQ » 05 Aug 2015, 23:53

Вообщем предлагаю выкладывать свои наработки для упрощения игры.

Off Topic
Хотел выкинуть сразу пачку моих\чужих наработок\модов вкупе с русификатором и готовым клиентом, но так как скоро светит вайп и моя лень не позволит мне успеть это за неделю :), я всё таки решил выкидывать просто кусками.


Как упростить подключение к нашему серверу:
1.Предположим, что наша игра лежит здесь D:\lifclient\.
2. Тыкаем свойства папки lifclient и снимаем галочку только чтение, сразу говорю, что у некоторых из-за винды могут возникнуть проблемы с этим, могу лишь посоветовать включить соображалку и попробовать сделать это через TOTALcmd и прочий сторонний софт
3. Находим файл D:\lifclient\core\scripts\gui\twich.cs в папке с игрой
(некоторые спрашивали почему именно файл с настройками твича, скажу так - его разработчики сделали и скорее всего больше этот файл никогда не тронут)
4. И просто берем и вписываем в конец файла следующий текст
Code: Select all
function GamejoinfiannaConnect() // объявляем функцию
{
    if(!isObject(ServerConnection)) // если не подключены
        joinToRemoteServer("89.108.86.165:28000", ""); // подключаемся
}
GlobalActionMap.bindCmd(keyboard, "f3", "GamejoinfiannaConnect();",""); // выполнять при нажатии F3


P.S. это не баг и не чит и ничего противозаконного в этом нет. просто теперь после входа в игру при нажатии на клавишу F3 вы будете сразу попадать на наш сервак избегая консолей и копирования IP сервера

P.S.S. позже можно будет сделать что-то типа лаунчера, но это хз когда
  • User avatar
  • IrvinSQ
    Дружинник
    Clans:
      Not involved in the clans.
M&B Status:
Offline
Reputation point: 0

Re: Моды LIF

Post Number:#2  Postby IrvinSQ » 11 Aug 2015, 00:47

Давайте попробуем сделать ещё один момент более удобным:

*тут была куча текста, который даже я после прочтения не очень понял*
P.S. просто задрало тыкать ескейп-players, а потом ещё и крестик тыкать и таб нажимать.. надоело чё то.

Как упростить подключение + быстрый просмотр онлайн по F3(alt+F3 чтобы открыть на совсем)
1.Предположим, что наша игра лежит здесь D:\lifclient\.
2. Тыкаем свойства папки lifclient и снимаем галочку только чтение, сразу говорю, что у некоторых из-за винды могут возникнуть проблемы с этим, могу лишь посоветовать включить соображалку и попробовать сделать это через TOTALcmd и прочий сторонний софт
3. Находим файл D:\lifclient\core\scripts\gui\twich.cs в папке с игрой
(некоторые спрашивали почему именно файл с настройками твича, скажу так - его разработчики сделали и скорее всего больше этот файл никогда не тронут)
4. И просто берем и вписываем в конец файла следующий текст
5. ЕСЛИ ВЫ ДЕЛАЛИ БЫСТРОЕ ПОДКЛЮЧЕНИЕ К СЕРВЕРУ ИЗ ПРЕДЫДУЩЕГО ПОСТА, ТОТ УЧАСТОК НАДО ПРОСТО ЗАМЕНИТЬ
Code: Select all
function GamejoinfiannaConnect() // объявляем функцию
{
    if(!isObject(ServerConnection)) // если не подключены
        joinToRemoteServer("89.108.86.165:28000", ""); // подключаемся   

else

   OpenOptionsPlayers();
}

function toggleOPDlg()
{
      CloseOptionsPlayers();   
}

function toggleOPDlgset()
{
   OpenOptionsPlayers();   
}

GlobalActionMap.bindCmd(keyboard, "F3", "GamejoinfiannaConnect();","toggleOPDlg();");
GlobalActionMap.bindCmd(keyboard, "alt F3", "toggleOPDlgset();","");



P.S. подумав..Оо, решил всё таки кинуть файл)), ибо как оказалось ctrl+c > ctrl-v, у многих вызывает трудности, кто то даже грозился уйти на другйо сервер O_o ..решил, что не смогу с этим жить :okay: и..

Скачать FiannaMod v.0.2


P.S. запаковал файл со скриптом в обычный ZIP, вирусов нет, так как там просто текстовый файл грубо говоря, распаковать надо прям в папку с игрой, спросит заменить ли файл twich.cs - ваш ответ будет ДА. Больше ничего делать не надо, МОЖНО СТАВИТЬ ПОВЕРХ РУСИФИКАТОРОВ, багом и читом не является

"F3" - после загрузки клиента приведет к загрузке на сервер фианы
"F3" - после попадания на сервер, вызовет список игроков онлайн, но только пока держите "F3"
"F3+alt" - вызовет окно онлайна на постоянку, чтобы его убрать нажмите "F3"

P.S. перезалил на другой обменник :slowpoke:
  • User avatar
  • IrvinSQ
    Дружинник
    Clans:
      Not involved in the clans.
M&B Status:
Offline
Reputation point: 0

Re: Моды LIF

Post Number:#3  Postby Krinym » 26 Aug 2015, 11:22

Вот скриптик для желающих поиграть в компании на своем сервере. Ограничивает количество создаваемых персонажей на аккаунте и дает при создании стартовый комплект
BEGIN
SET @characterCount = (SELECT COUNT(*) FROM `character` ch WHERE ch.AccountID = NEW.AccountID);
IF @characterCount > 1 THEN
SET @msg = "Cannot create more than 1 characters per account";
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @msg;
END IF;
SET @sack = f_createContainer(NEW.RootContainerID, 459, 0);
SET @temp = f_insertNewItemInventory(@sack, 555, 50, 1, 50000, 50000, NULL, NULL); /* practice sword */
SET @temp = f_insertNewItemInventory(@sack, 41, 100, 1, 50000, 50000, NULL, NULL); /* primitive shovel */
SET @temp = f_insertNewItemInventory(@sack, 43, 100, 1, 50000, 50000, NULL, NULL); /* primitive hammer */
SET @temp = f_insertNewItemInventory(@sack, 45, 100, 1, 50000, 50000, NULL, NULL); /* primitive axe */
SET @temp = f_insertNewItemInventory(@sack, 50, 100, 1, 50000, 50000, NULL, NULL); /* primitive saw */
SET @temp = f_insertNewItemInventory(@sack, 30, 100, 1, 50000, 50000, NULL, NULL); /* primitive sickle */
SET @temp = f_insertNewItemInventory(@sack, 47, 100, 1, 50000, 50000, NULL, NULL); /* primitive pickaxe */
SET @temp = f_insertNewItemInventory(@sack, 289, 100, 1, 50000, 50000, NULL, NULL); /* primitive knife */
SET @temp = f_insertNewItemInventory(@sack, 974, 50, 25, 50000, 50000, NULL, NULL); /* 25x q50 Apple Buns */
SET @temp = f_insertNewItemInventory(@sack, 1028, 50, 1, 15000, 15000, NULL, NULL); /* primitive cooking pot */
END

Выращивает на грязи зеленую траву.
update `geo_patch` set `Substance` = 1 where `Substance` = 6;
update `geo_patch` set `Substance` = 7 where `Substance` = 8;

Это позволяет молиться много раз.
CREATE DEFINER=`root`@`localhost` TRIGGER `character_alignment_fix` BEFORE UPDATE ON `character` FOR EACH ROW BEGIN
IF (new.LastTimeUsedPraiseYourGodAbility > 0) THEN
set new.LastTimeUsedPraiseYourGodAbility = 0;
END IF;
END

Эта процедура удаляет деревья качеством ниже 80 (можно менять желаемое качество до которого будут удалены деревья)
DELETE forest, forest_patch
FROM forest, forest_patch
WHERE forest.GeoDataID = forest_patch.GeoDataID AND
forest.Quality < 80;

SET @c442 = 1;
SET @c443 = 1;
SET @c444 = 1;
SET @c445 = 1;
SET @c446 = 1;
SET @c447 = 1;
SET @c448 = 1;
SET @c449 = 1;
SET @c450 = 1;

UPDATE forest_patch
SET Version = @c442:=@c442+1
WHERE TerID = 442;

UPDATE forest_patch
SET Version = @c443:=@c443+1
WHERE TerID = 443;

UPDATE forest_patch
SET Version = @c444:=@c444+1
WHERE TerID = 444;

UPDATE forest_patch
SET Version = @c445:=@c445+1
WHERE TerID = 445;

UPDATE forest_patch
SET Version = @c446:=@c446+1
WHERE TerID = 446;

UPDATE forest_patch
SET Version = @c447:=@c447+1
WHERE TerID = 447;

UPDATE forest_patch
SET Version = @c448:=@c448+1
WHERE TerID = 448;

UPDATE forest_patch
SET Version = @c449:=@c449+1
WHERE TerID = 449;

UPDATE forest_patch
SET Version = @c450:=@c450+1
WHERE TerID = 450;

SET @c442 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 442 ORDER BY TerID);
SET @c443 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 443 ORDER BY TerID);
SET @c444 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 444 ORDER BY TerID);
SET @c445 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 445 ORDER BY TerID);
SET @c446 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 446 ORDER BY TerID);
SET @c447 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 447 ORDER BY TerID);
SET @c448 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 448 ORDER BY TerID);
SET @c449 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 449 ORDER BY TerID);
SET @c450 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 450 ORDER BY TerID);

UPDATE terrain_blocks
SET ForestVersion = @c442
WHERE ID = 442;

UPDATE terrain_blocks
SET ForestVersion = @c443
WHERE ID = 443;

UPDATE terrain_blocks
SET ForestVersion = @c444
WHERE ID = 444;

UPDATE terrain_blocks
SET ForestVersion = @c445
WHERE ID = 445;

UPDATE terrain_blocks
SET ForestVersion = @c446
WHERE ID = 446;

UPDATE terrain_blocks
SET ForestVersion = @c447
WHERE ID = 447;

UPDATE terrain_blocks
SET ForestVersion = @c448
WHERE ID = 448;

UPDATE terrain_blocks
SET ForestVersion = @c449
WHERE ID = 449;

UPDATE terrain_blocks
SET ForestVersion = @c450
WHERE ID = 450;

Эта процедура заполнит тоннели. Ущербная, не советую делать. Область тоннеля все равно будет заблокирована.

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_deleteTunnel`(IN `geoDataID` INT, IN `altitude` INT)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
COMMENT 'Experimental procedure to undo tunnels in terrain'
BEGIN
IF true THEN
UPDATE geo_patch gp SET gp.IsServerOnly = 1 WHERE gp.GeoDataID = geoDataID AND gp.IsServerOnly = 0;

SET @terID = 0;
SET @newAltitude = 0;
SET @newSubstance = 0;
SET @newQuality = 0;
SELECT gp.TerID, gp.Altitude, gp.Substance, gp.Quality FROM geo_patch gp WHERE gp.GeoDataID = geoDataID AND ChangeIndex = 1 GROUP BY Altitude LIMIT 1 INTO @terID, @newAltitude, @newSubstance, @newQuality;

IF altitude > 0 THEN
SET @newAltitude = altitude;
END IF;

SET @result = f_addGeoPatch(1, 0, @terID, 1, geoDataID, @newAltitude, @newSubstance, 128, 1000, @newQuality);
END IF;
END $$

Вот еще один скрипт на засыпание, засыпает любые тоннели камнем, тоже не советую.

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_deleteTunnel`(IN `geoDataID` INT, IN `altitude` INT)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
COMMENT 'Experimental procedure to undo tunnels in terrain'
BEGIN
IF true THEN
UPDATE geo_patch gp SET gp.IsServerOnly = 1 WHERE gp.GeoDataID = geoDataID AND gp.IsServerOnly = 0;

SET @terID = 0;
SET @newAltitude = 0;
SELECT gp.TerID, gp.Altitude FROM geo_patch gp WHERE gp.GeoDataID = geoDataID AND ChangeIndex = 1 GROUP BY Altitude LIMIT 1 INTO @terID, @newAltitude;

IF altitude > 0 THEN
SET @newAltitude = altitude;
END IF;

SET @result = f_addGeoPatch(1, 0, @terID, 1, geoDataID, @newAltitude, 3, 128, 60000, 42);
END IF;
END

CREATE DEFINER=`root`@`localhost` TRIGGER `t_adminUndoTunnel` AFTER UPDATE ON `items` FOR EACH ROW BEGIN
IF NEW.ObjectTypeID = 1062 THEN
SET @ownerID = (SELECT OwnerID FROM movable_objects mo JOIN containers con ON con.ID = mo.RootContainerID WHERE con.ID = NEW.ContainerID);

SET @location = (SELECT GeoID FROM `character` WHERE ID = @ownerID);
SET @altitude = (SELECT GeoAlt FROM `character` WHERE ID = @ownerID);
SET @tunnelCount = (SELECT COUNT(*) FROM geo_patch gp WHERE gp.GeoDataID = @location AND gp.Substance = 0 AND gp.LevelFlags & 1 = 0);
IF @tunnelCount > 0 THEN
CALL p_deleteTunnel(@location, 0);
END IF;
END IF;
END

Еще один способ засыпать тоннели, меньше побочных эффектов.
CREATE PROCEDURE `test_tun_removal`(IN `GeoTerID` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''

BEGIN

CREATE Temporary TABLE `ark_tuntemp` (
`ID` INT NULL,
INDEX `ID` (`ID`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

CREATE TEMPORARY TABLE `ark_geo_versions` (
`Version` INT(11) NULL DEFAULT NULL,
`NewVersion` INT(11) NULL DEFAULT NULL,
INDEX `Version` (`Version`),
UNIQUE INDEX `NewVersion` (`NewVersion`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;


insert into ark_tuntemp ( ID ) (
SELECT ID from geo_patch
WHERE Version in ( select Version from geo_patch where ( Substance = 0 or LevelFlags = 128 )and TerID = GeoTerID ) and TerID = GeoTerID
);

-- DELETE TUNNELS

DELETE FROM geo_patch where ID in ( Select ID from ark_tuntemp );

-- RE-INDEX
INSERT INTO ark_geo_versions ( Version ) ( SELECT Version from geo_patch where TerID = GeoTerID group by Version);

SET @n = 1;
UPDATE ark_geo_versions SET NewVersion = @n:=@n+1;

UPDATE geo_patch g
JOIN ark_geo_versions v on v.Version = g.Version
SET g.Version = v.NewVersion WHERE g.TerID = GeoTerID;

UPDATE terrain_blocks SET GeoVersion = ( select Version from geo_patch where TerID = GeoTerID order by Version desc limit 1 ) WHERE ID = GeoTerID;

drop temporary table if exists ark_tuntemp;
DROP TEMPORARY TABLE IF EXISTS ark_geo_versions;

END

После этого удалите все ссылки на кэшированные патчи от terrain_blocks Таблица и запустите сервер.
UPDATE `terrain_blocks` SET `CachedGeoVersion`=NULL, `CachedTerCRC`=NULL, `CachedServerGeoIdxCRC`=NULL, `CachedServerGeoDatCRC`=NULL, `CachedClientGeoIdxCRC`=NULL, `CachedClientGeoDatCRC`=NULL, `PackedTerCRC`=NULL, `PackedClientGeoIdxCRC`=NULL, `PackedClientGeoDatCRC`=NULL, `CachedClientGeoIdxSize`=NULL, `CachedClientGeoDatSize`=NULL WHERE `ID`>0;

Таблица убийств
Сама таблица
CREATE TABLE `chars_new_deathlog` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Time` INT(10) UNSIGNED NOT NULL,
`CharID` INT(10) UNSIGNED NOT NULL,
`CharGuidID` INT(10) UNSIGNED NULL DEFAULT NULL,
`KillerID` INT(10) UNSIGNED NOT NULL,
`KillerGuidID` INT(10) UNSIGNED NULL DEFAULT NULL,
`IsKnockout` TINYINT(3) UNSIGNED NULL DEFAULT '0',
PRIMARY KEY (`ID`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=10
;

Триггер
delimiter #
create trigger chars_new_deathlog_trigger after insert on chars_deathlog
for each row
begin
insert into chars_new_deathlog (chars_new_deathlog.Time,
chars_new_deathlog.CharID,
chars_new_deathlog.KillerID,
chars_new_deathlog.IsKnockout,
chars_new_deathlog.CharGuidID,
chars_new_deathlog.KillerGuidID)
values (new.`Time`, new.CharID, new.KillerID, new.IsKnockout,
(select guildID from `character` where `character`.ID = new.CharID),
(select guildID from `character` where `character`.ID = new.KillerID)
);
end#

Запускаем мельницу
открываем свой cm_objects.xml файл и переходим к мельнице
<object id="137" isUnflattenAllowed="0" rotationStep="1" defaultState="Complete" StreamingGroup="3">

спускаемся ниже и видим
<shapes>
<shape>
<shapeName>art/Models/3D/Construction/MassProcessing/Windmill/windmill.dts</shapeName>
<offset x="4.57424" y="4.73604" z="3.8147e-006" />
<rot x="0" y="0" z="1" angle="0" />
<scale x="1" y="1" z="1" />
</shape>
</shapes>

добавляем следующее
<state type="Complete">
<shapes>
<shape>
<shapeName>art/Models/3D/Construction/MassProcessing/Windmill/windmill.dts</shapeName>
<animationName>work</animationName>
<offset x="4.57424" y="4.73604" z="3.8147e-006" />
<rot x="0" y="0" z="1" angle="0" />
<scale x="1" y="1" z="1" />
</shape>
</shapes>
  • User avatar
  • Krinym
    Модератор
    Clans:
      Not involved in the clans.
M&B Status:
Offline
Reputation point: 21

Re: Моды LIF

Post Number:#4  Postby IrvinSQ » 05 Sep 2015, 15:57

https://yadi.sk/d/4iy9XISeitJtu - горячие кнпоки в игре
F3 - в меню - конектит к серваку
F3 - в игре - показ онлайна пока держишь кнопку
alt -F3 - показан онлайна аналогично Esc-Игроки(players)
alt- F2 - реконнект при залипании клиена
  • User avatar
  • IrvinSQ
    Дружинник
    Clans:
      Not involved in the clans.
M&B Status:
Offline
Reputation point: 0




Return to Life is Feudal: Your Own

Who is online

Users browsing this forum: No registered users and 2 guests