• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 574
Последнее редактирование модератором:

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Ребят всем привет. Люблю готику. Занимаюсь улучшением игры для себя. Знаю базовую работу gothicsourcer, Vdfs… в общем ситуация такая:

Стоит игра gothic 2 rebalance 2.1

При декомпиляции/компиляции скрипта gothic.dat из содержимого .mod (даже если никаких изменений не вносились скрипты) возникает проблема с выносливостью, она полностью не расходуется.

Дело не в запаковщике VDFS, а в gothicsourcer возможно проблемы с компиляцией и декомпиляцией, может время ХЗ. Провёл тесты методом исключения, проблема возникает на этапе работы с gothicsourcer. какие ошибки я могу допускать при компиляции скриптов ?
Пост автоматически объединён:

Хочу свой мод сделать, основанный на стелсе и воровстве …)))

03AD0320-325E-408F-8F6E-39B03A23F6D7.jpeg

dimmel похоже защитил свой мод от простых обывателей, при декомпиляции происходят какие-то изменения в скрипте, уже химичил с временем… не помогло. Менял время изменения файла gothic.dat…. Помогите пожалуйста обойти это блокировку.
 
Последнее редактирование модератором:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
dimmel похоже защитил свой мод от простых обывателей, при декомпиляции происходят какие-то изменения в скрипте
Декомпиляция не позволяет получить исходный вид скриптов. Есть некоторые моменты, которые декомпилируются криво или вовсе не могут быть декомпилированы Соурсером. Некоторые моды используют скриптовые расширители. Поэтому для продолжения работы над проектом неплохо бы получить исходники скриптов, а может, и пояснения к ним у автора мода.

Помогите пожалуйста обойти это блокировку
Ты думаешь, кривобокая фотка способствует пониманию проблемы потенциальными помощниками и советчиками? Даже скриншот лучше этой фотки, а текст скрипта лучше скриншота. ;)
 

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Декомпиляция не позволяет получить исходный вид скриптов. Есть некоторые моменты, которые декомпилируются криво или вовсе не могут быть декомпилированы Соурсером. Некоторые моды используют скриптовые расширители. Поэтому для продолжения работы над проектом неплохо бы получить исходники скриптов, а может, и пояснения к ним у автора мода.
Ты думаешь, кривобокая фотка способствует пониманию проблемы потенциальными помощниками и советчиками? Даже скриншот лучше этой фотки, а текст скрипта лучше скриншота. ;)
этот вопрос уже обсуждался давно... но нет результата. пробовал заменить на HERO не помогло.
по поводу исходников. о судьбе dimmel ничего не известно ибо он заходил последний раз 2014 году.
создатель rebalance 2.1, slash'n craft....

var int fch01;
var int fch02;
var int reloadstam;
var int kreoltime;

