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

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

Скрипт игры в кости

Magmatic Imperius

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

var int Player;
var int Stage;
instance NPC_Game(C_Info) //Запрос на игру
{
npc = VLK_454_Buerger;
nr = 3;
condition = PC_Game_Condition;
information = PC_Game_Info;
permanent = TRUE;
description = "Сыграем в кости?";
};
func int PC_Game_Condition()
{
if(Npc_KnowsInfo(other,DIA_VLK_454_Hello)) && (Player == FALSE) && (Npc_HasItems(other,ItMi_Gold) > 19) || (Stage == 0) &&(Player == FALSE) && (Npc_HasItems(other,ItMi_Gold) > 19) //условия, что игрок еще не играл и у него есть деньги
{
return TRUE;
};
};

func void PC_Game_Info()

{
AI_Output(other,self,"DIA_PlayGame_15_01"); //Сыграем в кости?
AI_Output(self,other,"DIA_PlayGame_15_02"); //Не терпится расстаться с золотом? (смеется) Хорошо.Какая ставка?
Info_ClearChoices(NPC_Game);

if ((Npc_HasItems(other,ItMi_Gold) >= 30) < 50) && (Npc_HasItems(other,ItMi_Gold) < 50)
{
Info_AddChoice(NPC_Game,"20 золотых",PC_Game_1);
Info_AddChoice(NPC_Game,"30 золотых",PC_Game_2);
}
else if ((Npc_HasItems(other,ItMi_Gold) >= 50) < 100) && (Npc_HasItems(other,ItMi_Gold) < 100)
{
Info_AddChoice(NPC_Game,"20 золотых",PC_Game_1);
Info_AddChoice(NPC_Game,"30 золотых",PC_Game_2);
Info_AddChoice(NPC_Game,"50 золотых",PC_Game_3);
}
else if(Npc_HasItems(other,ItMi_Gold) >= 100)
{
Info_AddChoice(NPC_Game,"20 золотых",PC_Game_1);
Info_AddChoice(NPC_Game,"30 золотых",PC_Game_2);
Info_AddChoice(NPC_Game,"50 золотых",PC_Game_3);
Info_AddChoice(NPC_Game,"100 золотых",PC_Game_4);
}
else
{
Info_AddChoice(NPC_Game,"20 золотых",PC_Game_1);
};
Stage = 1; //после выбора ставки игра переходит в первую стадию
};

var int Round;
func void PC_Game_1()
{
AI_Output(other,self,"DIA_PlayGame_15_03"); // 20 золотых
Round = 20;
Player = TRUE; //Игрок в деле
Info_ClearChoices(NPC_Game);
};

func void PC_Game_2()
{
AI_Output(other,self,"DIA_PlayGame_15_04"); //30 золотых
Round = 30;
Player = TRUE;
Info_ClearChoices(NPC_Game);
};

func void PC_Game_3()
{
AI_Output(other,self,"DIA_PlayGame_15_05"); //50 золотых
Round = 50;
Player = TRUE;
Info_ClearChoices(NPC_Game);
};

func void PC_Game_4()
{
AI_Output(other,self,"DIA_PlayGame_15_06"); //100 золотых
Round = 100;
Player = TRUE;
Info_ClearChoices(NPC_Game);
};


instance NPC_Game_Start(C_Info) //Просчет костей для непися.
{
npc = VLK_454_Buerger;
nr = 3;
condition = PC_Game_Start_Condition;
information = PC_Game_Start_Info;
permanent = TRUE;
description = "Приступим";

};
func int PC_Game_Start_Condition()
{
if(Player == TRUE) && (Stage == 1)
{
return TRUE;
};
};
var int Game;
var int MyGame;
func void PC_Game_Start_Info()

