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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

Орёл-решка, скрипт игры в монетку.

Magmatic Imperius

Участник форума
Регистрация
21 Апр 2009
Сообщения
85
Благодарности
10
Баллы
160
Во всем этом есть один нюанс, который я отразил в диалоге непися и ГГ.

Стандартное начало закрытия диалогов и карманного воровства.
instance DIA_Hans_EXIT(C_Info)
{
npc = VLK_459_Buerger;
nr = 999;
condition = DIA_Hans_EXIT_Condition;
information = DIA_Hans_EXIT_Info;
permanent = TRUE;
description = Dialog_Ende;
};


func int DIA_Hans_EXIT_Condition()
{
return TRUE;
};

func void DIA_Hans_EXIT_Info()
{
AI_StopProcessInfos(self);
};


instance DIA_Hans_PICKPOCKET(C_Info)
{
npc = VLK_459_Buerger;
nr = 900;
condition = DIA_Hans_PICKPOCKET_Condition;
information = DIA_Hans_PICKPOCKET_Info;
permanent = TRUE;
description = Pickpocket_60;
};


func int DIA_Hans_PICKPOCKET_Condition()
{
return C_Beklauen(60,65);
};

func void DIA_Hans_PICKPOCKET_Info()
{
Info_ClearChoices(DIA_Hans_PICKPOCKET);
Info_AddChoice(DIA_Hans_PICKPOCKET,Dialog_Back,DIA_Hans_PICKPOCKET_BACK);
Info_AddChoice(DIA_Hans_PICKPOCKET,DIALOG_PICKPOCKET,DIA_Hans_PICKPOCKET_DoIt);
};

func void DIA_Hans_PICKPOCKET_DoIt()
{
B_Beklauen();
Info_ClearChoices(DIA_Hans_PICKPOCKET);
};

func void DIA_Hans_PICKPOCKET_BACK()
{
Info_ClearChoices(DIA_Hans_PICKPOCKET);
};


instance DIA_Hans_Hallo(C_Info) // Стартовый диалог
{
npc = VLK_459_Buerger;
nr = 1;
condition = DIA_Hans_Hallo_Condition;
information = DIA_Hans_Hallo_Info;
important = TRUE;
};


func int DIA_Hans_Hallo_Condition()
{
if(Npc_IsInState(self,ZS_Talk))
{
return TRUE;
};
};

func void DIA_Hans_Hallo_Info() //Нюанс ниже
{
if(hero.guild == GIL_NONE)
{
AI_Output(self,other,"DIA_Maleth_Hallo_08_00"); //Привет, чужеземец.
AI_Output(self,other,"DIA_Hans_Hallo_15_01"); //Как тебе Хоринис? Знатная дыра как по мне, но даже тут есть кое-какие приятные мелочи.
AI_Output(other,self,"DIA_Hans_Hallo_15_02"); //Это какие?
AI_Output(self,other,"DIA_Hans_Hallo_15_03"); //Взять хоть бордель или бесплатную выпивку, что раздают у казарм. Но кроме этого здесь есть азартные игры.
AI_Output(other,self,"DIA_Hans_Hallo_15_04"); //Да ну?
AI_Output(self,other,"DIA_Hans_Hallo_15_05"); //Ага, можно подраться с одним парнем за деньги,или сыграть в кости, или подкинуть монетку. Не нашу, наши, сам знаешь, с обеих сторон одинаковы, а варантскую еще с той войны с ассасинами.
AI_Output(self,other,"DIA_Hans_Hallo_15_06"); //Вот гляди (показывает), с одной стороны солнце, с другой гора. Захочешь сыграть, заглядывай.
};
};
var int Start_game;
var int RoundC;
var int CStage;
instance NPC_СGame(C_Info) //Орел-решка игра.
{
npc = VLK_459_Buerger;
nr = 2;
condition = PC_СGame_Condition;
information = PC_СGame_Info;
permanent = TRUE;
description = "Сыграем в монетку?";
};
func int PC_СGame_Condition()
{
if(Npc_KnowsInfo(other,DIA_Hans_Hallo)) && (CStage == 0)
{
return TRUE;
};
};

func void PC_СGame_Info()

{
AI_Output(other,self,"DIA_PlayСGame_15_01"); //Сыграем?
Info_ClearChoices(NPC_СGame);

if (Npc_HasItems(other,ItMi_Gold) >= 50)
{
AI_Output(self,other,"DIA_PlayСGame_15_02"); //Сколько ставишь?
Info_AddChoice(NPC_СGame,"20 золотых",PC_СGame_1);
Info_AddChoice(NPC_СGame,"30 золотых",PC_СGame_2);
Info_AddChoice(NPC_СGame,"50 золотых",PC_СGame_3);
CStage = 1;
}
else
{
AI_Output(self,other,"DIA_PlayСGame_18_01"); //У тебя маловато деньжат. Собери монет пятьдесят, тогда и поиграем.
AI_StopProcessInfos(self);
};

};