func void b_gettime()
{
var string concatText;
var int t;
var int m;
var int s;
var int danceStyle;
s += 1;
if(s >= 60)
{
s = 0;
m += 1;
TIME_MINUTES += 1;
};
if(m >= 60)
{
m = 0;
t += 1;
TIME_HOUR += 1;
TIME_MINUTES = 0;
};
concatText = "";
if(t < 10)
{
concatText = ConcatStrings(concatText,"0");
};
concatText = ConcatStrings(concatText,IntToString(t));
concatText = ConcatStrings(concatText,":");
if(m < 10)
{
concatText = ConcatStrings(concatText,"0");
};
concatText = ConcatStrings(concatText,IntToString(m));
if((MODCHECKV != 201) && (m >= 1))
{
AI_Wait(hero,50);
PrintScreen("Версия игры не соответствует версии загруженного сохранения!!!!",-1,40,FONT_Screen,10);
PrintScreen("Аварийное завершение игры через",-1,-1,FONT_Screen,10);
if(ATR_INTELLECT > 0)
{
ATR_INTELLECT -= 1;
concatText = ConcatStrings("",IntToString(ATR_INTELLECT));
PrintScreen(concatText,-1,60,FONT_Screen,1);
}
else
{
ExitGame();
};
};
if(EQSCHATT == 1)
{
danceStyle = Hlp_Random(9);
if(danceStyle == 0)
{
AI_PlayAni(hero,"T_DANCE_01");
};
if(danceStyle == 1)
{
AI_PlayAni(hero,"T_DANCE_02");
};
if(danceStyle == 2)
{
AI_PlayAni(hero,"T_DANCE_03");
};
if(danceStyle == 3)
{
AI_PlayAni(hero,"T_DANCE_04");
};
if(danceStyle == 4)
{
AI_PlayAni(hero,"T_DANCE_05");
};
if(danceStyle == 5)
{
AI_PlayAni(hero,"T_DANCE_06");
};
if(danceStyle == 6)
{
AI_PlayAni(hero,"T_DANCE_07");
};
if(danceStyle == 7)
{
AI_PlayAni(hero,"T_DANCE_08");
};
if(danceStyle == 8)
{
AI_PlayAni(hero,"T_DANCE_09");
};
};
if((HEROTRANS == 1) && (hero.guild <= GIL_SEPERATOR_HUM) && (HEROTRANSTIME >= 3))
{
HEROTRANS = 0;
HEROTRANSTIME = 0;
}
else if((HEROTRANS == 1) && (hero.guild <= GIL_SEPERATOR_HUM))
{
if(HEROTRANSTIME == 1)
{
AI_UnequipWeapons(hero);
};
HEROTRANSTIME += 1;
};
};

