Available on the market: TEMP1
Current mood balance: $curMoodBalance
Price per task: $pricePerTask
  choice:Buy a task for a slave,Change my own availability,Show my outstanding tasks,Help,Done
  assign:welcomeScreenChoice:LASTASK
  if: $welcomeScreenChoice == 1
    call:showSlaveSelection
  fi:
  if: $welcomeScreenChoice == 2
    call:changeOwnAvailability
  fi:
  if: $welcomeScreenChoice == 3
    call:showOutstandingTasks
  fi:  
  if: $welcomeScreenChoice == 4
    call:showHelpScreen
  fi:  
  if: $welcomeScreenChoice != 5
    assign:welcomeText1:''
    assign:else1:' else'
    goto:startOfWelcomeScreenLabel
  fi:
end:
;----------------------------------------------------------------
function:showOutstandingTasks
;----------------------------------------------------------------
  loadtemp1:TASKS_TODO_BY_ME
  assign:myOpenTasks:'TEMP1'
  assign:noOfElements:'$myOpenTasks'.split(';').length-1
  if: $noOfElements == 0
    show:You don't have any outstanding tasks.
    button:Thank you
    goto:endOfShowOutstandingTasks
  fi:
  assign:displayList:''
  assign:counter:0
  label:startOfShowOutstandingTasks
  assign:curElement:'$myOpenTasks'.split(';')[$counter]
  assign:curTaskName:'$curElement'.split(',')[0]
  assign:curTaskDeadline:'$curElement'.split(',')[1]
  settemp1:$curTaskDeadline
  assign:fullDaysLeft:Math.floor((TEMP1-TIMENOW)/(24*60*60*1000))
  assign:fullHoursLeft:Math.ceil((TEMP1-TIMENOW)/(60*60*1000))
  assign:fullHoursLeft:$fullHoursLeft - ($fullDaysLeft * 24)
  if: $fullHoursLeft == 24
    assign:fullDaysLeft:$fullDaysLeft+1
    assign:fullHoursLeft:0
  fi:
  assign:timeLeftString:''
  if: $fullDaysLeft == 1
    assign:timeLeftString:'$fullDaysLeft day and '
  fi:
  if: $fullDaysLeft > 1
    assign:timeLeftString:'$fullDaysLeft days and '
  fi:
  assign:timeLeftString:'$timeLeftString$fullHoursLeft hours'
  assign:displayList:'$displayList
$formattedAvailableSlaveNames assign:selectedNumber:LASTASK assign:selectedNumber:Math.floor(Math.abs(selectedNumber)) if: $selectedNumber == 0 goto:endOfShowSlaveSelectionLabel fi: if: $selectedNumber <= '$availableSlaveNames'.split(', ').length assign:selectedSlaveName:'$availableSlaveNames'.split(', ')[$selectedNumber-1] call:showTaskSelection else: show:$selectedNumber is not in the list. button:oh goto:startOfShowSlaveSelectionLabel fi: label:endOfShowSlaveSelectionLabel end: ;---------------------------------------------------------------- function:showTaskSelection ;---------------------------------------------------------------- call:getAvailableTasksList label:startOfShowTaskSelectionLabel assign:inList:'$availableTaskNames' call:getFormattedList assign:formattedAvailableTaskNames:'$outList' asknumber:Which task would you like me to force $selectedSlaveName to do? (Enter a number or 0 to abort)
$formattedAvailableTaskNames
  assign:selectedNumber:LASTASK
  assign:selectedNumber:Math.floor(Math.abs(selectedNumber))
  if: $selectedNumber == 0
    goto:endOfShowTaskSelectionLabel
  fi:
  if: $selectedNumber <= '$availableTaskNames'.split(', ').length
    assign:selectedTaskName:'$availableTaskNames'.split(', ')[$selectedNumber-1]
    call:buyTask
  else:
    show:$selectedNumber is not in the list.
    button:oh
    goto:startOfShowTaskSelectionLabel
  fi:
  label:endOfShowTaskSelectionLabel
end:
;----------------------------------------------------------------
function:getFormattedList
;----------------------------------------------------------------
; input: $inList
; output: $outList
;----------------------------------------------------------------
  assign:outList:''
  assign:noOfElements:'$inList'.split(', ').length
  if: $noOfElements == 0
    goto:endOfGetFormattedListLabel
  fi:
  assign:counter:0
  label:startOfGetFormattedListLabel
  assign:curElement:'$inList'.split(', ')[$counter]
  assign:counter:$counter+1
  assign:outList:'$outList