{
AI_Output(other,self,"DIA_BigGame_15_99"); //Приступим.
Game = Hlp_Random(36);
if(Game/3 <= 2)
{
AI_Output(self,other,"DIA_BigGame_15_01"); //Проклятье! Двойка.
}
else if(Game/3 == 3)
{
AI_Output(self,other,"DIA_BigGame_15_02"); //Три очка.
}

else if(Game/3 == 4)
{
AI_Output(self,other,"DIA_BigGame_15_03"); //Четыре, паршиво.
}
else if(Game/3 == 5)
{
AI_Output(self,other,"DIA_BigGame_15_04"); //Пять.
}
else if(Game/3 == 6)
{
AI_Output(self,other,"DIA_BigGame_15_05"); //Шесть, хоть что-то.
}
else if(Game/3 == 7)
{
AI_Output(self,other,"DIA_BigGame_15_06"); //Семь.
}
else if(Game/3 == 8)
{
AI_Output(self,other,"DIA_BigGame_15_07"); //Восемь, неплохо, совсем неплохо.
}
else if(Game/3 == 9)
{
AI_Output(self,other,"DIA_BigGame_15_08"); //Девять. Посмотрим, что ты на это скажешь.
}
else if(Game/3 == 10)
{
AI_Output(self,other,"DIA_BigGame_15_09"); //Десятка, разрази меня гром! Я сегодня в ударе.
}
else if(Game/3 == 11)
{
AI_Output(self,other,"DIA_BigGame_15_10"); // Одинадцать.(хвастливо) Попробуй кинуть лучше!
}
else
{
AI_Output(self,other,"DIA_BigGame_15_11"); // Двенадцать.Ха-ха, теперь твои деньги уплывут в мой карман!
};
Stage = 2; // Вторая фаза.
};


instance NPC_HGame(C_Info) //Просчет для ГГ и сравнение результатов
{
npc = VLK_454_Buerger;
nr = 3;
condition = PC_HGame_Condition;
information = PC_HGame_Info;
permanent = TRUE;
description = "Моя очередь";
};


func int PC_HGame_Condition()
{
if (Stage == 2)
{
return TRUE;
};
};

func void PC_HGame_Info() //Формула выброса очков ГГ зависит от рендома и коэффициента ловкости
{
AI_Output(other,self,"DIA_BigGame_17_08"); //Моя очередь.
MyGame = Hlp_Random(36);
if(MyGame/3 + (other.attribute[ATR_DEXTERITY] /30) <= 2) && (Game/3 > 2)
{
AI_Output(self,other,"DIA_BigGame_16_01"); //Двойка. (усмехается) Тебе невезет приятель.
B_GiveInvItems(other,self,ItMi_Gold,Round);
}
else if(MyGame/3+ (other.attribute[ATR_DEXTERITY] /30) <= 2) && (Game/3 <= 2)
{
AI_Output(self,other,"DIA_BigGame_17_01"); //Двойка. Ничья.
}
else if(MyGame/3+ (other.attribute[ATR_DEXTERITY] /30) > Game/3)
{
AI_Output(self,other,"DIA_BigGame_16_02"); //Зараза, ты победил!
B_GiveInvItems(self,other,ItMi_Gold,Round);
}
else if(MyGame/3+ (other.attribute[ATR_DEXTERITY] /30) == Game/3)
{
AI_Output(self,other,"DIA_BigGame_16_08"); //Однако, счет равный.
}
else
{
AI_Output(self,other,"DIA_BigGame_16_09"); //Ты продул. А теперь гони мои деньги.
B_GiveInvItems(other,self,ItMi_Gold,Round);
};
Player = FALSE;
Stage = 0; //все обнуляется и можно снова играть
};


Рендомится число от 1 до 36 и делится на 3, затем проводится аналогичная операция с прибавлением ловкости деленной на тридцать, и оба результата сравниваются. Почему я взял такую формулу? Сперва была использован рендом 1-6, но результат выпадал практически всегда одинаковый: либо единица либо шестерка, что лишало всяких возможностей выиграть или проиграть. Подъем рендома до 12 ничего не менял в сущности, а з6/3 дает приемлимый результат - числа выпадают разные. Для ГГ пришлось добавить зависимость выигрыша от ловкости, ибо игра стала по настоящему случайной и подряд выиграть несколько раз не выйдет (с системой 1-6 выпадал выигрыш по десять раз подряд), а выиграть Безымянный должен. Ввиду сказанного было решено добавить плюс один к результату за каждые 30 ловкости прокачанной игроком. То есть, при ловкости 30, бонус к очкам - 1, при 60 ловкости - 2. Но эта формула была использована на самом простом игроке. Вот пример другого

if(CantharGame/3 +1 <= 2)
{
AI_Output(self,other,"DIA_BGame_15_06"); //Двойка.
}
else if(CantharGame/3 +1 == 3)
{
AI_Output(self,other,"DIA_BGame_15_07"); //Три очка.
}

else if(CantharGame/3 +1 == 4)
{
AI_Output(self,other,"DIA_BGame_15_08"); //Четыре, паршиво.
}
else if(CantharGame/3 +1 == 5)
{
AI_Output(self,other,"DIA_BGame_15_09"); //Пять.
То есть непись (Кантар) получает бонус и имеет все шансы вас сделать, если вы недостаточно прокачали ловкость. Таким образом добавляя неписям коэффициенты можно усложнить или упростить игроку жизнь. :)
 
Сверху Снизу