func void b_initdamage()
{
spell_berzerk.damage_per_level = SPL_DAMAGE_BERZERK + ATR_INTELLECT;
Spell_Firebolt.damage_per_level = SPL_Damage_Firebolt + ATR_INTELLECT;
Spell_BreathOfDeath.damage_per_level = SPL_Damage_BreathOfDeath + ATR_INTELLECT;
Spell_ChargeFireball.damage_per_level = SPL_Damage_ChargeFireball + ATR_INTELLECT;
Spell_ChargeZap.damage_per_level = SPL_Damage_ChargeZap + ATR_INTELLECT;
Spell_Concussionbolt.damage_per_level = SPL_DAMAGE_Concussionbolt + ATR_INTELLECT;
Spell_Deathball.damage_per_level = SPL_DAMAGE_Deathball + ATR_INTELLECT;
Spell_Deathbolt.damage_per_level = SPL_DAMAGE_Deathbolt + ATR_INTELLECT;
Spell_EnergyBall.damage_per_level = SPL_DAMAGE_Energyball + ATR_INTELLECT;
Spell_FireRain.damage_per_level = SPL_Damage_FireRain + ATR_INTELLECT;
Spell_Firestorm.damage_per_level = SPL_Damage_InstantFireStorm + ATR_INTELLECT;
Spell_Geyser.damage_per_level = SPL_DAMAGE_Geyser + ATR_INTELLECT;
Spell_Greententacle.damage_per_level = SPL_DAMAGE_GREENTENTACLE + ATR_INTELLECT;
Spell_IceBolt.damage_per_level = SPL_DAMAGE_Icebolt + ATR_INTELLECT;
Spell_IceCube.damage_per_level = SPL_DAMAGE_ICECUBE + ATR_INTELLECT;
Spell_Icelance.damage_per_level = SPL_DAMAGE_Icelance + ATR_INTELLECT;
Spell_IceWave.damage_per_level = SPL_DAMAGE_ICEWAVE + ATR_INTELLECT;
Spell_InstantFireball.damage_per_level = SPL_DAMAGE_InstantFireball + ATR_INTELLECT;
Spell_LightningFlash.damage_per_level = SPL_Damage_LightningFlash + ATR_INTELLECT;
Spell_MassDeath.damage_per_level = SPL_Damage_MassDeath + ATR_INTELLECT;
Spell_MasterOfDisaster.damage_per_level = SPL_DAMAGE_MasterOfDisaster + ATR_INTELLECT;
Spell_PalDestroyEvil.damage_per_level = SPL_Damage_PalDestroyEvil + ATR_INTELLECT;
Spell_PalHolyBolt.damage_per_level = SPL_Damage_PalHolyBolt + ATR_INTELLECT;
Spell_PalRepelEvil.damage_per_level = SPL_Damage_PalRepelEvil + ATR_INTELLECT;
Spell_Pyrokinesis.damage_per_level = SPL_Damage_Firestorm + ATR_INTELLECT;
Spell_Skull.damage_per_level = SPL_Damage_Skull + ATR_INTELLECT;
Spell_Thunderstorm.damage_per_level = SPL_DAMAGE_Thunderstorm + ATR_INTELLECT;
spell_tplheavystrike.damage_per_level = SPL_DAMAGE_TPLHEAVYSTRIKE + ATR_INTELLECT;
spell_tpllightstrike.damage_per_level = SPL_DAMAGE_TPLLIGHTSTRIKE + ATR_INTELLECT;
spell_tplmediumstrike.damage_per_level = SPL_DAMAGE_TPLMEDIUMSTRIKE + ATR_INTELLECT;
Spell_Waterfist.damage_per_level = SPL_DAMAGE_Waterfist + ATR_INTELLECT;
Spell_Whirlwind.damage_per_level = SPL_Whirlwind_DAMAGE + ATR_INTELLECT;
Spell_WindFist.damage_per_level = SPL_Damage_Windfist + ATR_INTELLECT;
Spell_Zap.damage_per_level = SPL_Damage_Zap + ATR_INTELLECT;
if(Npc_HasItems(hero,ItMw_1h_Vlk_Sword) > 0)
{
Npc_GetInvItem(hero,ItMw_1h_Vlk_Sword);
item.damageTotal = 30 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,ItMw_Rapier) > 0)
{
Npc_GetInvItem(hero,ItMw_Rapier);
item.damageTotal = 50 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,ItMw_Meisterdegen) > 0)
{
Npc_GetInvItem(hero,ItMw_Meisterdegen);
item.damageTotal = 70 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,ItMw_Addon_BanditTrader) > 0)
{
Npc_GetInvItem(hero,ItMw_Addon_BanditTrader);
item.damageTotal = 30 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,ItMw_Addon_Betty) > 0)
{
Npc_GetInvItem(hero,ItMw_Addon_Betty);
item.damageTotal = 90 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,itmw_scorpionspec) > 0)
{
Npc_GetInvItem(hero,itmw_scorpionspec);
item.damageTotal = 90 + (hero.attribute[ATR_DEXTERITY] / SBMODE);
};
if(Npc_HasItems(hero,ItMW_Addon_Stab01) > 0)
{
Npc_GetInvItem(hero,ItMW_Addon_Stab01);
item.damageTotal = DAMAGE_STAB01MAGIC + ATR_INTELLECT;
};
if(Npc_HasItems(hero,itmw_magestaff_1h_f) > 0)
{
Npc_GetInvItem(hero,itmw_magestaff_1h_f);
item.damageTotal = 30 + ATR_INTELLECT;
};
if(Npc_HasItems(hero,ItMW_Addon_Stab02) > 0)
{
Npc_GetInvItem(hero,ItMW_Addon_Stab02);
item.damageTotal = DAMAGE_STAB02MAGIC + ATR_INTELLECT;
};
if(Npc_HasItems(hero,ItMW_Addon_Stab03) > 0)
{
Npc_GetInvItem(hero,ItMW_Addon_Stab03);
item.damageTotal = DAMAGE_STAB03MAGIC + ATR_INTELLECT;
};
if(Npc_HasItems(hero,ItMW_Addon_Stab04) > 0)
{
Npc_GetInvItem(hero,ItMW_Addon_Stab04);
item.damageTotal = DAMAGE_STAB04MAGIC + (ATR_INTELLECT * 2);
};
if(Npc_HasItems(hero,itmw_magestaff_1h_w) > 0)
{
Npc_GetInvItem(hero,itmw_magestaff_1h_w);
item.damageTotal = 30 + ATR_INTELLECT;
};
if(Npc_HasItems(hero,itmw_magestaff_1h_n) > 0)
{
Npc_GetInvItem(hero,itmw_magestaff_1h_n);
item.damageTotal = 30 + ATR_INTELLECT;
};
if(Npc_HasItems(hero,itmw_magestaff_1h_g) > 0)
{
Npc_GetInvItem(hero,itmw_magestaff_1h_g);
item.damageTotal = 30 + (ATR_INTELLECT * 2);
};
if(Npc_HasItems(hero,ItRw_Addon_FireBow) > 0)
{
Npc_GetInvItem(hero,ItRw_Addon_FireBow);
item.damageTotal = 30 + (ATR_INTELLECT * 2);
item.damage[DAM_INDEX_FIRE] = 30 + (ATR_INTELLECT * 2);
};
if(Npc_HasItems(hero,ItRw_Addon_MagicBow) > 0)
{
Npc_GetInvItem(hero,ItRw_Addon_MagicBow);
item.damageTotal = 60 + (ATR_INTELLECT * 2);
};
if(Npc_HasItems(hero,ItRw_Addon_MagicCrossbow) > 0)
{
Npc_GetInvItem(hero,ItRw_Addon_MagicCrossbow);
item.damageTotal = 100 + (ATR_INTELLECT * 2);
};
};

