# internet_mobile !! { Plans and Subscriptions subscription[] The subscription itself that will be checked to see if Sveta can access the internet Possible values: Monthly subscriptions: 0: subscription is inactive, either never bought or expired. 1: subscription is active Metered plans: Any integer number, which means the available minutes left within the plan. This is how the old mobile minutes and internet time worked, but tracked in minutes, not hours for the internet. subscription[-date] The day the subscription was bought for the home (or mobile), this will be the renewal day. automatically set to `day`. Possible values 0-31, 1-31 are renewal days, 0 means the plan never expires. subscription[-price] The monthly fee of the subscription. subscription[-discount] The discount on the plan - relevant if the original discount was greater than the monthly fee. If the value is higher than 0, payments come from this first until the value gets to 0. subscription[-type] The type of the subscription. Possible values: 1: Monthly subscription 2: Metered plan Plan Names free: A subscription that is freely available, libraries, friends and lovers apartment, etc. that has a computer. The value of this plan is always 1 and the subscription date is 0. mobile: Mobile telephone (only internet or calls too?) and laptop if taken somewhere else. If at a location where subscription['free'] is used, she has to ask first to be able to use her own laptop with the local internet, otherwise it will still use the mobile subscription - if there is none, it won''t work. metered_mobile Cheaper option for broke Svetas. When subscription['mobile'] = 0 check for this and if `subscription['metered_mobile'] > 0` then use it. This is a monthly subscription that can be used in a specific home owned/rented by Sveta. This is tracking the internet subscription per home. So if Sveta owns several places, she has a separate subscription for each of them. For allowed values see `homes_properties`. monthly_calls A monthly mobile subscription giving unlimited call minutes and text message metered_calls A mobile plan that gives a set amount of minutes that can be used. } if subscription['free'] = 0: subscription['free'] = 1 !! Used for metered calls/texts/internet. !! $ARGS[1] = subscription name, i.e., 'metered_mobile' for mobile net or 'metered_calls' for phone calls and text messages !! ARGS[2] = the number of units purchased (minutes, calls, etc.) right now relevant for metered mobile internet !! ARGS[3] = the number of sms messages that can be sent with this top up - only for metered_calls !! NOTE: Putting this on top so if we decide not to use it, it is easy to find and delete if $ARGS[0] = 'top_up_metered': subscription[$ARGS[1]] += ARGS[2] subscription['<<$ARGS[1]>>-date'] = day if $ARGS[1] = 'metered_calls': subscription['<<$ARGS[1]>>-sms_limit'] += ARGS[3] if subscription['<<$ARGS[1]>>-type'] = 0: subscription['<<$ARGS[1]>>-type'] = 2 end !! In case we decide that internet prices are different for different homes (mobile definitely should be) !! $ARGS[1] = The plan name - see on top, generally the name of a property or a mobile plan. !! ARGS[2] = Subscription fee - the price to be paid every month !! ARGS[3] = The remaining amount from the discount when it was more than the monthly fee. Optional value !! See valid values in set_home.qsrc if $ARGS[0] = 'buy_subscription': subscription[$ARGS[1]] = 1 subscription['<<$ARGS[1]>>-date'] = day subscription['<<$ARGS[1]>>-price'] = ARGS[2] subscription['<<$ARGS[1]>>-discount'] = ARGS[3] if subscription['<<$ARGS[1]>>-type'] = 0: subscription['<<$ARGS[1]>>-type'] = 1 end !! Nightly check called from cikl - check for subscription renewal and suspension. if $ARGS[0] = 'check_subscription_actions': !! Get a list of the properties and their attributes that the player rented: !! $property_code[], $property_name[], $property_display[], $property_status_display[], $property_type[] !! property_status[], property_construction_status[], property_is_renovated[], property_sales_price[], !! property_renovation_value[] gs 'homes_properties', 'get_accessible_properties', 'home' count = ARRSIZE('$property_name') if count > 0: i = 0 :home_internet_subscription_loop if (property_status[i] = 1 or property_status[i] = 2) and subscription[$property_code[i]] = 1: if subscription['<<$property_code[i]>>-date'] = day: gs 'internet_mobile', 'renew_subscription', $property_code[i] if subscription['<<$property_code[i]>>-suspension_month'] = month and subscription['<<$property_code[i]>>-suspension_day'] >= day: gs 'internet_mobile', 'renew_subscription', $property_code[i] if subscription['<<$property_code[i]>>-suspension_month'] <= month and subscription['<<$property_code[i]>>-suspension_day'] < day: gs 'internet_mobile', 'suspend_subscription', $property_code[i] $result[j] = 'Internet Subscription for <<$property_display[i]>>: <>-contract_message'']>>' j += 1 end i += 1 if i < count: jump 'home_internet_subscription_loop' end gs 'homes_properties', 'clean_up_property_data' if subscription['mobile'] = 1: if subscription['mobile-date'] = day: gs 'internet_mobile', 'renew_subscription', 'mobile' if subscription['mobile-suspension_month'] = month and subscription['mobile-suspension_day'] >= day: gs 'internet_mobile', 'renew_subscription', 'mobile' if subscription['mobile-suspension_month'] <= month and subscription['mobile-suspension_day'] < day: gs 'internet_mobile', 'suspend_subscription', 'mobile' $result[j] = 'You Mobile Internet Subscription: <>' j += 1 end if subscription['monthly_calls'] = 1: if subscription['monthly_calls-date'] = day: gs 'internet_mobile', 'renew_subscription', 'monthly_calls' if subscription['monthly_calls-suspension_month'] = month and subscription['monthly_calls-suspension_day'] >= day: gs 'internet_mobile', 'renew_subscription', 'monthly_calls' if subscription['monthly_calls-suspension_month'] <= month and subscription['monthly_calls-suspension_day'] < day: gs 'internet_mobile', 'suspend_subscription', 'monthly_calls' $result[j] = 'You mobile contract: <>' j += 1 end killvar 'count' & killvar 'i' & killvar 'j' end !! Cancelling a subscription (currently uused only for metered_calls and metered_mobile to clean them up when a monthly subscription !! is bought to repplace them) !! $ARGS[1] - subscription name if $ARGS[0] = 'cancel_subscription': subscription[$ARGS[1]] = 0 subscription['<<$ARGS[1]>>-date'] = 0 subscription['<<$ARGS[1]>>-sms_limit'] = 0 subscription['<<$ARGS[1]>>-type'] = 0 subscription['<<$ARGS[1]>>-price'] = 0 subscription['<<$ARGS[1]>>-discount'] = 0 end !! Renewing the subscription if $ARGS[0] = 'renew_subscription': renewfee = subscription['<<$ARGS[1]>>-price'] acc_discount = subscription['<<$ARGS[1]>>-discount'] app_discount = MIN(acc_discount,renewfee) finalfee = app_discount rem_discount = acc_discount-app_discount if karta+bankDebtLimit > finalfee: karta -= finalfee subscription['<<$ARGS[1]>>-discount'] = rem_discount if app_discount > 0: $discounttext = '<>₽ and you had <> left on your account. After applying <> to your monthly fee, your final payable was <>₽ and you were left with <> on your account.' $subscription['<<$ARGS[1]>>-contract_message'] = 'Your monthly fee was' + iif(app_discount > 0, $discounttext, '<>₽ which was taken from your bank account.') if subscription['<<$ARGS[1]>>-suspension_month'] > 0: subscription['<<$ARGS[1]>>-suspension_month'] = 0 if subscription['<<$ARGS[1]>>-suspension_day'] > 0: subscription['<<$ARGS[1]>>-suspension_day'] = 0 else remainingday = 5 if subscription['<<$ARGS[1]>>-suspension_day'] > 0: remainingday = subscription['<<$ARGS[1]>>-suspension_day'] - day if app_discount > 0: $discounttext = ' and you had <> left on your account. After applying <> to your monthly fee, your final payable was <> and you were left with <> on your account.' $subscription['<<$ARGS[1]>>-contract_message'] = 'Your monthly fee was <>'+ iif(app_discount >0, $discounttext,', unfortunately your payment was declined. We will try to take the payment over the next <> days before suspending services.') gs 'internet_mobile', 'set_suspension_date', $ARGS[1] end killvar 'renewfee' killvar 'acc_discount' killvar 'app_discount' killvar 'finalfee' killvar 'rem_discount' killvar '$discounttext' killvar 'remainingday' end !! Transfer existing subscription from one home to another if Sveta is moving. if $ARGS[0] = 'transfer_subscription': allowed = func('internet_mobile', 'check_allowed_location', $ARGS[1]) allowed = allowed and func('internet_mobile', 'check_allowed_location', $ARGS[2]) if allowed: subscription[$ARGS[2]] = subscription[$ARGS[1]] subscription['<>-date'] = subscription['<<$ARGS[1]>>-date'] subscription['<>-price'] = subscription['<<$ARGS[1]>>-price'] subscription['<>-discount'] = subscription['<<$ARGS[1]>>-discount'] !! This one is always 1 because only type 1 subscriptions can be transferred, but making it "future proof" subscription['<>-type'] = subscription['<<$ARGS[1]>>-type'] subscription[$ARGS[0]] = 0 killvar 'allowed' end end !! This is a separate "function" because the check is a bit long, and can change if we realise it isn't the best way to do it. !! Spoiler alert: It is not, I'm pretty sure. !! if $ARGS[0] = 'check_allowed_location': gs 'homes_properties_attr', 'get_property_attr', $ARGS[1] result = property['internet_enabled'] = 1 killvar 'property' end !! $ARGS[1] - this is expected only if the location allows the use of subscription['free'], otherwise pass '' !! $ARGS[2] - Limitation code: : 'noporn', 'nocamshow' !! and on...can be up to 10 arguments. if $ARGS[0] = 'get_access': killvar 'access' $subsname = iif($ARGS[1] = '', func('homes_properties', 'get_property_code'), func('homes_properties', 'get_property_code', $ARGS[1])) if func('homes_properties', 'free_internet_available', $subsname) ! 0: $access['subscription'] = 'free' elseif $ARGS[1] = 'free': $access['subscription'] = 'free' elseif subscription[$subsname] = 1: $access['subscription'] = $subsname elseif subscription['mobile'] = 1: $access['subscription'] = 'mobile' elseif subscription['metered_mobile'] > 0: $access['subscription'] = 'metered_mobile' else $access = 'denied' end if $access ! 'denied': if subscription['<<$access[''subscription'']>>-type'] = 2: access['metered'] = 1 count = ARRSIZE('ARGS') if count > 2: k = 2 :loop_args access[$ARGS[k]] = 1 k += 1 if k < count: jump 'loop_args' end if access['noporn'] = 1: $access['noporn'] = 'You can''t search for porn on this computer' if access['nocamshow'] = 1: $access['nocamshow'] = 'You can''t do a cam show in this place' killvar 'count' & killvar 'k' end killvar 'subsname' end !! Adds a new limiation with a custom message !! If the limitation is already set, the existing message will be overwritten by the one passed here. !! !! $ARGS[1] - Limitation code: : 'noporn', 'nocamshow' !! $ARGS[2] - Custom message - optional if $ARGS[0] = 'add_limitation': access[$ARGS[1]] = 1 $access[$ARGS[1]] = $ARGS[2] end !!Remove the limiation passed in $ARGS[1] and set's it's custom message to '' !! !! $ARGS[1] - Limitation code: : 'noporn', 'nocamshow' if $ARGS[0] = 'remove_limitation': access[$ARGS[1]] = 0 $access[$ARGS[1]] = '' end !! Sets the message to limitation passed in $ARGS[1] if the limitation is active !! !! $ARGS[1] - Limitation code: : 'noporn', 'nocamshow' !! $ARGS[2] - Custom message if $ARGS[0] = 'set_limitation_message': if access[$ARGS[1]] = 1: $access[$ARGS[1]] = $ARGS[2] end !! Sets the date when the subscription will be cancelled if not paid. !! !! $ARGS[1] - the subscription name if $ARGS[0] = 'set_suspension_date': temp_month = month if month = 2: if ((year mod 4 = 0) and (year mod 100 ! 0)) or (year mod 400 = 0): switchday = 29 else switchday = 28 end elseif month = 4 or month = 6 or month = 9 or month = 11: switchday = 30 else switchday = 31 end temp_day = day + 5 if temp_day > switchday: temp_day -= switchday temp_month += 1 end subscription[$ARGS[1]+'suspension_day'] = temp_day subscription[$ARGS[1]+'suspension_month'] = temp_month killvar 'temp_month' killvar 'temp_day' end !! Sending an sms on a metered contract if $ARGS[0] = 'send_sms': if subscription['metered_calls'] = 1: subscription['sms_limit'] -= 1 end !! Using the internet - if metered, it lowers the minutes left !! $ARGS[1] - the name of the subscription used (this could be completely unnecessary, at this point there is an active !! $access which holds the subscription used.) !! ARGS[2] - the number of minutes used if $ARGS[0] = 'use_internet': if $subscription['<<$ARGS[1]>>-type'] = 'metered': subscription[$ARGS[1]] -= ARGS[2] if subscription[$ARGS[1]] < 0: subscription[$ARGS[1]] = 0 end end !! Checks if Sveta still has access to the internet - use it while she is on the computer, mostly relevant for metered net, !! but monthly subscription can end abruptly too if she did not pay. !! Use it as a func() returns 1 or 0 based on the subscription[$ARGS[1]] value !! !! $ARGS[1] - the name of the subscription (this could be completely unnecessary, at this point there is an active !! $access which holds the subscription used.) if $ARGS[0] = 'check_internet_access': if subscription[$ARGS[1]] > 0: result = 1 end --- internet_mobile ---------------------------------