$counter. $curElement'
  if: $counter < $noOfElements
    goto:startOfGetFormattedListLabel
  fi:
  label:endOfGetFormattedListLabel
end:
;----------------------------------------------------------------
function:getTaskDescription
;----------------------------------------------------------------
; $input: $selectedTaskName
; $output: $taskDescription
;----------------------------------------------------------------
  assign:curTaskNo:1    
  label:startOfGetTaskDescriptionLabel
  assign:curTaskId:'task$curTaskNo'
  settemp1:$curTaskId
  assign:curTaskName:'TEMP1'.split(';')[0]
  if: '$curTaskName' == '$selectedTaskName'
    assign:taskDescription:'TEMP1'.split(';')[3]
  fi:
  assign:curTaskNo:$curTaskNo+1
  if:$curTaskNo <= $maxTask
    goto:startOfGetTaskDescriptionLabel
  fi:
  if: '$taskDescription' == ''
    assign:taskDescription:'No description available for this task'  
  fi:
end:
;----------------------------------------------------------------
function:buyTask
;----------------------------------------------------------------
  call:getTaskDescription
  show:Do you really want me to force $selectedSlaveName to do the task $selectedTaskName? This would cost you $pricePerTask mood (you currently have $curMoodBalance mood)
Task description: $taskDescription choice:Yes force them to do it,No I changed my mind if: LASTASK == 1 image:taskimg/assistant_at_desk5.jpg show:Alright, $selectedSlaveName will be forced to do the task $selectedTaskName. I will message you once I have informed them about the task (usually this happens when they run a random task). From that time on, they have 15 days to run the task. I will message you again, once they ran the task. setmood:(MOOD-$pricePerTask) assign:curMoodBalance:$curMoodBalance-$pricePerTask assign:dTaskName:'$selectedTaskName' assign:dTaskToUser:'$selectedSlaveName' call:globalScheduleTask call:removeOneTaskFromSelectedSlaveInGlobalSlaveList else: show:No problem, I will not assign the task to them, and you don't have to pay for it. fi: button:Thank you end: ;---------------------------------------------------------------- function:getCurSlaveAttributes ;---------------------------------------------------------------- ; input: $curSlaveName, $completeSlaveList ; output: $curSlaveIsAvailable, e.g. true ; $curSlaveAvailableSince, e.g. 12324365324 ; $curSlaveLockedSettingsUntil, e.g. 12324365324 ; $curSlaveTasksLeft, e.g. 7 ; $curSlaveHas, e.g. 'Penis,Crop,Candle,Pain-N,Pain-G' ; $curSlaveBody, i.e. 'P' | 'B' | 'N' ;---------------------------------------------------------------- assign:curSlaveIsAvailable:false assign:curSlaveLockedSettingsUntil:0 assign:curSlaveAvailableSince:0 assign:curSlaveTasksLeft:0 assign:curSlaveHas:'' assign:curSlaveBody:'' assign:noOfExistingSlaves:'$completeSlaveList'.split(';').length-1 assign:curIndex:-1 label:startOfGetCurSlaveAttributesLabel assign:curIndex:$curIndex+1 if: $curIndex > $noOfExistingSlaves-1 goto:endOfGetCurSlaveAttributesLabel fi: settemp1:'$completeSlaveList'.split(';')[$curIndex].split('!')[0] if: 'TEMP1' == '$curSlaveName' assign:curSlaveIsAvailable:true assign:curSlaveTasksLeft:'$completeSlaveList'.split(';')[$curIndex].split('!')[1] assign:curSlaveAvailableSince:'$completeSlaveList'.split(';')[$curIndex].split('!')[2] assign:curSlaveLockedSettingsUntil:'$completeSlaveList'.split(';')[$curIndex].split('!')[3] assign:curSlaveBody:'$completeSlaveList'.split(';')[$curIndex].split('!')[4] assign:curSlaveHas:'$completeSlaveList'.split(';')[$curIndex].split('!')[5] goto:endOfGetCurSlaveAttributesLabel fi: goto:startOfGetCurSlaveAttributesLabel label:endOfGetCurSlaveAttributesLabel if: $curSlaveLockedSettingsUntil < TIMENOW assign:curSlaveLockedSettingsUntil:0 fi: if: $curSlaveTasksLeft == 0 assign:curSlaveIsAvailable:false assign:curSlaveLockedSettingsUntil:0 assign:curSlaveHas:'' assign:curSlaveBody:'' fi: end: ;---------------------------------------------------------------- function:getAvailableSlaveNames ;---------------------------------------------------------------- ; input: $completeSlaveList ; output: $availableSlaveNames, e.g. 'Thomas3, JohnF, Lisa' ; $thisSlaveIsAvailable, e.g. true ; $thisSlaveLockedSettingsUntil, e.g. 1751253234534 ; $thisSlaveAvailableSince, e.g. 1751253234534 ; $thisSlaveTasksLeft, e.g. 10 ;---------------------------------------------------------------- assign:availableSlaveNames:'' assign:thisSlaveIsAvailable:false assign:thisSlaveAvailableSince:TIMENOW assign:thisSlaveLockedSettingsUntil:0 assign:thisSlaveTasksLeft:0 assign:noOfExistingSlaves:'$completeSlaveList'.split(';').length-1 assign:curIndex:-1 label:startOfGetAvailableSlaveNamesLabel assign:curIndex:$curIndex+1 if: $curIndex > $noOfExistingSlaves-1 goto:endOfGetAvailableSlaveNamesLabel fi: assign:curSlaveName:'$completeSlaveList'.split(';')[$curIndex].split('!')[0] call:getCurSlaveAttributes if: '$curSlaveName' == 'SNAME' assign:thisSlaveIsAvailable:$curSlaveIsAvailable assign:thisSlaveLockedSettingsUntil:$curSlaveLockedSettingsUntil assign:thisSlaveAvailableSince:$curSlaveAvailableSince assign:thisSlaveTasksLeft:$curSlaveTasksLeft fi: if: '$curSlaveName' != 'SNAME' && $curSlaveIsAvailable assign:availableSlaveNames:'$availableSlaveNames, $curSlaveName' fi: goto:startOfGetAvailableSlaveNamesLabel label:endOfGetAvailableSlaveNamesLabel assign:availableSlaveNames:'$availableSlaveNames'.slice(2) end: ;---------------------------------------------------------------- function:getAvailableTasksList ;---------------------------------------------------------------- ; input: $curSlaveName ; output: $availableTaskNames, e.g. 'spanking_1, confession_1' ;---------------------------------------------------------------- assign:curSlaveName:'$selectedSlaveName' call:getCurSlaveAttributes assign:curTaskNo:1 assign:availableTaskNames:'' label:startOfGetAvailableTaslsListLabel assign:curTaskId:'task$curTaskNo' settemp1:$curTaskId assign:curTaskName:'TEMP1'.split(';')[0] assign:curTaskBody:'TEMP1'.split(';')[1] assign:curTaskRequires:'TEMP1'.split(';')[2] assign:requirementsSize:'$curTaskRequires'.split(',').length assign:curRequirementIndex:0 label:startOfAnalyzeCurTaskRequirements settemp1:'$curTaskRequires'.split(',')[$curRequirementIndex] assign:curRequirementName:'TEMP1' if:!'$curSlaveHas'.includes('$curRequirementName') goto:dontAddTaskLabel fi: assign:curRequirementIndex:$curRequirementIndex+1 if: $curRequirementIndex < $requirementsSize goto:startOfAnalyzeCurTaskRequirements fi: if: !'$curTaskBody'.includes('$curSlaveBody') goto:dontAddTaskLabel fi: assign:availableTaskNames:'$availableTaskNames, $curTaskName' label:dontAddTaskLabel assign:curTaskNo:$curTaskNo+1 if:$curTaskNo <= $maxTask goto:startOfGetAvailableTaslsListLabel fi: ; make the order a bit more random: Keep alphabethical order, but with a random start (e.g. X, Y, Z, A, B, C...) assign:cutAtPlace:Math.floor(Math.random() * '$availableTaskNames'.length) assign:cutAtPlace:'$availableTaskNames'.indexOf(', ',$cutAtPlace) if: $cutAtPlace != -1 assign:firstPart:'$availableTaskNames'.substring(0,$cutAtPlace) assign:secondPart:'$availableTaskNames'.substring($cutAtPlace) assign:availableTaskNames:'$secondPart$firstPart' fi: assign:availableTaskNames:'$availableTaskNames'.slice(2) end: ;---------------------------------------------------------------- function:removeOneTaskFromSelectedSlaveInGlobalSlaveList ;---------------------------------------------------------------- assign:indexOfStart:'$completeSlaveList'.indexOf('$selectedSlaveName!') assign:indexOfStart:$indexOfStart+'$selectedSlaveName'.length+1 assign:indexOfEnd:'$completeSlaveList'.indexOf('!',$indexOfStart) assign:curTasksLeftOld:'$completeSlaveList'.substring($indexOfStart,$indexOfEnd) assign:curTasksLeftNew:$curTasksLeftOld-1 assign:completeSlaveList:'$completeSlaveList'.replace('$selectedSlaveName!$curTasksLeftOld','$selectedSlaveName!$curTasksLeftNew') assign:globalSlaveListVarNeedsUpdate:true end: ;---------------------------------------------------------------- function:updateThisSlaveInGlobalSlaveList ;---------------------------------------------------------------- assign:indexOfStart:'$completeSlaveList'.indexOf('SNAME!') assign:oldThisSlaveHas:'' assign:actuallyUpdatedThisSlaveHas:false if: $indexOfStart != -1 assign:indexOfEnd:'$completeSlaveList'.indexOf(';',$indexOfStart) assign:substringBefore:'$completeSlaveList'.substring(0,$indexOfStart) assign:substringAfter:'$completeSlaveList'.substring($indexOfEnd+1,99999999) assign:oldThisSlaveHas:'$completeSlaveList'.substring($indexOfStart,$indexOfEnd) assign:completeSlaveList:'$substringBefore$substringAfter' assign:curIndex:'$oldThisSlaveHas'.split('!').length assign:curIndex:$curIndex-1 assign:oldThisSlaveHas:'$oldThisSlaveHas'.split('!')[$curIndex] fi: if: $thisSlaveIsAvailable assign:thisSlaveAvailableSince:TIMENOW call:readThisSlaveHas assign:completeSlaveList:'SNAME!$thisSlaveTasksLeft!$thisSlaveAvailableSince!$thisSlaveLockedSettingsUntil!$thisSlaveBody!$thisSlaveHas;$completeSlaveList' assign:actuallyUpdatedThisSlaveHas: '$oldThisSlaveHas' != '$thisSlaveHas' fi: assign:globalSlaveListVarNeedsUpdate:true end: ;---------------------------------------------------------------- function:loadCompleteSlaveList ;---------------------------------------------------------------- ; output: $completeSlaveList, e.g. 'Adam!4!1234!5678!P!Crop;TittyTwister!13!7654!2344!P!Crop,Candle,Pain-N,Pain-G;Thomas3!12!2345!7894!P!Crop,Pain-N,Pain-G;JohnF!4!1234!456!P!Crop,Pain-N,Pain-G,Nippleclamps;Lisa!99999!34544!68745!B!Crop,Candle,Pain-N,Pain-G;' ; format: 'SNAME!<$curSlaveTasksLeft>!<$curSlaveAvailableSince>!<$curSlaveLockedSettingsUntil>!<$curSlaveBody>!<$curSlaveHas>;...' ;---------------------------------------------------------------- loadgtemp1:MARKET_1_COMPLETE_SLAVE_LIST assign:completeSlaveList:'TEMP1' end: ;---------------------------------------------------------------- function:maybeSaveCompleteSlaveList ;---------------------------------------------------------------- ; Also update the slave list if the user's limits have changed if: !$globalSlaveListVarNeedsUpdate assign:oldCompleteSlaveList:'$completeSlaveList' call:updateThisSlaveInGlobalSlaveList if: $actuallyUpdatedThisSlaveHas assign:globalSlaveListVarNeedsUpdate:true else: assign:globalSlaveListVarNeedsUpdate:false fi: fi: if: $globalSlaveListVarNeedsUpdate settemp1:'$completeSlaveList' savegtemp1:MARKET_1_COMPLETE_SLAVE_LIST call:exportAvailableSlavesOnMarket fi: end: ;---------------------------------------------------------------- function:exportAvailableSlavesOnMarket ;---------------------------------------------------------------- call:getAvailableSlaveNames settemp1:'$availableSlaveNames' if: $thisSlaveIsAvailable settemp1:'SNAME, TEMP1' fi: savegtemp1:MARKET_1_AVAILABLE_SLAVES end: ;---------------------------------------------------------------- function:readThisSlaveHas ;---------------------------------------------------------------- ; output: $thisSlaveHas, e.g. 'NotinChastity,Candle' ; $thisSlaveBody, i.e. 'P' | 'B' | 'N' ;---------------------------------------------------------------- assign:thisSlaveBody:'N' ; ------ Body: ------ if: HAS_PENIS assign:thisSlaveBody:'P' fi: if: HAS_BREASTS assign:thisSlaveBody:'B' fi: ; assign:thisSlaveHas:'' ; ------ Chastity/Denial: ------ if: INCHASTITY assign:thisSlaveHas:'$thisSlaveHas,InChastity' fi: if: !INCHASTITY assign:thisSlaveHas:'$thisSlaveHas,NotinChastity' fi: if: !DENIED assign:thisSlaveHas:'$thisSlaveHas,CanCum' fi: ; ------ Toys: ------ ;TODO: Remoteestim ;TODO: Remoteshock ;TODO: Remotelock if: T_BUTTPLUG assign:thisSlaveHas:'$thisSlaveHas,Buttplug' fi: if: T_CANDLE assign:thisSlaveHas:'$thisSlaveHas,Candle' fi: if: T_CROP assign:thisSlaveHas:'$thisSlaveHas,Crop' fi: if: T_DILDO assign:thisSlaveHas:'$thisSlaveHas,Dildo' fi: if: T_ESTIM assign:thisSlaveHas:'$thisSlaveHas,E-Stim' fi: if: T_GAG assign:thisSlaveHas:'$thisSlaveHas,Gag' fi: if: T_HANDCUFFS assign:thisSlaveHas:'$thisSlaveHas,Handcuffs' fi: if: T_HUMBLER assign:thisSlaveHas:'$thisSlaveHas,Humbler' fi: if: T_NIPPLECLAMPS assign:thisSlaveHas:'$thisSlaveHas,Nippleclamps' fi: ; ------ Limits: ------ if: L_ANAL > 1 assign:thisSlaveHas:'$thisSlaveHas,Anal' fi: if: L_ATM > 1 assign:thisSlaveHas:'$thisSlaveHas,ATM' fi: if: L_BONDAGE > 1 assign:thisSlaveHas:'$thisSlaveHas,Bondage' fi: if: L_CHASTITY > 1 assign:thisSlaveHas:'$thisSlaveHas,ChastityDevice' fi: if: L_CUM > 1 assign:thisSlaveHas:'$thisSlaveHas,Cum' fi: if: L_FACE > 1 assign:thisSlaveHas:'$thisSlaveHas,Face' fi: if: L_FITNESS > 1 assign:thisSlaveHas:'$thisSlaveHas,Fitness' fi: if: L_FINDOM > 1 assign:thisSlaveHas:'$thisSlaveHas,Financial' fi: if: L_ONLINE > 1 assign:thisSlaveHas:'$thisSlaveHas,Online' fi: if: L_OUTDOOR > 1 assign:thisSlaveHas:'$thisSlaveHas,Outdoor' fi: if: L_EXHIB > 1 assign:thisSlaveHas:'$thisSlaveHas,Exhibitionism' fi: if: L_DENIAL > 1 assign:thisSlaveHas:'$thisSlaveHas,Orgasm' fi: if: L_PAIN_G > 1 assign:thisSlaveHas:'$thisSlaveHas,Pain-G' fi: if: L_PAIN_N > 1 assign:thisSlaveHas:'$thisSlaveHas,Pain-N' fi: if: L_INFO > 1 assign:thisSlaveHas:'$thisSlaveHas,PInfo' fi: if: L_SISSY > 1 assign:thisSlaveHas:'$thisSlaveHas,Sissy' fi: if: L_SHAVE > 1 assign:thisSlaveHas:'$thisSlaveHas,Shaving' fi: if: L_WATERSPORT > 1 assign:thisSlaveHas:'$thisSlaveHas,Watersport' fi: assign:thisSlaveHas:'$thisSlaveHas'.slice(1) end: ;================================================================ ;======================= start of the task ====================== ;================================================================ call:loadCompleteSlaveList call:welcomeScreen call:maybeSaveCompleteSlaveList call:taskQueue2Finish ;