func void hero_poisoned()
{
if(POISONED > 0)
{
if((ATR_STAMINA > 0) && (ATR_STAMINA >= POISONED))
{
ATR_STAMINA -= POISONED * 2;
}
else if(ATR_STAMINA <= 0)
{
hero.attribute[ATR_HITPOINTS] -= POISONED * 4;
ATR_STAMINA = 0;
};
print_percent_bar_fight(ATR_STAMINA,ATR_STAMINA_MAX * 10,"Выносливость",42,97);
};
if((Npc_GetBodyState(self) == BS_RUN) || (Npc_GetBodyState(self) == BS_WALK) || (Npc_GetBodyState(self) == BS_SNEAK))
{
}
else if(Npc_IsInFightMode(self,FMODE_FAR) && (ATR_STAMINA > 0) && Npc_GetTarget(self))
{
if(ATR_STAMINA > (RANGEWEAPONINDEX * 2))
{
ATR_STAMINA = ATR_STAMINA - (RANGEWEAPONINDEX * 2);
}
else
{
ATR_STAMINA = 0;
};
print_percent_bar_fight(ATR_STAMINA,ATR_STAMINA_MAX * 10,"Выносливость",42,97);
};
if((ATR_STAMINA > 0) && C_BodyStateContains(self,BS_HIT))
{
if(Npc_IsInFightMode(self,FMODE_MELEE))
{
if(ATR_STAMINA > (MELEEWEAPONINDEX * 2))
{
ATR_STAMINA = ATR_STAMINA - (MELEEWEAPONINDEX * 2);
}
else
{
ATR_STAMINA = 0;
};
}
else if(Npc_IsInFightMode(self,FMODE_FIST))
{
if(ATR_STAMINA > 1)
{
ATR_STAMINA = ATR_STAMINA - 2;
}
else
{
ATR_STAMINA = 0;
};
};
print_percent_bar_fight(ATR_STAMINA,ATR_STAMINA_MAX * 10,"Выносливость",42,97);
}
else if((ATR_STAMINA <= 0) && (hero.attribute[ATR_HITPOINTS] > 0))
{
if(hero.attribute[ATR_HITPOINTS] <= hero.attribute[ATR_HITPOINTS_MAX])
{
if(Npc_IsInFightMode(self,FMODE_MELEE))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - (MELEEWEAPONINDEX * 2);
}
else if(Npc_IsInFightMode(self,FMODE_FIST))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - 2;
}
else if(Npc_IsInFightMode(self,FMODE_FAR))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - (RANGEWEAPONINDEX * 2);
};
}
else if(hero.attribute[ATR_HITPOINTS] < (hero.attribute[ATR_HITPOINTS_MAX] / 2))
{
if(Npc_IsInFightMode(self,FMODE_MELEE))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - MELEEWEAPONINDEX;
}
else if(Npc_IsInFightMode(self,FMODE_FIST))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - 1;
}
else if(Npc_IsInFightMode(self,FMODE_FAR))
{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] - RANGEWEAPONINDEX;
};
};
if(hero.attribute[ATR_HITPOINTS] <= 0)
{
AI_RemoveWeapon(self);
hero.attribute[ATR_HITPOINTS] = 0;
AI_PlayAniBS(self,"T_DEAD",BS_DEAD);
Snd_Play("SVM_15_DEAD");
};
if((hero.attribute[ATR_HITPOINTS] <= (hero.attribute[ATR_HITPOINTS_MAX] / 5)) && C_BodyStateContains(self,BS_HIT))
{
Snd_Play("SVM_15_AARGH_3");
}
else if((hero.attribute[ATR_HITPOINTS] <= (hero.attribute[ATR_HITPOINTS_MAX] / 3)) && C_BodyStateContains(self,BS_HIT))
{
Snd_Play("SVM_15_AARGH_1");
};
print_percent_bar_fight(ATR_STAMINA,ATR_STAMINA_MAX * 10,"Выносливость",42,97);
};
if((ATR_STAMINA < 100) && (ATR_STAMINA < (ATR_STAMINA_MAX * 10)) && (POISONED == 0) && Npc_IsInFightMode(self,FMODE_NONE) && (C_BodyStateContains(self,BS_STAND) || C_BodyStateContains(self,BS_SIT)))
{
if(VATRAS_TEACHREGENSTAM == TRUE)
{
ATR_STAMINA += 1;
RELOADSTAM = 0;
}
else if((RELOADSTAM == 3) && (VATRAS_TEACHREGENSTAM == FALSE))
{
ATR_STAMINA += 1;
RELOADSTAM = 0;
}
else
{
RELOADSTAM += 1;
};
}
else
{
RELOADSTAM = 0;
};
if(DEMSPAWN == 1)
{
DEMSPAWNTIME = Hlp_Random(30) + 10;
DEMSPAWN = 2;
}
else if((DEMSPAWN == 2) && (DEMSPAWNTIME != 0))
{
DEMSPAWNTIME -= 1;
}
else if(DEMSPAWNTIME == 0)
{
DEMSPAWN = 0;
};
if((VATRAS_TEACHREGEN == TRUE) && (hero.attribute[ATR_HITPOINTS] > 5))
{
if(hero.attribute[ATR_HITPOINTS] < hero.attribute[ATR_HITPOINTS_MAX])
{
hero.attribute[ATR_HITPOINTS] += 1;
};
};
if((VATRAS_TEACHREGENMANA == TRUE) && (hero.attribute[ATR_HITPOINTS] > 5))
{
if(hero.attribute[ATR_MANA] < hero.attribute[ATR_MANA_MAX])
{
hero.attribute[ATR_MANA] += 1;
};
};
if((hero.attribute[ATR_HITPOINTS] <= 0) && (HERDIED == 0))
{
AI_RemoveWeapon(self);
hero.attribute[ATR_HITPOINTS] = 0;
AI_PlayAniBS(self,"T_DEAD",BS_DEAD);
Snd_Play("SVM_15_DEAD");
HERDIED = 1;
};
};


