Divergent/mods/Blackjack/gamedata/scripts/ui_mod_elements.script

1098 lines
44 KiB
Plaintext

function start_game()
run_dynamic_element(ui_mod_elements.card_game_21_point())
end
function on_game_start()
RegisterScriptCallback("on_option_change",init_main_settings)
RegisterScriptCallback("actor_on_first_update", actor_on_first_update)
end
-------------------------------------------------------
-- Àäàïòàöèÿ èãðû 21 äëÿ Call of Chernobyl --
-- FonSwong 23.02.2016
-- Ñîçäàíèå äèàëîãîâ äëÿ NPC, à òàêæå ïðàâêà ñêðèïòîâîãî òåêñòà --
-- First_Lieutenant_Skelja --
-------------------------------------------------------
card_game_21_minimum_rate=50
value_card_21_max_rate=1000
function actor_on_first_update()
if ui_mcm then
card_game_21_minimum_rate=ui_mcm.get("21_game/card_game_21_minimum_rate")
value_card_21_max_rate=ui_mcm.get("21_game/value_card_21_max_rate")
end
init_main_settings()
end
function init_main_settings()
if (ini_sys:r_string_ex("string_table","language") == "rus") then
st_21_point_your_card_value = 'Âû:'
st_21_point_enemy_card_value = 'Ñîïåðíèê:'
st_21_point_rate_field = 'Âàøà ñòàâêà íà âûèãðûø:'
st_21_point_infoline_1 = 'Â âàøåì ðþêçàêå äåíåã:'
st_21_point_infoline_2 = 'Ìèíèìàëüíàÿ ñòàâêà - '..card_game_21_minimum_rate..', ìàêñèìàëüíàÿ ñòàâêà -'
st_21_point_money = 'ðóáëåé.'
st_21_point_info_about_your = 'Âû: ñòàâêà'
st_21_point_info_about_enemy = 'Ïðîòèâíèê: ñòàâêà'
st_21_point_web_money = 'ýëåêòðîííûõ ðóáëåé.'
st_21_point_winner_your_1 = 'Âû âûèãðàëè. Âûèãðûø ñîñòàâèë -'
st_21_point_winner_your_2 = 'ðóáëåé. Ñóììà î÷êîâ: âû -'
st_21_point_winner_your_3 = ', ïðîòèâíèê -'
st_21_point_winner_enemy_1 = 'Âû ïðîèãðàëè. Ïðîèãðàø ñîñòàâèë -'
st_21_point_winner_enemy_2 = 'ðóáëåé. Ñóììà î÷êîâ: âû -'
st_21_point_winner_enemy_3 = ', ïðîòèâíèê -'
st_21_point_winner_equally_1 = 'Íè÷üÿ. Ñóììà î÷êîâ: âû -'
st_21_point_winner_equally_2 = ', ïðîòèâíèê -'
st_21_point_title = 'Èãðà: 21 î÷êî'
st_21_point_dont_money_to_rate = 'Ïîâûøåíèå ñòàâêè íåâîçìîæíî: íå õâàòàåò äåíåã.'
st_21_point_dont_take_rate = 'Ïðîäîëæåíèå èãðû íåâîçìîæíî: ñòàâêè íå ñäåëàíû.'
st_21_point_dont_take_rate2 = 'Òû ïðîñàäèë âñå äåíüãè, ñòàëêåð!'
st_21_point_dont_take_rate3 = 'Ìèíèìàëüíàÿ ñòàâêà - '..card_game_21_minimum_rate
st_question_game_title = 'Èãðà: ×òî? Ãäå? Êîãäà?'
st_question_game_reward_advice = 'Çàðàáîòàí ñîâåò:'
st_question_game_reward_money = 'Ïîëó÷åíû äåíüãè:'
st_in_web_money = 'Ïîëó÷åíû äåíüãè:'
else
st_21_point_your_card_value = 'You:'
st_21_point_enemy_card_value = 'Opponent:'
st_21_point_rate_field = 'Your bet:'
st_21_point_infoline_1 = 'Your money left:'
st_21_point_infoline_2 = 'Minimum bet - '..card_game_21_minimum_rate..', Maximum bet -'
st_21_point_money = 'rubles.'
st_21_point_info_about_your = 'You: bet'
st_21_point_info_about_enemy = 'Opponent: bet'
st_21_point_web_money = 'E-rubles.'
st_21_point_winner_your_1 = 'You win. Total -'
st_21_point_winner_your_2 = 'rubles. Total points: your -'
st_21_point_winner_your_3 = ', Opponent -'
st_21_point_winner_enemy_1 = 'You loose. Total -'
st_21_point_winner_enemy_2 = 'rubles. Total points: your -'
st_21_point_winner_enemy_3 = ', Opponent -'
st_21_point_winner_equally_1 = 'Push. Total points: your -'
st_21_point_winner_equally_2 = ', Opponent -'
st_21_point_title = 'Game: Blackjack '
st_21_point_dont_money_to_rate = 'You cannot raise bet: not enough money.'
st_21_point_dont_take_rate = 'You cannot start game: there is no bets.'
st_21_point_dont_take_rate2 = 'You run out of money, stalker!'
st_21_point_dont_take_rate3 = 'Minimum bet - '..card_game_21_minimum_rate
st_question_game_title = 'Èãðà: ×òî? Ãäå? Êîãäà?'
st_question_game_reward_advice = 'Çàðàáîòàí ñîâåò:'
st_question_game_reward_money = 'Ïîëó÷åíû äåíüãè:'
st_in_web_money = 'Money taken:'
end
end
-------------------------------------------------------
-- Ïåðåìåííàÿ: òàáëèöà --
-------------------------------------------------------
table_mod_data_all={}
table_mod_data_actor={}
table_mod_data_actor_cleaner={}
table_mod_data_object={}
table_mod_data_object_cleaner={}
table_mod_utils={}
table_mod_offline={}
table_mod_secrets={}
table_mod_autosaves={}
table_mod_callbacks={}
table_mod_schemes={}
table_mod_teleports={}
table_mod_mineraps={}
table_mod_respawn={}
table_mod_timers={}
table_level_changes={}
table_s_skill_hits={}
table_m_skill_hits={}
table_m_capture_hits={}
table_flashlight={}
table_squad_dm={}
-------------------------------------------------------
-- Ïåðåìåííàÿ: false/true --
-------------------------------------------------------
bool_approach_sleep_began=false
bool_approach_sleep=false
bool_aura_inactivity_inc=false
bool_aura_inactivity_dec=false
bool_aura_inactivity_action=false
bool_aura_inactivity_need_release=false
bool_allspawn_auto_print=false
bool_headshot_s_allower=false
bool_headshot_s_waiting=false
bool_headshot_m_allower=false
bool_headshot_m_waiting=false
bool_end_of_the_month=false
bool_enter_level_change=false
bool_travel_level_change=false
bool_throw_level_change=false
bool_snd_end=false
bool_surge_day_is_present=false
bool_surge_day_is_critical=false
bool_surge_day_end=false
bool_black_day_end=false
bool_every_night_end=false
bool_remote_marker=false
bool_show_restrictors=false
bool_show_anomalies=false
bool_show_smarts=false
bool_cheat_mode_activate=false
bool_is_ui_disabled=false
bool_mod_update=true
bool_data_loaded=false
-------------------------------------------------------
-- Ïåðåìåííàÿ: ÷èñëî --
-------------------------------------------------------
value_bodyguard_release_victim=0
value_capture_meal_monster_id=0
value_wpn1_state_bar=0
value_wpn2_state_bar=0
value_guidebook_type=1
value_marauder_outfit_id=0
value_throw_item_id=0
value_throw_item_cond=1.0
value_outfit_flg=0
value_helm_flg=0
value_remote_marker=0
value_last_discount=0.0
value_rank_counter=0
value_headshot_counter=0
value_demo_anim_counter=0
value_safe_loaded=0
value_shot_item_ammo=-1
value_webmoney_course_from=20
value_webmoney_course_before=80
value_pstor_factor=0
------------------------------------------------------------------------------
-- Êàðòî÷íàÿ èãðà: 21 î÷êî --
------------------------------------------------------------------------------
card_game_21_stage="need_rate"
card_game_21_take_else="empty_card"
card_game_21_existing_masks={"kresta","pika","bubna","chirva"}
card_game_21_existing_names={"6","7","8","9","10","J","Q","K","T"}
card_game_21_winner="none"
card_game_21_enemy_name=""
card_game_21_info_about_your=""
card_game_21_info_about_enemy=""
card_game_21_your_points=0
card_game_21_enemy_points=0
card_game_21_rate=0
card_game_21_show_winner="hide"
card_game_21_difficulty="easy"
card_game_21_increasing_rate=50
local card_game_21_deck_amount = 1
local card_game_21_init_deck = (function()
local deck = {}
for i = 1, card_game_21_deck_amount do
for _, mask in ipairs(card_game_21_existing_masks) do
for _, name in ipairs(card_game_21_existing_names) do
deck[#deck + 1] = {
mask=mask,
name=name
}
end
end
end
return deck
end)()
local card_game_21_deck = card_game_21_init_deck
local loose_snd = sound_object("interface\\21_game\\full_loose")
local new_card_snd = sound_object("interface\\21_game\\new_card")
local new_game_snd = sound_object("interface\\21_game\\new_game")
class "card_game_21_point" (CUIScriptWnd)
function card_game_21_point:__init(owner) super()
self.owner = owner
self:InitControls()
self:InitCallBacks()
end
function card_game_21_point:__finalize()
end
function card_game_21_point:InitControls()
self:SetWndRect(Frect():set(0,0,1024,768))
xml = CScriptXmlInit()
xml:ParseFile("ui_mod_elements.xml")
self.card_game_21_point_form=xml:InitStatic("card_game_21_point_form",self)
self:start_button(xml,"btn_exit_game")
self:start_button(xml,"btn_play_game")
self:start_button(xml,"btn_take_else")
self:start_button(xml,"btn_send_move")
self:start_button(xml,"btn_continue_game")
self:start_button(xml,"btn_rate_minus")
self:start_button(xml,"btn_rate_plus")
self:start_button(xml,"btn_take_rate")
self.form_title=xml:InitStatic("card_game_21_point_form:form_title",self.card_game_21_point_form)
self.check_save_rate=xml:InitCheck("card_game_21_point_form:check_save_rate",self.card_game_21_point_form)
self.check_save_rate:SetCheck(info_get_boolean("card_game_21_save_rate"))
self.check_increasing=xml:InitCheck("card_game_21_point_form:check_increasing",self.card_game_21_point_form)
self.check_increasing:SetCheck(info_get_boolean("card_game_21_increasing"))
self.your_game_info=xml:InitStatic("card_game_21_point_form:your_game_info",self.card_game_21_point_form)
self.enemy_game_info=xml:InitStatic("card_game_21_point_form:enemy_game_info",self.card_game_21_point_form)
self.your_card_value=xml:InitStatic("card_game_21_point_form:your_card_value",self.card_game_21_point_form)
self.enemy_card_value=xml:InitStatic("card_game_21_point_form:enemy_card_value",self.card_game_21_point_form)
self.self_card_1=xml:InitStatic("card_game_21_point_form:self_card_1",self.card_game_21_point_form)
self.self_card_2=xml:InitStatic("card_game_21_point_form:self_card_2",self.card_game_21_point_form)
self.self_card_3=xml:InitStatic("card_game_21_point_form:self_card_3",self.card_game_21_point_form)
self.self_card_4=xml:InitStatic("card_game_21_point_form:self_card_4",self.card_game_21_point_form)
self.self_card_5=xml:InitStatic("card_game_21_point_form:self_card_5",self.card_game_21_point_form)
self.enemy_card_1=xml:InitStatic("card_game_21_point_form:enemy_card_1",self.card_game_21_point_form)
self.enemy_card_2=xml:InitStatic("card_game_21_point_form:enemy_card_2",self.card_game_21_point_form)
self.enemy_card_3=xml:InitStatic("card_game_21_point_form:enemy_card_3",self.card_game_21_point_form)
self.enemy_card_4=xml:InitStatic("card_game_21_point_form:enemy_card_4",self.card_game_21_point_form)
self.enemy_card_5=xml:InitStatic("card_game_21_point_form:enemy_card_5",self.card_game_21_point_form)
self.rate_field=xml:InitStatic("card_game_21_point_form:rate_field",self.card_game_21_point_form)
self.infoline_1=xml:InitStatic("card_game_21_point_form:your_game_info",self.card_game_21_point_form)
self.infoline_2=xml:InitStatic("card_game_21_point_form:enemy_game_info",self.card_game_21_point_form)
self.r_green_diod=xml:InitStatic("card_game_21_point_form:r_green_diod",self.card_game_21_point_form)
self.l_green_diod=xml:InitStatic("card_game_21_point_form:l_green_diod",self.card_game_21_point_form)
self.r_yellow_diod=xml:InitStatic("card_game_21_point_form:r_yellow_diod",self.card_game_21_point_form)
self.l_yellow_diod=xml:InitStatic("card_game_21_point_form:l_yellow_diod",self.card_game_21_point_form)
self.r_red_diod=xml:InitStatic("card_game_21_point_form:r_red_diod",self.card_game_21_point_form)
self.l_red_diod=xml:InitStatic("card_game_21_point_form:l_red_diod",self.card_game_21_point_form)
self.winner_box=CUIMessageBoxEx()
self:Register(self.winner_box,"winner_box")
end
function card_game_21_point:InitCallBacks()
self:AddCallback("btn_exit_game",ui_events.BUTTON_CLICKED,self.btn_exit_game,self)
self:AddCallback("btn_play_game",ui_events.BUTTON_CLICKED,self.btn_play_game,self)
self:AddCallback("btn_take_else",ui_events.BUTTON_CLICKED,self.btn_take_else,self)
self:AddCallback("btn_send_move",ui_events.BUTTON_CLICKED,self.btn_send_move,self)
self:AddCallback("btn_take_rate",ui_events.BUTTON_CLICKED,self.btn_take_rate,self)
self:AddCallback("btn_rate_minus",ui_events.BUTTON_CLICKED,self.btn_rate_minus,self)
self:AddCallback("btn_rate_plus",ui_events.BUTTON_CLICKED,self.btn_rate_plus,self)
self:AddCallback("btn_continue_game",ui_events.BUTTON_CLICKED,self.btn_continue_game,self)
self:AddCallback("winner_box",ui_events.MESSAGE_BOX_OK_CLICKED,self.show_game_winner,self)
self:AddCallback("winner_box",ui_events.MESSAGE_BOX_YES_CLICKED,self.show_game_winner,self)
end
function card_game_21_point:Update()
CUIScriptWnd.Update(self)
if not object_alive(db.actor) then
self:btn_exit_game()
else
self.form_title:TextControl():SetText(st_21_point_title)
if card_game_21_stage=="play_game" or card_game_21_stage=="end_game" then
self.your_game_info:TextControl():SetText(card_game_21_info_about_your)
self.enemy_game_info:TextControl():SetText(card_game_21_info_about_enemy)
self.your_card_value:TextControl():SetText(st_21_point_your_card_value.." "..card_game_21_your_points)
self.enemy_card_value:TextControl():SetText(st_21_point_enemy_card_value.." "..card_game_21_enemy_points)
else
self.your_game_info:TextControl():SetText("")
self.enemy_game_info:TextControl():SetText("")
self.your_card_value:TextControl():SetText("")
self.enemy_card_value:TextControl():SetText("")
end
if card_game_21_stage=="need_rate" then
self.rate_field:TextControl():SetText(st_21_point_rate_field.." "..card_game_21_rate)
self.infoline_1:TextControl():SetText(st_21_point_infoline_1.." "..db.actor:money().." "..st_21_point_money)
self.infoline_2:TextControl():SetText(st_21_point_infoline_2.." "..value_card_21_max_rate..".")
else
self.infoline_1:TextControl():SetText("")
self.infoline_2:TextControl():SetText("")
end
end
if card_game_21_rate<card_game_21_minimum_rate then
card_game_21_rate=card_game_21_minimum_rate
elseif card_game_21_rate>value_card_21_max_rate then
card_game_21_rate=value_card_21_max_rate
end
if card_game_21_rate>db.actor:money() then
card_game_21_rate=db.actor:money()
end
if card_game_21_stage=="need_rate" then
self.get_btn_send_move:Show(false)
self.get_btn_take_else:Show(false)
self.get_btn_play_game:Show(false)
self.get_btn_send_move:Enable(false)
self.get_btn_take_else:Enable(false)
self.get_btn_play_game:Enable(false)
self.get_btn_take_rate:Show(true)
self.get_btn_take_rate:Enable(true)
self.get_btn_rate_minus:Show(true)
self.get_btn_rate_plus:Show(true)
self.get_btn_continue_game:Show(false)
self.get_btn_continue_game:Enable(false)
self.get_btn_exit_game:Show(true)
self.get_btn_exit_game:Enable(true)
self.check_save_rate:Show(true)
self.check_save_rate:Enable(true)
self.check_increasing:Show(true)
self.check_increasing:Enable(true)
self.r_green_diod:Show(false)
self.r_green_diod:Enable(false)
self.l_green_diod:Show(false)
self.l_green_diod:Enable(false)
self.r_yellow_diod:Show(false)
self.r_yellow_diod:Enable(false)
self.l_yellow_diod:Show(false)
self.l_yellow_diod:Enable(false)
self.r_red_diod:Show(false)
self.r_red_diod:Enable(false)
self.l_red_diod:Show(false)
self.l_red_diod:Enable(false)
if card_game_21_rate<=card_game_21_minimum_rate then
self.get_btn_rate_minus:Enable(false)
else
self.get_btn_rate_minus:Enable(true)
end
if card_game_21_rate>=value_card_21_max_rate then
self.get_btn_rate_plus:Enable(false)
else
self.get_btn_rate_plus:Enable(true)
end
elseif card_game_21_stage=="taked_rate" then
self.get_btn_send_move:Show(false)
self.get_btn_take_else:Show(false)
self.get_btn_play_game:Show(true)
self.get_btn_send_move:Enable(false)
self.get_btn_take_else:Enable(false)
self.get_btn_play_game:Enable(true)
self.get_btn_take_rate:Show(false)
self.get_btn_take_rate:Enable(false)
self.get_btn_rate_minus:Show(false)
self.get_btn_rate_plus:Show(false)
self.get_btn_rate_minus:Enable(false)
self.get_btn_rate_plus:Enable(false)
self.get_btn_continue_game:Show(false)
self.get_btn_continue_game:Enable(false)
self.get_btn_exit_game:Enable(true)
self.check_save_rate:Show(false)
self.check_save_rate:Enable(false)
self.check_increasing:Show(false)
self.check_increasing:Enable(false)
self.r_green_diod:Show(false)
self.r_green_diod:Enable(false)
self.l_green_diod:Show(false)
self.l_green_diod:Enable(false)
self.r_yellow_diod:Show(false)
self.r_yellow_diod:Enable(false)
self.l_yellow_diod:Show(false)
self.l_yellow_diod:Enable(false)
self.r_red_diod:Show(true)
self.r_red_diod:Enable(true)
self.l_red_diod:Show(true)
self.l_red_diod:Enable(true)
elseif card_game_21_stage=="play_game" then
self.get_btn_play_game:Show(false)
self.get_btn_play_game:Enable(false)
self.get_btn_send_move:Show(true)
self.get_btn_take_else:Show(true)
self.get_btn_send_move:Enable(true)
self.get_btn_take_else:Enable(true)
self.get_btn_take_rate:Show(false)
self.get_btn_take_rate:Enable(false)
self.get_btn_rate_minus:Show(false)
self.get_btn_rate_plus:Show(false)
self.get_btn_rate_minus:Enable(false)
self.get_btn_rate_plus:Enable(false)
self.get_btn_continue_game:Show(false)
self.get_btn_continue_game:Enable(false)
self.get_btn_exit_game:Enable(false)
self.get_btn_exit_game:Show(false)
self.check_save_rate:Show(false)
self.check_save_rate:Enable(false)
self.check_increasing:Show(false)
self.check_increasing:Enable(false)
self.r_green_diod:Show(false)
self.r_green_diod:Enable(false)
self.l_green_diod:Show(false)
self.l_green_diod:Enable(false)
self.r_yellow_diod:Show(true)
self.r_yellow_diod:Enable(true)
self.l_yellow_diod:Show(true)
self.l_yellow_diod:Enable(true)
self.r_red_diod:Show(false)
self.r_red_diod:Enable(false)
self.l_red_diod:Show(false)
self.l_red_diod:Enable(false)
elseif card_game_21_stage=="end_game" then
self.get_btn_send_move:Show(false)
self.get_btn_take_else:Show(false)
self.get_btn_send_move:Enable(false)
self.get_btn_take_else:Enable(false)
self.get_btn_play_game:Show(false)
self.get_btn_play_game:Enable(false)
self.get_btn_take_rate:Show(false)
self.get_btn_take_rate:Enable(false)
self.get_btn_rate_minus:Show(false)
self.get_btn_rate_plus:Show(false)
self.get_btn_rate_minus:Enable(false)
self.get_btn_rate_plus:Enable(false)
self.get_btn_continue_game:Show(true)
self.get_btn_continue_game:Enable(true)
self.check_save_rate:Show(false)
self.check_save_rate:Enable(false)
self.check_increasing:Show(false)
self.check_increasing:Enable(false)
if card_game_21_winner=="your" then
self.r_green_diod:Show(false)
self.r_green_diod:Enable(false)
self.l_green_diod:Show(true)
self.l_green_diod:Enable(true)
self.r_yellow_diod:Show(false)
self.r_yellow_diod:Enable(false)
self.l_yellow_diod:Show(false)
self.l_yellow_diod:Enable(false)
self.r_red_diod:Show(true)
self.r_red_diod:Enable(true)
self.l_red_diod:Show(false)
self.l_red_diod:Enable(false)
elseif card_game_21_winner=="enemy" then
self.r_green_diod:Show(true)
self.r_green_diod:Enable(true)
self.l_green_diod:Show(false)
self.l_green_diod:Enable(false)
self.r_yellow_diod:Show(false)
self.r_yellow_diod:Enable(false)
self.l_yellow_diod:Show(false)
self.l_yellow_diod:Enable(false)
self.r_red_diod:Show(false)
self.r_red_diod:Enable(false)
self.l_red_diod:Show(true)
self.l_red_diod:Enable(true)
elseif card_game_21_winner=="equally" then
self.r_green_diod:Show(true)
self.r_green_diod:Enable(true)
self.l_green_diod:Show(true)
self.l_green_diod:Enable(true)
self.r_yellow_diod:Show(false)
self.r_yellow_diod:Enable(false)
self.l_yellow_diod:Show(false)
self.l_yellow_diod:Enable(false)
self.r_red_diod:Show(false)
self.r_red_diod:Enable(false)
self.l_red_diod:Show(false)
self.l_red_diod:Enable(false)
end
end
if card_game_21_show_winner=="end_show" then
self:btn_exit_game(false)
card_game_21_show_winner="hide"
self.get_btn_continue_game:Show(false)
self.get_btn_continue_game:Enable(false)
end
if self.check_increasing:GetCheck()==true and card_game_21_increasing_rate~=200 then
card_game_21_increasing_rate=200
elseif self.check_increasing:GetCheck()==false and card_game_21_increasing_rate~=50 then
card_game_21_increasing_rate=50
end
info_give_on_boolean(self.check_save_rate:GetCheck(),"card_game_21_save_rate")
info_give_on_boolean(self.check_increasing:GetCheck(),"card_game_21_increasing")
end
function card_game_21_point:OnKeyboard(dik,keyboard_action)
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
if dik==DIK_keys.DIK_ESCAPE and card_game_21_stage~="play_game" and card_game_21_stage~="end_game" then
self:btn_exit_game()
end
end
return true
end
function card_game_21_point:start_button(xml,button_name)
self["get_"..button_name]=xml:Init3tButton("card_game_21_point_form:"..button_name,self.card_game_21_point_form)
self:Register(self["get_"..button_name],button_name)
end
function card_game_21_point:ClearGameCards()
for i=1,5 do
self["self_card_"..i]:InitTexture("ui_mod_card_hide_side")
self["enemy_card_"..i]:InitTexture("ui_mod_card_hide_side")
end
end
function card_game_21_point:FillCardPoint(param,name,mask)
local result=0
if name=="6" then result=6
elseif name=="7" then result=7
elseif name=="8" then result=8
elseif name=="9" then result=9
elseif name=="10" then result=10
elseif name=="J" then result=2
elseif name=="Q" then result=3
elseif name=="K" then result=4
elseif name=="T" then result=11
end
self[param]:InitTexture("ui_mod_card_"..name.."_"..mask)
if find_in_string(param,"self_") then
card_game_21_your_points=card_game_21_your_points+result
else
card_game_21_enemy_points=card_game_21_enemy_points+result
end
end
function card_game_21_point:FillEnemyStep(step_num)
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
-- comment bullshit rigged mechanics
-- if card_game_21_difficulty=="hard" and get_rnd(1,2)==1 then
-- if self:GetNearestPoint(card_game_21_enemy_points)==11 then
-- name=get_random_line("T,10")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==9 or self:GetNearestPoint(card_game_21_enemy_points)==10 then
-- name=get_random_line("9,10")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==8 then
-- name=get_random_line("8")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==7 then
-- name=get_random_line("7,8")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==6 then
-- name=get_random_line("6")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==5 or self:GetNearestPoint(card_game_21_enemy_points)==4 then
-- name=get_random_line("K,Q")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==3 then
-- name=get_random_line("Q,J")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==2 then
-- name=get_random_line("J")
-- end
-- elseif card_game_21_difficulty=="normal" and get_rnd(1,4)==1 then
-- if self:GetNearestPoint(card_game_21_enemy_points)==11 then
-- name=get_random_line("T,10")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==9 or self:GetNearestPoint(card_game_21_enemy_points)==10 then
-- name=get_random_line("9,10")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==8 then
-- name=get_random_line("7,8,9")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==7 then
-- name=get_random_line("6,7,8")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==6 then
-- name=get_random_line("6,K")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==5 or self:GetNearestPoint(card_game_21_enemy_points)==4 then
-- name=get_random_line("K,Q")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==3 then
-- name=get_random_line("K,Q,J")
-- elseif self:GetNearestPoint(card_game_21_enemy_points)==2 then
-- name=get_random_line("J")
-- end
-- end
self:FillCardPoint("enemy_card_"..step_num,name,mask)
end
function card_game_21_point:GetNearestPoint(value)
local need_value=21
if value<need_value then
return need_value-value
elseif value>need_value then
return value-need_value
elseif value==need_value then
return 0
end
end
function card_game_21_point:GetTooManyPoint(value,extra_mode)
local need_value=21
if value<need_value then
return false
elseif value>need_value then
return true
elseif value==need_value then
if extra_mode==nil or extra_mode==false then
return true
else
return false
end
end
end
function card_game_21_point:btn_rate_minus()
card_game_21_rate=card_game_21_rate-card_game_21_increasing_rate
end
function card_game_21_point:btn_rate_plus()
card_game_21_rate=card_game_21_rate+card_game_21_increasing_rate
end
function card_game_21_point:btn_take_rate()
if db.actor:money() == 0 then
loose_snd:play(db.actor, 0, sound_object.s2d)
run_choose_box("yes","card_game_21_point",st_21_point_dont_take_rate2)
self:HideDialog()
set_ui_worked()
return
end
if card_game_21_rate < card_game_21_minimum_rate then
run_choose_box("yes","card_game_21_point",st_21_point_dont_take_rate3)
return
end
if card_game_21_rate>0 and db.actor:money()>=card_game_21_rate then
new_game_snd:play(db.actor, 0, sound_object.s2d)
card_game_21_stage="taked_rate"
else
run_choose_box("yes","card_game_21_point",st_21_point_dont_take_rate)
end
end
function card_game_21_point:btn_exit_game(hide)
if hide==nil or hide==true then
self:HideDialog()
set_ui_worked()
end
card_game_21_stage="need_rate"
card_game_21_info_about_your=""
card_game_21_info_about_enemy=""
card_game_21_enemy_name=""
card_game_21_your_points=0
card_game_21_enemy_points=0
card_game_21_take_else="empty_card"
card_game_21_winner="none"
if self.check_save_rate:GetCheck()==false then
card_game_21_rate=card_game_21_minimum_rate
end
card_game_21_show_winner="hide"
self:ClearGameCards()
end
function card_game_21_point:btn_play_game()
card_game_21_deck = shuffle(card_game_21_init_deck)
--card_game_21_difficulty=get_random_line("easy,normal,hard")
if new_game_snd:playing() then new_game_snd:stop() end
new_card_snd:play(db.actor, 0, sound_object.s2d)
card_game_21_stage="play_game"
card_game_21_winner="none"
card_game_21_info_about_your=st_21_point_info_about_your.." "..card_game_21_rate.." "..st_21_point_money
card_game_21_info_about_enemy=card_game_21_enemy_name..st_21_point_info_about_enemy.." "..card_game_21_rate.." "..st_21_point_web_money
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
self:FillCardPoint("self_card_1",name,mask)
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
self:FillCardPoint("self_card_2",name,mask)
end
function card_game_21_point:btn_take_else()
new_card_snd:play(db.actor, 0, sound_object.s2d)
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
if card_game_21_take_else=="empty_card" then
self:FillCardPoint("self_card_3",name,mask)
card_game_21_take_else="1st_card"
elseif card_game_21_take_else=="1st_card" then
self:FillCardPoint("self_card_4",name,mask)
card_game_21_take_else="2nd_card"
elseif card_game_21_take_else=="2nd_card" then
self:FillCardPoint("self_card_5",name,mask)
card_game_21_take_else="3rd_card"
self:btn_send_move()
end
end
function card_game_21_point:btn_send_move()
new_card_snd:play(db.actor, 0, sound_object.s2d)
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
self:FillCardPoint("enemy_card_1",name,mask)
local card = table.remove(card_game_21_deck)
local name, mask = card["name"], card["mask"]
self:FillCardPoint("enemy_card_2",name,mask)
local threshold_value=math.random(3,4)
if self:GetNearestPoint(card_game_21_enemy_points)>threshold_value and self:GetTooManyPoint(card_game_21_enemy_points)==false then
self:enemy_move_add_one()
else
self:winner_reward()
end
end
function card_game_21_point:enemy_move_add_one()
self:FillEnemyStep(3)
local threshold_value=math.random(3,4)
if self:GetNearestPoint(card_game_21_enemy_points)>threshold_value and self:GetTooManyPoint(card_game_21_enemy_points)==false then
self:enemy_move_add_two()
else
self:winner_reward()
end
end
function card_game_21_point:enemy_move_add_two()
self:FillEnemyStep(4)
local threshold_value=math.random(3,4)
if self:GetNearestPoint(card_game_21_enemy_points)>threshold_value and self:GetTooManyPoint(card_game_21_enemy_points)==false then
self:enemy_move_add_three()
else
self:winner_reward()
end
end
function card_game_21_point:enemy_move_add_three()
self:FillEnemyStep(5)
self:winner_reward()
end
function card_game_21_point:winner_reward()
if r_mod_params("bool","card_game_21_rules_default",true)==true then
if self:GetTooManyPoint(card_game_21_your_points,true)==false and self:GetTooManyPoint(card_game_21_enemy_points,true)==true then
card_game_21_winner="your"
elseif self:GetTooManyPoint(card_game_21_your_points,true)==true and self:GetTooManyPoint(card_game_21_enemy_points,true)==false then
card_game_21_winner="enemy"
else
if self:GetNearestPoint(card_game_21_your_points)<self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="your"
elseif self:GetNearestPoint(card_game_21_your_points)>self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="enemy"
elseif self:GetNearestPoint(card_game_21_your_points)==self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="equally"
end
end
elseif r_mod_params("bool","card_game_21_rules_default",true)==false then
if self:GetNearestPoint(card_game_21_your_points)==self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="equally"
elseif self:GetNearestPoint(card_game_21_your_points)<self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="your"
elseif self:GetNearestPoint(card_game_21_your_points)>self:GetNearestPoint(card_game_21_enemy_points) then
card_game_21_winner="enemy"
end
end
card_game_21_stage="end_game"
end
function card_game_21_point:btn_continue_game()
card_game_21_show_winner="begin_show"
self.winner_box:InitMessageBox("message_box_ok")
if card_game_21_winner=="your" then
dialogs.relocate_money(db.actor,card_game_21_rate,"in")
--game_stats.money_quest_update(card_game_21_rate)
self.winner_box:SetText(st_21_point_winner_your_1.." "..card_game_21_rate.." "..st_21_point_winner_your_2.." "..card_game_21_your_points..st_21_point_winner_your_3.." "..card_game_21_enemy_points..".")
elseif card_game_21_winner=="enemy" then
dialogs.relocate_money(db.actor,card_game_21_rate,"out")
db.actor:give_money(-card_game_21_rate)
--game_stats.money_quest_update(-card_game_21_rate)
self.winner_box:SetText(st_21_point_winner_enemy_1.." "..card_game_21_rate.." "..st_21_point_winner_enemy_2.." "..card_game_21_your_points..st_21_point_winner_enemy_3.." "..card_game_21_enemy_points..".")
else
self.winner_box:SetText(st_21_point_winner_equally_1.." "..card_game_21_your_points..st_21_point_winner_equally_2.." "..card_game_21_enemy_points..".")
end
self.winner_box:ShowDialog(true)
if db.actor:money() == 0 then
loose_snd:play(db.actor, 0, sound_object.s2d)
run_choose_box("yes","card_game_21_point",st_21_point_dont_take_rate2)
self:HideDialog()
set_ui_worked()
return
end
end
function card_game_21_point:show_game_winner()
self.winner_box:ShowDialog(false)
self.winner_box:HideDialog()
card_game_21_show_winner="end_show"
end
------------------------------------------------------------------------------
-- Çàãðóç÷èê èíôîðìàöèîííûõ áëîêîâ --
------------------------------------------------------------------------------
local information_control = nil
class "information_block" (CUIScriptWnd)
function information_block:__init() super()
self:SetWndRect(Frect():set(0,0,1024,768))
self.information_mb=CUIMessageBoxEx()
self:Register(self.information_mb,"information_mb")
self:AddCallback("information_mb",ui_events.MESSAGE_BOX_OK_CLICKED,self.OnMsgOk,self)
self:AddCallback("information_mb",ui_events.MESSAGE_BOX_YES_CLICKED,self.OnMsgYes,self)
self:AddCallback("information_mb",ui_events.MESSAGE_BOX_NO_CLICKED,self.OnMsgNo,self)
end
function information_block:Show(mb_type,reason_type,text,extra_value)
if mb_type=="yes_or_no" or mb_type=="no_or_yes" then
self.information_mb:InitMessageBox("message_box_yes_no")
else
self.information_mb:InitMessageBox("message_box_ok")
end
self.information_mb:SetText(text)
self.information_mb:ShowDialog(true)
self.reason_type=reason_type
if extra_value~=nil then
self.extra_value=extra_value
end
if reason_type=="level_change" then
set_ui_disabled()
end
end
function information_block:OnMsgOk()
if self.reason_type=="level_change" then
set_ui_worked()
bool_travel_level_change=false
bool_throw_level_change=true
end
if self.reason_type=="remove_bad_outfit" then
remove_item_from_slot(db.actor,7)
end
self:block_select()
end
function information_block:OnMsgYes()
if self.reason_type=="level_change" then
set_ui_worked()
bool_travel_level_change=true
end
if self.reason_type=="remove_bad_outfit" then
remove_item_from_slot(db.actor,7)
end
self:block_select()
end
function information_block:OnMsgNo()
if self.reason_type=="level_change" then
set_ui_worked()
bool_travel_level_change=false
bool_throw_level_change=true
end
self:block_select()
end
function information_block:block_select()
end
function information_block_show(mb_type,reason_type,text,extra_value)
if information_control==nil then
information_control=ui_mod_elements.information_block()
end
information_control:Show(mb_type,reason_type,text,extra_value)
end
-- 'Îáüåêò æèâîé.
function object_alive(victim)
if victim:alive()==true then
return true
end
return false
end
-- 'Îáüåêò æèâîé.
function object_exists(obj,is_live)
return level.present() and obj~=nil and (is_live==false or ((is_live==nil or is_live==true) and obj:alive()==true))
end
-- 'Óñòàíîâêà îòñóòñòâèÿ UI.
function set_ui_disabled()
bool_is_ui_disabled=true
end
-- 'Óñòàíîâêà ïðèñóòñòâèÿ UI.
function set_ui_worked()
bool_is_ui_disabled=false
end
-- 'Çàïóñê îêîøêà, â êîòîðîì íóæíî íàæèìàòü êíîïêè Äà:Íåò:Îê.
function run_choose_box(type,reason,text,extra_value)
if object_exists(db.actor) and device().precache_frame==0 then
ui_mod_elements.information_block_show(type,reason,text,extra_value)
end
end
-- 'Óäàëèòü ïðåäìåò îáüåêòà, èç ñëîòà.
function remove_item_from_slot(victim,slot_number)
if victim:item_in_slot(tonumber(slot_number))~=nil then
remove_object_by_id(victim:item_in_slot(tonumber(slot_number)):id())
end
end
-- 'Ñëó÷àéíûé âûáîð çíà÷åíèÿ èç ïåðåìåííîé.
function get_random_line(line)
line_table=parse_general_names(line)
return get_random_string(line_table)
end
-- 'Ïàðñèíã çíà÷åíèé ðàçäåë¸ííûõ çàïÿòûìè â òàáëèöó.
function parse_general_names(s)
local t = {}
for name in string.gfind(s,"([%w_\\]+)%p*") do
local w_name=parse_codicil(name)
if avail_codicil(name)==true then table.insert(t,w_name) end
end
return t
end
function parse_codicil(name)
if find_out_string(name,"silencer") then
if find_in_string(name,"45x39_") or find_in_string(name,"56x45_") or find_in_string(name,"7x28_") then
return "ammo_5."..name
elseif find_in_string(name,"62x54_") or find_in_string(name,"62x51_") then
return "ammo_7."..name
elseif find_in_string(name,"43x23_") then
return "ammo_11."..name
elseif find_in_string(name,"7x99_") then
return "ammo_12."..name
end
else
if find_in_string(name,"45x39") or find_in_string(name,"56x45") then
return "wpn_addon_silencer_5."..name
elseif find_in_string(name,"43x23") then
return "wpn_addon_silencer_11."..name
end
end
if find_in_string(name,"7b") then
return "ammo_og-"..name
elseif find_in_string(name,"6") and find_out_string(name,"_") then
return "wpn_rg-"..name
elseif find_in_string(name,"05_lighting") then
return "grenade_gd-"..name
elseif find_in_string(name,"05_double") then
return "grenade_gd-"..name
elseif find_in_string(name,"05") and find_out_string(name,"_") then
return "grenade_gd-"..name
elseif find_in_string(name,"25") and find_out_string(name,"_") then
return "ammo_vog-"..name
end
return name
end
-- 'Ïðèñóòñòâèå â íàçâàíèè ñòðîêè.
function find_in_string(where,what)
if where~=nil and what~=nil and string.find(where,what) then
return true
elseif where==nil or what==nil then
return nil
end
return false
end
-- 'Ñëó÷àéíûé âûáîð ñòðîêè èç òàáëèöû.
function get_random_string(tbl)
return tbl[math.random(table.getn(tbl))]
end
-- 'Îòñóòñòâèå â íàçâàíèè ñòðîêè.
function find_out_string(where,what)
if where~=nil and what~=nil and string.find(where,what) then
return false
elseif where==nil or what==nil then
return nil
end
return true
end
-- 'Ïðîïóñê ôóíêöèè parse_general_names ÷åðåç ôèëüòð, ïîòîìó êàê ýòà ôóíêöèÿ ñ÷èòûâàåò òî÷êó êàê çàïÿòóþ.
function avail_codicil(name)
if (find_in_string(name,"ammo_5") or find_in_string(name,"ammo_7") or find_in_string(name,"ammo_11") or find_in_string(name,"ammo_12") or find_in_string(name,"grenade_gd") or find_in_string(name,"ammo_og") or find_in_string(name,"ammo_vog") or (find_in_string(name,"wpn_rg") and find_out_string(name,"rgd"))) and find_out_string(name,"12x7") then
return false
end
return true
end
-- 'Ñëó÷àéíîå ÷èñëî
function get_rnd(v1,v2)
if v1==nil and v2==nil then v1,v2=1,2 end
local rnd_value=math.random(v1,v2)
return rnd_value
end
-- 'Ñ÷èòûâàòü ãëàâíûå îïöèè.
function r_mod_params(val_type,target_string,default_value,use_action)
return get_params_by_section("mod_parameters\\mod_params.ltx","mod_params",val_type,target_string,default_value,use_action)
end
-- 'Ôóíöèÿ ÷òåíèÿ ïàðàìåòðîâ ñ êîíôèãîâ.
function get_params_by_section(ini_name,section,val_type,target_string,default_value,use_action)
local ini,line=ini_file(ini_name),section
if val_type=="number" then
if ini:line_exist(line,target_string) then
if use_action==nil or use_action=="nil" then
return ini:r_float(line,target_string)
elseif use_action=="floor" then
return ini:r_float(line,target_string)/100
elseif use_action=="multiply" then
return ini:r_float(line,target_string)*100
end
else
if use_action==nil or use_action=="nil" then
return default_value
elseif use_action=="floor" then
return default_value/100
elseif use_action=="multiply" then
return default_value*100
end
end
elseif val_type=="string" then
if ini:line_exist(line,target_string) then
if use_action==nil or use_action=="nil" then
return ini:r_string(line,target_string)
elseif use_action=="floor" then
return ini:r_string(line,target_string)/100
elseif use_action=="multiply" then
return ini:r_string(line,target_string)*100
end
else
if use_action==nil or use_action=="nil" then
return default_value
elseif use_action=="floor" then
return default_value/100
elseif use_action=="multiply" then
return default_value*100
end
end
elseif val_type=="bool" then
if ini:line_exist(line,target_string) then
if use_action==nil or use_action=="nil" then
return ini:r_bool(line,target_string)
elseif use_action=="floor" then
return ini:r_bool(line,target_string)/100
elseif use_action=="multiply" then
return ini:r_bool(line,target_string)*100
end
else
if use_action==nil or use_action=="nil" then
return default_value
elseif use_action=="floor" then
return default_value/100
elseif use_action=="multiply" then
return default_value*100
end
end
else
return 0
end
end
-- 'Ðàáîòà ñ ýëåêòðîííûìè äåíüãàìè.
function relocate_web_money(num,type,with_news,show_time)
local web_money=read_mod_param("actor_web_money")
if web_money==nil then web_money=0 end
if db.actor then
if type == "in" then
write_mod_param("actor_web_money",web_money+num)
elseif type == "out" then
write_mod_param("actor_web_money",web_money-num)
end
if with_news==nil or with_news==true then
news_relocate_web_money(db.actor,type,num,show_time)
end
end
end
-- '×òåíèå ãëîáàëüíîé ïåðåìåííîé.
function read_mod_param(variable_name,safe)
if table_mod_data_actor[variable_name]~=nil then
return table_mod_data_actor[variable_name]
elseif safe==true then
return 0
else
return nil
end
end
function info_get_boolean(info,inversion)
if info~=nil then
if has_alife_info(info) then
if inversion==true then
result=false
else
result=true
end
else
if inversion==true then
result=true
else
result=false
end
end
end
return result
end
function info_give_on_boolean(value,info,inversion)
if value~=nil and info~=nil then
if value==true then
if inversion==true then
disable_info(info)
else
give_info(info)
end
else
if inversion==true then
give_info(info)
else
disable_info(info)
end
end
end
end
-- 'Çàïèñü ãëîáàëüíîé ïåðåìåííîé â òàáëèöó, èç êîòîðîé ýòè äàííûå ïîòîì ïåðåêî÷óþò â ôàéë.
function write_mod_param(variable_name,variable_value)
table_mod_data_actor[variable_name]=variable_value
end
function news_relocate_web_money(actor,type,amount,show_time)
local show_value=3000
if exists(show_time) then
show_value=show_time
end
if db.actor == nil then return false end
if type == "in" then
local news_caption = st_in_web_money
local news_text = game.translate_string(tostring(amount))
if db.actor:is_talking() then
db.actor:give_talk_message2(news_caption, news_text, "ui_inGame2_Dengi_polucheni", "iconed_answer_item")
else
db.actor:give_game_news(news_caption, news_text, "ui_inGame2_Dengi_polucheni", 0, show_value)
end
elseif type == "out" then
local news_caption = game.translate_string("st_out_web_money")
local news_text = game.translate_string(tostring(amount))
if db.actor:is_talking() then
db.actor:give_talk_message2(news_caption, news_text, "ui_inGame2_Dengi_otdani", "iconed_answer_item")
else
db.actor:give_game_news(news_caption, news_text, "ui_inGame2_Dengi_otdani", 0, show_value)
end
end
end
-- 'Ïðîâåðêà íà àäåêâàòíîñòü çíà÷åíèÿ.
function exists(val)
return val~=nil and val~="nil"
end
-- Shuffle table, Fisher-Yates shuffle with preserving original table
function shuffle(t)
local s = {}
for i = 1, #t do s[i] = t[i] end
for i = #t, 2, -1 do
local j = math.random(i)
s[i], s[j] = s[j], s[i]
end
return s
end