func void PC_СGame_1()
{
AI_Output(other,self,"DIA_PlayСGame_15_03"); // 20золотых
RoundC = 20;
Start_game = TRUE;
Info_ClearChoices(NPC_СGame);
};

func void PC_СGame_2()
{
AI_Output(other,self,"DIA_PlayСGame_15_04"); //30 золотых
RoundC = 30;
Start_game = TRUE;
Info_ClearChoices(NPC_СGame);
};

func void PC_СGame_3()
{
AI_Output(other,self,"DIA_PlayСGame_15_05"); //50 золотых
RoundC = 50;
Start_game = TRUE;
Info_ClearChoices(NPC_СGame);
};

// Диалог выбора стороны монеты.Затем розыгрыш.
var int Side1;
var int Side2;
instance Coin_side(C_Info)
{
npc = VLK_459_Buerger;
nr = 2;
condition = Coin_side_Condition;
information = Coin_side_Info;
permanent = TRUE;
description = "Выбор стороны монеты.";

};
func int Coin_side_Condition()
{
if (CStage == 1) && (Start_game == TRUE)
{
return TRUE;
};
};

func void Coin_side_Info()
{
Info_ClearChoices(Coin_side);
Info_AddChoice(Coin_side,"Гора",Coin_side_1);
Info_AddChoice(Coin_side,"Солнце",Coin_side_2);
CStage = 2;
};

func void Coin_side_1()
{
AI_Output(other,self,"DIA_Coin_side_15_03"); // Гора
Info_ClearChoices(Coin_side);
Side1 = TRUE;
Side2 = FALSE;
};
func void Coin_side_2()
{
AI_Output(other,self,"DIA_Coin_side_15_04"); // Солнце.
Info_ClearChoices(Coin_side);
Side2 = TRUE;
Side1 = FALSE;
};

var int GameC;
var int CS1;
var int CS2;
var int Luck;
instance NPC_СGame_Start(C_Info)
{
npc = VLK_459_Buerger;
nr = 2;
condition = PC_СGame_Start_Condition;
information = PC_СGame_Start_Info;
permanent = TRUE;
description = "Начнем";

};
func int PC_СGame_Start_Condition()
{
if(Start_game == TRUE) && (CStage == 2)
{
return TRUE;
};
};
func void PC_СGame_Start_Info()

{
AI_Output(other,self,"DIA_CGame_15_99"); //Приступим.
GameC = Hlp_Random(100);
Luck = Hlp_Random(100);
if((other.attribute[ATR_DEXTERITY])/30) + (Luck) > (GameC + 3)
{
AI_Output(self,other,"DIA_CGame_15_01"); //Гора
CS1 = TRUE;
CS2 = FALSE;
//сравнение выбора ГГ с тем что выпало вписать тут
if (CS1 == TRUE) && (Side2 == TRUE)
{
AI_Output(self,other,"DIA_CGame_15_06"); //Хе-хе, я выиграл. Гони монету.
B_GiveInvItems(other,self,ItMi_Gold,RoundC);
}
else
{
AI_Output(self,other,"DIA_CGame_15_05"); //Ты победил вот деньги.
B_GiveInvItems(self,other,ItMi_Gold,RoundC);
};
}
else
{
AI_Output(self,other,"DIA_CGame_15_02"); //Солнце.
CS2 = TRUE;
CS1 = FALSE;
if (CS2 == TRUE) && (Side1 == TRUE)
{
AI_Output(self,other,"DIA_CGame_15_06"); //Хе-хе, я выиграл. Гони монету.
B_GiveInvItems(other,self,ItMi_Gold,RoundC);
}
else
{
AI_Output(self,other,"DIA_CGame_15_05"); //Ты победил вот деньги.
B_GiveInvItems(self,other,ItMi_Gold,RoundC);
};
};
CStage = 0;
};




После многократного тестирования выявил небольшой дефект, одна из сторон выпадает чаще (какая не скажу), однако пляски с бубном могут только ухудшить ситуацию, ибо баланс 50/50 просчитать весьма сложно. Впрочем, "победная" сторона выпадает примерно 3 из 5 попыток, хотя чуть понизив коэффициент в выражении (GameC+n), где n равнялась 5 на тройку, шансы стали чуть ровнее.
 
Сверху Снизу