var int burntime;
var int burntimetot;

func void hero_burn_nw()
{
if((BURNTIME == 0) || (BURNTIME == 5))
{
Wld_PlayEffect("VOB_MAGICBURN",self,self,0,0,0,FALSE);
};
if(BURNTIMETOT <= (4 + Kapitel))
{
if(hero.protection[PROT_FIRE] < (60 * Kapitel))
{
hero.attribute[ATR_HITPOINTS] = (hero.attribute[ATR_HITPOINTS] - (60 * Kapitel)) + hero.protection[PROT_FIRE];
};
BURNTIME += 1;
if(BURNTIME == 4)
{
BURNTIME = 0;
};
};
if((hero.attribute[ATR_HITPOINTS] <= 0) && (HERDIED == 0))
{
AI_DrawWeapon(self);
AI_RemoveWeapon(self);
hero.attribute[ATR_HITPOINTS] = 0;
Snd_Play("SVM_15_DEAD");
FBURN = 0;
BURNTIMETOT = 0;
HERDIED = 1;
};
};

func void mob_fburn()
{
if((BURNTIMETOT <= (4 + Kapitel)) && (hero.attribute[ATR_HITPOINTS] > 0) && (FBURN == 1))
{
hero_burn_nw();
BURNTIMETOT += 1;
}
else
{
BURNTIMETOT = 0;
FBURN = 0;
BURNTIME = 0;
};
};

func void b_cycle_trigger_01()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_01");
return;
};
if(FBURN == 1)
{
mob_fburn();
};
b_gettime();
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_01");
};

func void b_cycle_trigger_02()
{
var int orcrnd;
var int roamrnd;
orcrnd = Hlp_Random(12);
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_02");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
if(Npc_IsDead(orkelite_addon3_chkflg_12) && (SENDPATROW1 == FALSE))
{
Wld_InsertNpc(orc_8522_warrior,"OW_PATH_STONEHENGE_1");
Wld_InsertNpc(orc_8522_warrior,"OW_PATH_STONEHENGE_1");
Wld_InsertNpc(orc_8521_warrior,"OW_PATH_STONEHENGE_1");
Wld_InsertNpc(orc_8521_warrior,"OW_PATH_STONEHENGE_1");
SENDPATROW1 = TRUE;
};
if(SALFIRST == 1)
{
if((orcrnd <= 1) && (FLAG_ORCS_CHK_01 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_1,itwr_stoneplaterum,1);
}
else if((orcrnd == 2) && (FLAG_ORCS_CHK_02 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_2,itwr_stoneplaterum,1);
}
else if((orcrnd == 3) && (FLAG_ORCS_CHK_04 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_4,itwr_stoneplaterum,1);
}
else if((orcrnd == 4) && (FLAG_ORCS_CHK_06 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_6,itwr_stoneplaterum,1);
}
else if((orcrnd == 5) && (FLAG_ORCS_CHK_08 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_8,itwr_stoneplaterum,1);
}
else if((orcrnd == 6) && (FLAG_ORCS_CHK_10 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_10,itwr_stoneplaterum,1);
}
else if((orcrnd == 7) && (FLAG_ORCS_CHK_12 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_12,itwr_stoneplaterum,1);
}
else if((orcrnd == 8) && (FLAG_ORCS_CHK_14 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_14,itwr_stoneplaterum,1);
}
else if((orcrnd == 9) && (FLAG_ORCS_CHK_16 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_16,itwr_stoneplaterum,1);
}
else if((orcrnd == 10) && (FLAG_ORCS_CHK_18 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_18,itwr_stoneplaterum,1);
}
else if((orcrnd == 11) && (FLAG_ORCS_CHK_20 == FALSE))
{
CreateInvItems(orkelite_addon3_chkflg_20,itwr_stoneplaterum,1);
}
else
{
CreateInvItems(orkelite_addon3_chkflg_23,itwr_stoneplaterum,1);
};
SALFIRST = 2;
};
if(MOBINSOW1 == 0)
{
roamrnd = Hlp_Random(100);
if(roamrnd < 25)
{
Wld_InsertItem(itar_djg_helm,"OW_SWAMPDRAGON_01");
}
else if(roamrnd < 50)
{
Wld_InsertItem(itar_djg_helm,"OW_ROCKDRAGON_11");
}
else if(roamrnd < 75)
{
Wld_InsertItem(itar_djg_helm,"OW_ICEDRAGON_01");
}
else
{
Wld_InsertItem(itar_djg_helm,"CASTLE_36");
};
MOBINSOW1 = 1;
};
Wld_SendTrigger("CYCLE_TRIGGER_02");
};

func void b_cycle_trigger_03()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_03");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_03");
};

func void b_cycle_trigger_04()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_04");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_04");
};

func void b_cycle_trigger_05()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_05");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_05");
};

func void b_cycle_trigger_06()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_06");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_06");
};

func void b_cycle_trigger_07()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_07");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_07");
};

func void b_cycle_trigger_08()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_08");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
if(MOBINSLIS1 == 0)
{
Mob_CreateItems("LIS_CHEST_01",itar_schattengreif_helm,1);
MOBINSLIS1 = 1;
};
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_08");
};

func void b_cycle_trigger_09()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_09");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_09");
};

func void b_cycle_trigger_10()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_10");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_10");
};

func void b_cycle_trigger_11()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_11");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_11");
};

func void b_cycle_trigger_12()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_12");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
if((KREOLGURD == 2) && (KREOLTIME <= 900))
{
KREOLTIME += 1;
if(KREOLTIME >= 900)
{
KREOLGURD = 3;
Npc_ExchangeRoutine(none_102_kreol,"kreolroutine");
AI_Teleport(none_102_kreol,"OW_FOGDUNGEON_10_COOK");
};
};
Wld_SendTrigger("CYCLE_TRIGGER_12");
};

func void b_cycle_trigger_13()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_13");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_13");
};

func void b_cycle_trigger_14()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_14");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_14");
};

func void b_cycle_trigger_15()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_15");
return;
};
if(MOBCRFM1 == 0)
{
if((hero.guild != GIL_KDW) && (hero.guild != GIL_NDW))
{
Mob_CreateItems("FM_CHEST_01",itpo_waterfire,1);
};
MOBCRFM1 = 1;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_15");
};

func void b_cycle_trigger_16()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_16");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_16");
};

func void b_cycle_trigger_17()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_17");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_17");
};

func void b_cycle_trigger_18()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_18");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_18");
};

func void b_cycle_trigger_19()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_19");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_19");
};

func void b_cycle_trigger_20()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_20");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_20");
};

func void b_cycle_trigger_21()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_21");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_21");
};

func void b_cycle_trigger_22()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_22");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_22");
};

func void b_cycle_trigger_23()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
Wld_SendTrigger("CYCLE_TRIGGER_23");
return;
};
b_gettime();
if(FBURN == 1)
{
mob_fburn();
};
hero_poisoned();
Npc_SetTalentSkill(hero,NPC_TALENT_INTELLECT,ATR_INTELLECT);
Wld_SendTrigger("CYCLE_TRIGGER_23");
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Nanocloud, с использованием кнопки спойлера ты уже разобрался. Но ещё есть полезная кнопочка "Код". Обрати на неё внимание, поскольку тот код, который лежит под спойлером, трудно воспринимать без разделителей, табуляторов и подсветки синтаксиса.

В функции hero_poisoned имеет место использование идентификатора self. При этом функция вызывается из функций циклического триггера, то есть, она не привязана к моментам, когда идентификатор self указывает на ГГ. Надо полагать, именно в ней требуется замена self на hero.
 

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Nanocloud, с использованием кнопки спойлера ты уже разобрался. Но ещё есть полезная кнопочка "Код". Обрати на неё внимание, поскольку тот код, который лежит под спойлером, трудно воспринимать без разделителей, табуляторов и подсветки синтаксиса.

В функции hero_poisoned имеет место использование идентификатора self. При этом функция вызывается из функций циклического триггера, то есть, она не привязана к моментам, когда идентификатор self указывает на ГГ. Надо полагать, именно в ней требуется замена self на hero

да я знал, просто не мог найти кнопку спойлера))))) попробую сейчас.
Есть некоторые моменты, которые декомпилируются криво или вовсе не могут быть декомпилированы Соурсером. Некоторые моды используют скриптовые расширители.
интересно. я так понимаю для полного написания скриптов для будущих модов sourcer'a недостаточно? скриптовые расширители, можно поподробнее тезисно. спасибо.
в планах сделать мир максимально наполненым и автономным. добавить больше ума к AI. хочу разнообразить вороство по максимуму освещение, пользование бочкакми, немного хоррора...планы большие))))) люблю готику, лет 20 только ей и интересуюсь,
Пост автоматически объединён:

понимаю что реализация некоторых моментов в моде, без вашей помощи невозможна.. я не все знаю.... по финансовой части проблем не будет.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.627
Баллы
910
скриптовые расширители
Если у мода указано AST, ты его недекомпилируешь.
Если у мода указано Ikarus/Lego ты его недекомпилируешь
Если у мода указано Union, ты его недекомпилируешь.

Это все расширители, которые позволяют получить доступ к функциям движка и переделывать их. Все моды с 2013 по текущее время сделаны на ikarus (1 на AST), с 2021 начали делать уже на Union (Пока что тоже 1).
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
для полного написания скриптов для будущих модов sourcer'a недостаточно?
Многое зависит от запросов моддера. Довольно много можно сделать всякими костылями с использованием "стандартных средств". В этом случае Соурсер может быть использован для создания мода. Но "стандартными средствами" реализуется далеко не всё.

скриптовые расширители, можно поподробнее
Я не спец по этим средствам.
 

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Ребят спасибо, за инфу, пока почитаю форум это живая библиотека, для модостроителей, я подготовлю ТЗ мод будет очень интересный, есть сецнарий и музыка. все на высоте.... атмосферно будет. думаю всем понравится.
основан на воровстве, стелсе и хорроре.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.131
Благодарности
5.627
Баллы
910
Я переводчик, так что :D
 

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Все салют! Ребята, подскажите в каком файле находится скрипт переключения музыки с дневной на ночную, как в готике 1 (старый лагерь)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Могу ошибаться, но мне думается, что время переключения музыкальных зон прописано в движке.

В файле игрового мира могут существовать объекты, в свойствах которых указано время активации/деактивации. Так в свойствах источников звука (особого типа) можно указать смену дневного звука на ночной. Но для музыкальных зон такой настройки, вроде бы, нет. В скриптах MUSIC.DAT тоже настройка времени, вроде бы, отсутствует.
 

Nanocloud

Участник форума
Регистрация
4 Май 2022
Сообщения
18
Благодарности
11
Баллы
45
Могу ошибаться, но мне думается, что время переключения музыкальных зон прописано в движке.

В файле игрового мира могут существовать объекты, в свойствах которых указано время активации/деактивации. Так в свойствах источников звука (особого типа) можно указать смену дневного звука на ночной. Но для музыкальных зон такой настройки, вроде бы, нет. В скриптах MUSIC.DAT тоже настройка времени, вроде бы, отсутствует.
Т.е. можно через spacer настроить ?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
можно через spacer настроить ?
Время смены тем для музыкальных зон - вряд-ли. Я же написал:
мне думается, что время переключения музыкальных зон прописано в движке
Там, помимо дневной и ночной тем, есть ещё варианты для ситуации атаки/опасности. Смену производит движок. Автоматически. В теории, возможен вариант, когда время смены ночной темы на дневную и обратно задаётся в виде констант в скриптах, которые читает движок. Но я таких констант не помню.

Так в свойствах источников звука (особого типа) можно указать смену дневного звука на ночной.
Здесь имеются в виду амбиентные звуки, а не музыка. Например, днём поют птицы, ночью стрекочут насекомые.
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.942
Благодарности
1.470
Баллы
465
Насчет дневных/ночных музыкальных тем: если не ошибаюсь, их смена также прописана в движке. Она происходит в 6:30 и в 18:29 соответственно.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.083
Благодарности
1.901
Баллы
320
Насчет дневных/ночных музыкальных тем: если не ошибаюсь, их смена также прописана в движке. Она происходит в 6:30 и в 18:29 соответственно.
Всё верно. Диапазон времени можно поменять с помощью юни.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
558
Баллы
275
Приветствую всех.
Как можно увеличить количество доступных строк в окне описания предметов? Я имею в виду, чтобы не сталкиваться с такой проблемой:
1.png
 
Сверху Снизу